Maalesef, @EatOng tarafından verilen bu cevap doğru değil . Cevabını okuduktan sonra, hatanın hiçbir zaman görünmediğinden emin olmak için ateşlediğim her AJAX isteğine (bazılarında zaten bazı alanlar olsa bile) bir kukla değişken ekledim.
Ama şu anda PHP'de aynı lanet olası hatayla karşılaştım. Bazı POST verilerini gönderdiğimi iki kez doğruladım (kukla değişkenle birlikte diğer bazı alanlar da). PHP sürümü 5.6.25
, always_populate_raw_post_data
değer şu şekilde ayarlandı:0
.
Ayrıca, bir application/json
istek gönderirken , PHP onu doldurmuyor, bunun $_POST
yerine json_decode()
, tarafından erişilebilen ham POST istek gövdesine ihtiyacım var php://input
.
@ Rr- cites'in yanıtı,
0 / kapalı / ne olursa olsun: BC davranışı ( içerik türü kayıtlı değilse veya istek yöntemi POST'tan farklıysa doldurun ).
İstek yöntemi kesin olarak POST olduğundan, PHP'nin isteğimi tanımadığını / beğenmediğini tahmin ediyorum Content-Type: application/json
(yine, neden ??).
SEÇENEK 1:
Düzenleme php.ini
dosya elle ve suçlu değişkeni ayarlamak-1
cevapların birçoğu burada önerdiği gibi.
SEÇENEK 2:
Bu bir PHP 5.6 hatasıdır. PHP'yi yükseltin.
SEÇENEK 3:
@ User9541305'in burada yanıtladığı gibi Content-Type
, AJAX isteğinin değiştirilmesi application/x-www-form-urlencoded
veya multipart/form-data
PHP'nin POSTed gövdeden doldurulmasını sağlayacaktır $_POST
(çünkü PHP bu content-type
başlıkları sever / tanır !?).
SEÇENEK 4: SON RESORT
AJAX'ı değiştirmek istemedim Content-Type
, hata ayıklama için çok fazla soruna neden olur. (Chrome DevTools, JSON isteklerinin POSTed değişkenlerini güzel bir şekilde görüntüler.)
Bu şeyi bir istemci için geliştiriyorum ve onlardan en son PHP'yi kullanmalarını veya php.ini dosyasını düzenlemelerini isteyemiyorum. Son çare olarak, ayarlanıp ayarlanmadığını kontrol edeceğim 0
ve eğer öyleyse,php.ini
dosyayı PHP betiğimde . Elbette kullanıcıdan apache'yi yeniden başlatmasını istemem gerekecek. Ne utanç!
İşte örnek bir kod:
<?php
if(ini_get('always_populate_raw_post_data') != '-1')
{
// Get the path to php.ini file
$iniFilePath = php_ini_loaded_file();
// Get the php.ini file content
$iniContent = file_get_contents($iniFilePath);
// Un-comment (if commented) always_populate_raw_post_data line, and set its value to -1
$iniContent = preg_replace('~^\s*;?\s*always_populate_raw_post_data\s*=\s*.*$~im', 'always_populate_raw_post_data = -1', $iniContent);
// Write the content back to the php.ini file
file_put_contents($iniFilePath, $iniContent);
// Exit the php script here
// Also, write some response here to notify the user and ask to restart Apache / WAMP / Whatever.
exit;
}