Saya beralih ke PHP 5.6.0 dan sekarang saya mendapatkan peringatan berikut di mana-mana:
Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will
be removed in a future version. To avoid this warning set
'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream
instead. in Unknown on line 0
Warning: Cannot modify header information - headers already sent in Unknown on line 0
Baiklah, saya mengandalkan beberapa fitur yang sudah usang. Kecuali aku tidak!
- Saya belum pernah menggunakan variabel ini di skrip saya. Sejujurnya saya tidak tahu itu ada.
phpinfo()
menunjukkan bahwa saya telahalways_populate_raw_post_data
set ke 0 (dinonaktifkan). Jadi apa yang terjadi?
Saya tidak ingin "menghindari peringatan" dengan menyetel nilai ini ke -1. Ini hanya akan menyembunyikan peringatan, dan saya masih akan menghentikan konfigurasi. Saya ingin menyelesaikan masalah di sumbernya dan mengetahui mengapa PHP berpikir bahwa HTTP_RAW_POST_DATA
pengisian dihidupkan.
Jawaban:
Ternyata pemahaman saya tentang pesan error tersebut salah. Saya akan mengatakan itu fitur pilihan kata yang sangat buruk. Mencari-cari di Google menunjukkan kepada saya bahwa ada orang lain yang salah memahami pesan tersebut persis seperti yang saya lakukan - lihat bug PHP # 66763 .
Setelah benar-benar tidak membantu, "Inilah yang diinginkan RM." menanggapi bug itu oleh Mike, Tyrael menjelaskan bahwa menyetelnya ke "-1" tidak hanya membuat peringatan itu menghilang. Ia melakukan hal yang benar , yaitu menonaktifkan sepenuhnya pengisian variabel pelakunya. Ternyata menyetelnya ke 0 MASIH mengisi data dalam beberapa keadaan. Bicara tentang desain yang buruk! Untuk mengutip PHP RFC :
Jadi ya, menyetelnya ke -1 tidak hanya menghindari peringatan, seperti yang dikatakan pesan tersebut, tetapi juga akhirnya menonaktifkan pengisian variabel ini, yang saya inginkan.
sumber
always_populate_raw_post_data = -1
. masih sekarang peringatan datang dan merusak respon jsonphp.ini
file Anda dan set (atau hapus komentar)always_populate_raw_post_data = -1
.To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead.
Sudah beberapa saat sampai saya menemukan kesalahan ini. Berikan jawaban saya untuk siapa saja yang mungkin tersandung pada masalah ini.
Kesalahan hanya berarti Anda mengirim permintaan POST kosong. Kesalahan ini biasanya ditemukan di HTTPRequests tanpa parameter yang diteruskan. Untuk menghindari kesalahan ini, Anda selalu dapat menambahkan parameter ke POST tanpa mengubah php.ini.
Suka:
sumber
Saya mengalami masalah yang sama di server nginx (DigitalOcean) - yang harus saya lakukan hanyalah masuk
root
dan memodifikasi file/etc/php5/fpm/php.ini
.Untuk menemukan garis dengan
always_populate_raw_post_data
I rungrep
:Itu mengembalikan garis
704
Kemudian cukup buka
php.ini
di baris itu denganvi
editor:Hapus titik koma untuk menghapus komentar dan simpan file
:wq
Terakhir, reboot server dan kesalahannya hilang.
sumber
php.ini
Anda mungkin menggunakan konfigurasi pengembangan php.ini.Anda harus menambahkan atau tanda komentar properti
always_populate_raw_post_data
diphp.ini
dan set nilainya ke-1
. Dalam kasus sayaphp.ini
terletak di:C:\wamp64\bin\php\php5.6.25\php.ini
Terakhir restart WAMP (atau klik restart semua layanan)
sumber
Jika
.htaccess
file tidak tersedia, buat di folder root dan lewati baris kode ini.Taruh ini di
.htaccess
file (diuji bekerja dengan baik untuk API)sumber
Tidak mengomentari
di php.ini (baris # 703) dan memulai kembali layanan APACHE membantu saya menyingkirkan pesan tersebut
sumber
Bagi siapa pun yang masih berjuang dengan masalah ini setelah mengubah php.init seperti yang disarankan oleh jawaban yang diterima. Karena kesalahan terjadi ketika petisi ajax dibuat melalui
POST
tanpa parameter apa pun yang harus Anda lakukan adalah mengubah metode kirim keGET
.Masih opsi lain jika Anda ingin mempertahankan metode
POST
karena alasan apa pun adalah menambahkan objek JSON kosong ke ajax petititon.sumber
Saya mendapat pesan kesalahan ini saat mengirim data dari bentuk html (Metode posting). Yang harus saya lakukan adalah mengubah pengkodean dalam bentuk dari "teks / biasa" menjadi "aplikasi / x-www-form-urlencoded" atau "multipart / form-data". Pesan kesalahan itu sangat menyesatkan.
sumber
Sayangnya, jawaban @EatOng ini salah . Setelah membaca jawabannya, saya menambahkan variabel dummy ke setiap permintaan AJAX yang saya aktifkan (bahkan jika beberapa di antaranya sudah memiliki beberapa bidang) hanya untuk memastikan kesalahan tidak pernah muncul.
Tapi sekarang saya menemukan kesalahan yang sama dari PHP. Saya mengkonfirmasi dua kali bahwa saya telah mengirim beberapa data POST (beberapa bidang lain juga bersama dengan variabel dummy). Versi PHP
5.6.25
,always_populate_raw_post_data
nilai ditetapkan ke0
.Juga, saat saya mengirim
application/json
permintaan, PHP tidak mengisinya$_POST
, melainkan saya harus kejson_decode()
badan permintaan POST mentah, dapat diakses olehphp://input
.Sebagai jawaban dari @ rr- cites,
Karena metode permintaan pasti POST, saya kira PHP tidak mengenali / menyukai
Content-Type: application/json
permintaan saya (sekali lagi, mengapa ??).PILIHAN 1:
Edit
php.ini
file secara manual dan setel variabel pelakunya ke-1
, seperti yang disarankan oleh banyak jawaban di sini.PILIHAN 2:
Ini adalah bug PHP 5.6. Tingkatkan PHP.
OPSI 3:
Seperti yang dijawab oleh @ user9541305 di sini, mengubah
Content-Type
permintaan AJAX menjadiapplication/x-www-form-urlencoded
ataumultipart/form-data
akan membuat PHP mengisi$_POST
dari badan POSTed (karena PHP menyukai / mengenalicontent-type
header tersebut !?).OPSI 4: RESOR TERAKHIR
Yah, saya tidak ingin mengubah
Content-Type
AJAX, itu akan menyebabkan banyak masalah untuk debugging. (Chrome DevTools melihat dengan baik variabel POST dari permintaan JSON.)Saya mengembangkan hal ini untuk klien dan tidak dapat meminta mereka untuk menggunakan PHP terbaru, atau mengedit file php.ini. Sebagai upaya terakhir, saya hanya akan memeriksa apakah sudah diatur
0
dan jika demikian, editphp.ini
file dalam skrip PHP saya itu sendiri. Tentu saja saya harus meminta pengguna untuk merestart apache. Sayang sekali!Berikut ini contoh kode:
sumber
Nah, jika ada seseorang di luar sana di shared hosting dan tanpa akses ke
php.ini
file, Anda dapat mengatur baris kode ini di bagian paling atas file PHP Anda:Bekerja lebih sama. Saya harap ini menghemat waktu debugging seseorang :)
sumber
NB: JIKA ANDA MENGGUNAKAN PHPSTORM
Saya menghabiskan satu jam mencoba untuk memecahkan masalah ini, berpikir bahwa itu adalah masalah server php saya, Jadi saya menetapkan 'always_populate_raw_post_data' ke '-1' di php.ini dan tidak ada yang berhasil.
Sampai saya mengetahui bahwa menggunakan phpStorm built in server adalah penyebab masalah seperti yang dijelaskan dalam jawaban di sini: Jawaban oleh LazyOne Di sini , Jadi saya berpikir untuk membagikannya.
sumber
; always_populate_raw_post_data = -1 di php.init hapus komentar dari baris ini .. always_populate_raw_post_data = -1
sumber
Saya baru saja mendapat solusi untuk masalah ini dari seorang teman. dia berkata: Tambahkan ob_start (); di bawah kode sesi Anda. Anda dapat menambahkan exit (); di bawah tajuk. Saya mencobanya dan berhasil. Semoga ini membantu
Ini untuk mereka yang menggunakan server Hosting sewaan yang tidak memiliki akses ke file php.init.
sumber