Malheureusement, cette réponse de @EatOng n'est pas correcte . Après avoir lu sa réponse, j'ai ajouté une variable factice à chaque requête AJAX que je tirais (même si certaines d'entre elles avaient déjà des champs) juste pour être sûr que l'erreur n'apparaît jamais.
Mais tout à l'heure, je suis tombé sur la même foutue erreur de PHP. J'ai double-confirmé que j'avais envoyé des données POST (d'autres champs aussi avec la variable factice). Version PHP 5.6.25
, la always_populate_raw_post_data
valeur est définie sur0
.
De plus, comme j'envoie une application/json
requête, PHP ne la remplit pas $_POST
, je dois plutôt json_decode()
le corps de la requête POST brut, accessible par php://input
.
Comme la réponse de @ rr- le cite,
0 / off / peu importe: comportement BC (à renseigner si le type de contenu n'est pas enregistré ou si la méthode de requête est autre que POST ).
Parce que la méthode de requête est à coup sûr POST, je suppose que PHP n'a pas reconnu / aimé ma Content-Type: application/json
requête (encore une fois, pourquoi ??).
OPTION 1:
Modifiez le php.ini
fichier manuellement et définissez la variable coupable sur-1
, comme le suggèrent de nombreuses réponses ici.
OPTION 2:
Il s'agit d'un bogue PHP 5.6. Mettez à jour PHP.
OPTION 3:
Comme @ user9541305 a répondu ici, changer la Content-Type
requête de AJAX en application/x-www-form-urlencoded
ou multipart/form-data
fera remplir PHP le à $_POST
partir du corps POSTed (parce que PHP aime / reconnaît ces en- content-type
têtes !?).
OPTION 4: DERNIER RESORT
Eh bien, je ne voulais pas changer le Content-Type
d'AJAX, cela causerait beaucoup de problèmes pour le débogage. (Chrome DevTools affiche bien les variables POSTées des requêtes JSON.)
Je développe cette chose pour un client et je ne peux pas leur demander d'utiliser le dernier PHP, ni d'éditer le fichier php.ini. En dernier recours, je vais simplement vérifier si elle est définie sur 0
et si oui, modifier lephp.ini
je fichier dans mon script PHP lui-même. Bien sûr, je devrai demander à l'utilisateur de redémarrer apache. C'est dommage!
Voici un exemple de code:
<?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;
}