Aller au contenu

php et grand nombre de variables


dimi3

Sujets conseillés

Bonjour,



Mon programme doit traiter des gros fichiers textes et passe jusqu'à des milliers de variables en POST.



En local, j'ai édité le fichier php.ini :


max_execution_time = 0


max_input_time = 0


safe_mode = off



En tête de mes fichiers php j'ai codé :


set_time_limit(0);



Lorsque le fichier est petit, toutes les variables passées en POST passent bien;


Lorsque le fichier est gros, les dernières variables passées en POST ne passent pas.


Le problème ne vient pas des temps d'exécution mais de variables indéfinies lorsque leur nombre est trop grand.



Je ne vois pas quoi faire... Je vous remercie si vous avez une idée.



Meilleurs voeux à tous pour la nouvelle année.






Modifié par dimi3
Lien vers le commentaire
Partager sur d’autres sites

Merci pour votre réponse.



Pour certains fichiers, il passe des milliers de variables. Les dernières centaines ne passent pas.


Où se code cette limitation dans le protocole POST ? Comment modifier cela ?


Passer les variables en plusieurs fois serait en effet une solution. Mais là je ne vois pas trop encore.

Lien vers le commentaire
Partager sur d’autres sites

Tu as post_max_size, et sinon suhosin limite le nombre de variables post s'il ets installé sur ton serveur, il faut modifier dans la conf suhosin si c'est ça (je me rappelle plus du nom mais c'est facile à trouver).



***edit à ajouter dans php.ini





suhosin.post.max_vars=10000
suhosin.request.max_vars=10000

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,



Une recherche de "suhosin" dans le php.ini ne donne rien (version du php : 5.3.10)



J'ai ajouté suhosin.post.max_vars=10000 et suhosin.request.max_vars=10000. Ca n'a pas résolu le problème.



J'ai tenté php_value suhosin.post.max_vars 10000 et php_value suhosin.request.max_vars 10000 dans le fichier htaccess : je n'ai pas eu plus de succès.


Lien vers le commentaire
Partager sur d’autres sites

suhosin limite le nombre de variables post s'il ets installé sur ton serveur

S'il est pas installé, ces lignes ne servent à rien...

Hormis un addon type suhosin, il n'y a rien à ma connaissance qui limite le 'nombre' de variable post livré avec PHP (je ne parle pas de taille, mais de nombre).

Vois du côté de la mémoire (memory_limit), ou donne nous un bout de code (et une conf) qui plante, sinon tu risques de jouer à cache cache un moment

Lien vers le commentaire
Partager sur d’autres sites

Bonjour et merci,



J'avais pensé à memory_limit que j'ai mis à -1 . Mais ça n'a rien donné non plus.



Mon code n'a pas de souci du fait que si le fichier est court tout se passe bien. Mon code ne plante pas. La seule erreur signalée est "variable indéfinie" pour les dernières centaines de variables à traiter.



Le problème pourrait-il tout simplement venir d'une mémoire physique insuffisante de mon petit portable ?


Lien vers le commentaire
Partager sur d’autres sites

Si je comprends bien (difficile vu le peu de détails), tu as deux scripts: un premier qui lit un fichier et qui fait un POST de plein de variables vers un deuxième qui reçoit ces variables en POST et fait tout plein de choses avec, et dans certains cas ce deuxième script ne reçoit pas tout ce qu'il devrait. C'est ça? Ou alors tu as un premier script qui génère une page HTML avec un formulaire avec tout plein de variables et un POST vers le deuxième script?



La première chose à déterminer, c'est de quel côté se situe le problème: est-ce-que c'est le premier script qui n'envoie pas tout, ou est-ce que c'est le deuxième qui ne reçoit pas tout? S'il y a beaucoup de varialbles, je suppose aussi qu'elles sont numérotées d'une façon ou d'une autre, peut-être que tu n'as pas la même convention de part et d'autre? Commence par examiner ce qu'envoie le premier script pour t'assurer qu'il envoie bien tout comme il faudrait. Une fois que c'est fait, tu pourras te concentrer sur le deuxième script.



Jacques.


Lien vers le commentaire
Partager sur d’autres sites

Le premier fichier récupère les données d'un fichier texte (de type .csv) dans un formulaire. Par une boucle, chaque input est nommé ainsi :



echo "<input type = \"text\" name=\"enregistrement".$i."\" value=\"$tab[$i]."\">";



Le second fichier reçoit les variables "enregistrementX" par $_POST["enregistrement".$i] dans une boucle.



------------------



Je remarque que seules les 1000 premières variables sont réceptionnées : 1000 pile-poil, ni plus, ni moins. Et cela, quel que soit le fichier texte mouliné.

Lien vers le commentaire
Partager sur d’autres sites

Désactive complétement xdebug s'il est activé, il fixe certaines limites (j'y crois pas beaucoup)



Dernier essai sans source pour moi, c'est vraiment trop chiant d'aider sans reproduire.


Lien vers le commentaire
Partager sur d’autres sites

Tu as vérifié le HTML généré? Il contient bien tout ce qu'il faut comme il faut ou pas?



Tu n'aurais pas un problème sur le format du "$i" (genre d'un côté ou de l'autre il est formaté sur 3 chiffres et pas un de plus)?



Au passage, le $tab[$i] sans encodage, ça va faire des choses pas belles si tu as des " ou des & dans le contenu de ces variables (au moins).



Jacques.

Lien vers le commentaire
Partager sur d’autres sites

@Stephane


la désactivation de xdebug n'a pas résolu le problème



@jcaron


pas de problème de format imposé


pas de guillemets ni & dans le fichier texte



@captain_torche


le formulaire permet de faire d'éventuelles corrections ou des ajouts dans le fichier texte


Qu'entends-tu par cURL ? Tu veux dire par GET ?


Lien vers le commentaire
Partager sur d’autres sites

Un programme vérifie les entrées de l'opératrice dans un fichier expédié à un vérificateur. Les erreurs sont signalées. Le formulaire permet de descendre jusqu'à l'enregistrement erroné. Le vérificateur corrige dans le formulaire, et le programme récrit le fichier.



Et passer par des variables-sessions ? Cela résoudrait-il le problème ? Ou est-ce encore limité ?


Lien vers le commentaire
Partager sur d’autres sites

Du nouveau :



J'utilisais WampServer.


J'ai essayé EasyPHP. Il m'a suffi de changer dans le php.ini la ligne max_input_vars et d'augmenter la limite jusqu'à 15000 pour enfin résoudre le problème qui m'a occupé 2 bonnes journées.



Ouf... je n'en peux plus !



Grand merci à tous pour l'intérêt que vous avez porté à mes questions et pour avoir eu souci de m'aider.



J'ai appris bien des choses sur le fichier php.ini. Et aussi que WampServer n'est pas fait pour moi...

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...