J'ai un très grand formulaire html (contenant un tableau avec des lignes, qui contiennent plusieurs entrées), que je dois soumettre à PHP script via une requête POST. Le problème est que certaines valeurs ne passent pas et sont absentes dans la superglobale $_POST de PHP.
J'ai vérifié (en utilisant l'extension Firebug) que les valeurs sont effectivement envoyées au serveur par le navigateur.
$_POST est rempli, mais certaines valeurs sont simplement manquantes.
J'ai vérifié ce que la demande brute utilise :
$raw_post = file_get_contents('php://input');
et la chaîne retournée a les valeurs. Elles ne sont simplement pas analysées dans le tableau $_POST. La chose étrange que j'ai remarquée, c'est qu'il semble que les valeurs php://input soient coupées après une certaine longueur, et que le reste de la chaîne ne parvienne pas à $_POST.
J'ai pensé à post_max_size et memory_limit et les ai fixés à de grandes valeurs :
memory_limit = 256M
post_max_size = 150M
mais selon la documentation de php $_POST ne devrait pas contenir de valeurs si la requête faite est plus grande que post_max_size.
En raison de la taille importante du formulaire et de la demande, je ne peux pas le poster ici, mais je peux poster le php script que j'ai utilisé pour déboguer le problème :
var_dump($file = file_get_contents('php://input'));
var_dump($_POST);
//... then i parsed the $file
Version du serveur : Apache/2.2.9 (Debian)
Version PHP : PHP 5.3.2-0.dotdeb.2
Quelqu'un peut-il expliquer la raison de ce comportement étrange de PHP, et que dois-je faire (changer les paramètres de php, le code ?) pour utiliser le tableau $_POST pendant le traitement du formulaire ?
EDIT : Pour être clair : il n'y a pas que les valeurs qui manquent. $_POST ne contient pas non plus ces clés.
e.x. fragment de poste brut :
t_dodparam%5B198%5D=&t_dodparam2%5B198%5D=&t_kolejnosc%5B198%5D=199&n_indeks=201&n_wartosc=testtesttest
La clé 't_dodparam' est dans le poste et a la clé 198. Le reste des paramètres est manquant (par exemple, t_dodparam2 est dans post, mais il n'a pas de clé comme 198, et il n'y a pas de clé comme n_wartosc dans $_POST).
1 votes
Pouvez-vous nous donner un exemple d'une valeur de paramètre manquante ?
0 votes
Voici le fragment de message brut : t_dodparam%5B198%5D=&t_dodparam2%5B198%5D=&t_kolejnosc%5B198%5D=199&n_indeks=201&n_wartosc=testtest. t_dodparam[198] est dans les valeurs du message mais le reste est manquant
1 votes
Le signe "&" ne signale-t-il pas la fin d'un paramètre et le début d'un nouveau ?
0 votes
Et il n'y a pas de paramètre avec le nom
198
dans vos données brutes0 votes
Il y a un paramètre
t_dodparam2[198]=''
dans mes données brutes, out_kolejnosc[198]
et ils ne sont pas inclus dans $_POST. Comme Jean Hominal l'a fait remarquer, le signe & signale la fin du paramètre, mais cela indique simplement qu'une valeur vide a été postée (ex. champ de texte vide).