Maximum execution time

HD
Mammouth du PHP | 1181 Messages

12 août 2005, 03:13

salut
j'ai un programme composé d'une boucle
while ($id<$nbr) {
qui execute tellement de requetes externes, recuperations de pages web aux 4coins du net, edition,... qu'au bout de 2 executions de cette boucle j'ai
Fatal error: Maximum execution time of 30 seconds exceeded in c:\program files\easyphp\www\projet1\bourse\03_majcours.php on line 36
sachant que :
- je ne veux pas toucher au contenu de la boucle (non negociable :lol: )
- et que je ne veux pas modifier le serveur php (pour avoir un code qui s'execute COMPLETEMENT meme dans les serveurs limités à30secondes

y a t il une solution ? merci

Mammouth du PHP | 1339 Messages

12 août 2005, 09:45

Bon sinon tu me fais un message privé et on se fait un TeamViewer

Administrateur PHPfrance
Administrateur PHPfrance | 430 Messages

12 août 2005, 09:51

oui, mais :
  • il faut avoir un client connecté au site lors de l'exécution des boucles
  • il faut que ta position dans les boucle soit prévisible ou alors qu'on puisse sauvegarder l'état des boucles
ensuite c'est qu'une histoire de javascript

J'ai le bout de code si il faut
"... demanda à voir le CV du recruteur pour être sûr que le chef du personnel était compétent".

HD
Mammouth du PHP | 1181 Messages

12 août 2005, 11:33

et ca dit
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.
c'est comment chez la majorité des hebergeurs ?

pour cerber : à la fin de chaque boucle $id est augmentee de 1 donc on peut savoir où on s'est arreté. reste à savoir ce qu'il faut faire apres pour reprendre la boucle en evitant le probleme de temps

ps: si je fais un include, le "chrono" repart à 0 ou continue ?

Administrateur PHPfrance
Administrateur PHPfrance | 430 Messages

12 août 2005, 11:56

il continue, sinon ce serait trop simple ;)
En fait cette sécurité permet au serveur de ne pas se focaliser sur un client
=>
solution :
<?
//.... ton code de boucle .....
$id= isset($_GET['id'])?$_GET['id']+1:1;
?><html>
<head></head>
<body>
  <script language="javascript">
    window.location = '<?=$_SERVER['PHP_SELF']."?id=$id"?>';
  </script>
</body>
</html>
"... demanda à voir le CV du recruteur pour être sûr que le chef du personnel était compétent".

HD
Mammouth du PHP | 1181 Messages

12 août 2005, 12:57

stp tu peux commenter
$id= isset($_GET['id'])?$_GET['id']+1:1;
et
window.location = '<?=$_SERVER['PHP_SELF']."?id=$id"?>';
mci

Administrateur PHPfrance
Administrateur PHPfrance | 430 Messages

12 août 2005, 13:11

$id= isset($_GET['id'])?$_GET['id']+1:1;
ben là c'est un truc bidon pour calculer le nouvel ID
window.location = '<?=$_SERVER['PHP_SELF']."?id=$id"?>';
et là c'est un morceau de code qui va recharger la page en lui passant le nouvel ID calculé plus haut
=> quand tu réceptionne la page t'a qu'a regarder l'ID pour savoir où il faut continuer

Dans mon idée, tu n'a plus de boucle, mais tant que tu as des traitements à effectuer tu affiche le bout de code qui recharge la page => tu as 30 secondes pour chaque itération puisque le serveur voit chaque itération comme une nouvelle page
"... demanda à voir le CV du recruteur pour être sûr que le chef du personnel était compétent".

HD
Mammouth du PHP | 1181 Messages

12 août 2005, 22:14

ok merci bcp
je te tiens au courant...

HD
Mammouth du PHP | 1181 Messages

12 août 2005, 23:07

ca marche pas :(
1
284.30
Fatal error: Maximum execution time of 30 seconds exceeded in c:\program files\easyphp\www\projet1\bourse\03_majcours.php on line 37
pourtant le programme a affiché des donnees qui ne sont calculées qu'à la 66eme ligne (284.30)
=> il a donc deja bouclé la 1ere boucle (le 1 affiché est le id actuel)
=> il n a donc pas rechargé la page

ce que j'avais fait :
<? (...) while ($id<$nbr) {  ...  }
?>
<html>window.location = '<?=$_SERVER['PHP_SELF']."?id=$id" // recharger page avec nouvel ID
?>';</html>
:?: :?:

Administrateur PHPfrance
Administrateur PHPfrance | 430 Messages

13 août 2005, 12:02

fait attention, il ne faut pas tenter plusieurs bouclees en un chargement
ou alors c'est que le probleme est plus grave : un chargement prend plus d'une boucle
"... demanda à voir le CV du recruteur pour être sûr que le chef du personnel était compétent".

HD
Mammouth du PHP | 1181 Messages

13 août 2005, 12:34

ah je viens de remarquer que... j'ai mis le window.location apres le fin du while !!! :oops: c'est pour ca qu'il n'a pas rechargé la page
allez je reteste ca...

HD
Mammouth du PHP | 1181 Messages

14 août 2005, 02:56

c'est bon ca marche ! merci bcp

guigui
Invité n'ayant pas de compte PHPfrance

24 août 2005, 10:45

Il faut juste modofier la variable max_execution_time du fichier php.ini qui est initialement a 30s. En mettant 0 le temps max d'écution devient illimité.