La communauté ALL HTML c'est 60442 membres à ce jour dont 0 inscrits aujourd'hui et 5 depuis une semaine.

  • imprimer
  • aide

Forum de discussions « PHP - SQL »

Retrouvez les publications relatives à ces discussions dans nos rubriques PHP, SQL.

Arrêt de Script Incompréhensible

liste des forums liste des discussions Participer à la discussion

Photo de bubul01 Message publié le mardi 03 avril 2007 à 20 h 41 par bubul01. http://www.myfunwebcentral.com
J'ai un problème bizzare avec un script:

J'utilise simplexml et donc un boucle foreach:

foreach ($xml->Produit as $p)
{
}

Ce qui est étrange, c'est que ce script ne fonctionne pas sur le serveur, mais très bien localement.

Il plante au bout d'une dizaine de minutes, mais pas toujours au même endroit et pas toujours avec la même erreur, defois c'est mysql server has gone away, ou défois c'est aucune erreur.

Mais lorsque j'enlève la boucle for each, tout va bien, mais si je ne met que la boucle foreach vide ça plante de nouveau:

foreach ($xml->Produit as $p)
{
/* code habituel en commentaire */
}


Je n'ai aucune idée d'ou peut venir ce problème, un bug de PHP peut-être ?
Photo de ikkiphenix Message publié le mardi 03 avril 2007 à 21 h 02 par ikkiphenix.
Bonsoir,

Pas évident de dire comme ça mais c'est peut-être en amont qu'il faut chercher... comment récupères-tu $xml ?

As-tu bien la même version de PHP en local et à distance (PHP 4 / PHP 5) ? Les mêmes extensions PHP chargées ? Les infos de connexions à la base sont-elles OK des deux côtés ? Hébergement amateur, mutualisé, dédié ? Paramétrage des serveurs si tu vas chercher $xml à l'extérieur etc.

C'est tout ça qui peut faire la différence en le local et sur le serveur... à creuser.
Photo de bubul01 Message publié le mercredi 04 avril 2007 à 14 h 24 par bubul01. http://www.myfunwebcentral.com
J'utilise simple_sml_load_string

Mais je n'ai pas précisé que j'utilise cette technique avec le même script (seul foreach change) mais d'autres sources de flux et ça marche très bien, donc ce n'est pas un problème de compatibilité.

Dans foreach, seul changent les valeurs correspondant aux tags du flux xml (ex: tag Description et Desc dans un autre), de même que la connection Mysql ne pose pas de problème, les autres script utilisant autant de ressources et dure 2 fois plus longtemps que celui qui pose problème sans jamais aucun souçi.

C'est un hébergement mutualisé, le fichier xml est chargé sur le même repertoire que le script (c'est un fichier xml déja téléchargé mais que je stocke compressé, je décompresse avant, c pourquoi j'utilise load string et pas load file)
J'ai essayé en créant un fichier decompressé sur le disque et en prenant load file mais c le même problème.



Et ça ne doit pas être un problème de taille de fichier, étant donné qu'il font tous quelques soit les flux à peu près la même taille.

Mais j'ai l'impression qu'il s'agit d'un problème de mémoire, comme si le script utilisait de plus en plus de mémoire, mais avec memory get usage, cela ne dépasse jamais un mega (à part pour un seul fichier plus gros , mais le script ne s'arrête jamais là)

J'ai déja vérifié ce que tu dis, mais je ne vois pas ou est le problème, étant donnée que mes autres script utilisent les mêmes fonctions de php et fonctionne très bien.

Je rappelle que si je supprime la boucle foreach, pas de souçi, mais si je la remet, même sans code dedans, ça plante !

J'ai lu que le caractère 0 (sans doute NULL) pouvait poser des problèmes, est-il possible d'utiliser une fonction pour le supprimer, bien que je ne sache pas si il est présent dans les fichiers.

Je cherchais dans php une fonction pour vider ou supprimer une variable avant la fin du script, mais je n'en ai pas trouvée, pourriez vous me dire laquelle c'est si elle existe ?

Je ne sais vraiment pas d'ou ça peut venir .
Photo de ikkiphenix Message publié le jeudi 05 avril 2007 à 19 h 42 par ikkiphenix.
Le caractère 0 pose en effet problème car il y a des situtations où l'on ne sait pas si c'est 0 en tant que chiffre ou un 0 qui provient d'une valeur "false" de retour.

Pour être sûr de cela, il y a l'opérateur de comparaison == et le ===. Le premier vérifie l'égalité et le deuxième, l'égalité et le type.
+ http://fr.php.net/manual/en/language.operators.comparison.php
+ http://fr.php.net/manual/en/types.comparisons.php

Mais reste à voir si c'est cause profonde de ton problème de script...

Pour supprimer une variable c'est unset() : http://fr.php.net/manual/en/function.unset.php.

liste des forums liste des discussions Participer à la discussion

Vous devez obligatoirement vous identifier en tant que membre pour participer à cette discussion.

ACCÉS COMMUNAUTÉ

Rejoignez ALL HTML

Publiez vos articles, actualités, communiqués ... Donnez votre avis, partagez votre réseau, rencontrez d'autres membres et participez à la vie de la communauté.

Les 5 dernières discussions