[RESOLU] Boucle While qui ne s'execute pas jusqu'au bout.

Petit nouveau ! | 3 Messages

22 mai 2015, 14:44

Hello,

J'ai une boucle WHILE qui doit instancier à peu près 2071 enregistrements de la base de données, mais elle ne va jamais jusqu'au bout, le script PHP s'arrête avant la fin. Cela fait deux jours que j'essaie de résoudre ce problème mais en vain, j'ai tout essayé, je ne comprends pas pourquoi cela ne fonctionne pas.

Quelqu'un pourrait-il m'aider, s'il vous plait ?

Code : Tout sélectionner

[PHP]public function creationEmp($bean, $event, $arguments) { $GLOBALS['log']->fatal('test'); global $db, $beanFiles; require_once ($beanFiles['FOI_Emplacements_Evenements']); $rel=$this->getRelationshipByModules('FOI_Evenements', 'FOI_Emplacements_Evenements'); if ($bean->load_relationship($rel[0])) { $arrayevent = $bean->$rel[0]->getBeans(); } if(count($arrayevent)==0) { $request="select E.id id,E.name nom_emp,V.name nom_voie from foi_emplacements E left join foi_voies_foi_emplacements_1_c VE on E.id=VE.foi_voies_foi_emplacements_1foi_emplacements_idb AND VE.deleted=0 left join foi_voies V on VE.foi_voies_foi_emplacements_1foi_voies_ida=V.id AND V.deleted=0 left join foi_emplacements_evenements Eec on E.id=Eec.id where E.deleted=0"; $result=$db->query($request); while($row=$db->fetchByAssoc($result)) { $GLOBALS['log']->fatal("entre dans le while"); $rel_emp = new FOI_Emplacements_Evenements(); $rel_emp->name = $row["nom_emp"]."-".$bean->name; $rel_emp->foi_evenements_foi_emplacements_evenements_3foi_evenements_ida = $bean->id; $rel_emp->foi_evenem68b8nements_idb = $row["id"]; $rel_emp->categorie_c = "normal"; $rel_emp->disponibilite_c = "03"; $rel_emp->rue_c = $row["nom_voie"]; $rel_emp->save(); unset($rel_emp); } }[/PHP]

Avatar du membre
Mammouth du PHP | 1609 Messages

22 mai 2015, 14:47

Si le script est long à s'exécuter c'est probablement un time limit exceeded (30 secondes par défaut il me semble).

Dans ce cas tu pourrais utiliser la fonction set_time_limit pour supprimer la limite de temps.
http://php.net/manual/fr/function.set-time-limit.php

Néanmoins tu devrais avoir une erreur si c'est le cas.
Développeur web depuis + de 20 ans

Petit nouveau ! | 3 Messages

22 mai 2015, 14:51

Si le script est long à s'exécuter c'est probablement un time limit exceeded (30 secondes par défaut il me semble).

Dans ce cas tu pourrais utiliser la fonction set_time_limit pour supprimer la limite de temps.
http://php.net/manual/fr/function.set-time-limit.php

Néanmoins tu devrais avoir une erreur si c'est le cas.

Merci Saian, j'ai déjà tenter de modifier le max_execution_time dans le fichier php.ini car je ne trouve pas la fonction set_time_limit dans le fichier php.ini mais cela ne change absolument rien à mon problème, j'ai essayé de diviser la requête en deux, de faire les 1000 premiers enregistrements et ensuite le reste, il enregistre bien les 1000 mais arrivé à l'autre partie, il n'en enregistre que 20%. Je suis désespéré parce que il ne m'affiche aucun message d'erreur.

Cependant, est ce que tu pourrais me dire où dois je modifier la fonction set_time_limit parce que je ne la trouve pas dans le fichier php.ini stp

Merci.

Avatar du membre
Mammouth du PHP | 1609 Messages

22 mai 2015, 15:03

set_time_limit est une fonction php et s'utilise donc dans le code php.

Tu peux par exemple ajouter au début de ta fonction set_time_limit(0); qui supprime la limite de temps.

A noter :
Notez que set_time_limit() n'a pas d'effet lorsque PHP fonctionne en mode safe mode. Il n'y a pas d'autre solution que de changer de mode, ou de modifier la durée maximale d'exécution dans le php.ini.

EDIT
Et à moins que je me mélange, quand on modifie le php.ini (pour par exemple modifier la valeur de la directive max_execution_time) il faut faire à minima un reload sur le serveur (apache ? sudo /etc/init.d/apache2 reload) pour que la modification soit prise en compte.

Et pour les messages d'erreur, peut être le serveur est-il configuré pour ne pas les afficher (directive display_errors à 0).
http://php.net/manual/fr/function.error-reporting.php
http://php.net/manual/fr/errorfunc.conf ... lay-errors
Développeur web depuis + de 20 ans

Petit nouveau ! | 3 Messages

22 mai 2015, 15:31

Merci beacoup Saian, j'avais complètement oublié de faire un reload sur le serveur --' une erreur toute bête mais bon en tout cas merci tout fonctionne correctement à présent :)