PHP timeout

Le
Julien Arlandis
Bonsoir,

Il semblerait que le timeout ne soit pas pris en compte sur mon serveur
apache, en effet le script ci-dessous retourne au bout de 23 secondes :
10.+

Comment l'expliquer ?

<?php

ini_set('max_execution_time', 10);

$max_time = ini_get("max_execution_time");
echo $max_time;

sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '+';



--
Ce message a été posté avec Nemo : <http://news.nemoweb.net/?Jidiff9886fdf9d6ef24e4416b80ccfa49592213d0@news.nemoweb.net>
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Denis Beauregard
Le #26314787
Le Mon, 13 Oct 14 19:28:58 +0000, Julien Arlandis

Bonsoir,

Il semblerait que le timeout ne soit pas pris en compte sur mon serveur
apache, en effet le script ci-dessous retourne au bout de 23 secondes :
10......................+

Comment l'expliquer ?

<?php

ini_set('max_execution_time', 10);

$max_time = ini_get("max_execution_time");
echo $max_time;

sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '+';



Je viens de tester dans Windows 7 avec EasyPHP et cela dure bien 10
secondes.

10123456789
Fatal error: Maximum execution time of 10 seconds exceeded in C:Usershtmltest.php on line 18



C'est dans Linux que cela fait 23 secondes ?

Denis
Julien Arlandis
Le #26314786
Le 13/10/2014 à 21:56, Denis Beauregard a écrit :
Le Mon, 13 Oct 14 19:28:58 +0000, Julien Arlandis

Bonsoir,

Il semblerait que le timeout ne soit pas pris en compte sur mon serveur
apache, en effet le script ci-dessous retourne au bout de 23 secondes :
10......................+

Comment l'expliquer ?

<?php

ini_set('max_execution_time', 10);

$max_time = ini_get("max_execution_time");
echo $max_time;

sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '.';
sleep(1);echo '+';



Je viens de tester dans Windows 7 avec EasyPHP et cela dure bien 10
secondes.

10123456789
Fatal error: Maximum execution time of 10 seconds exceeded in
C:Usershtmltest.php on line 18



C'est dans Linux que cela fait 23 secondes ?

Denis



Oui sur une Debian.
Olivier Miakinen
Le #26314817
Bonjour,

Le 13/10/2014 21:28, Julien Arlandis a écrit :

Il semblerait que le timeout ne soit pas pris en compte sur mon serveur
apache, en effet le script ci-dessous retourne au bout de 23 secondes :
10......................+

Comment l'expliquer ?

<?php

ini_set('max_execution_time', 10);



Comme d'hab, lire la doc est souvent très utile :

http://php.net/manual/fr/function.set-time-limit.php
Note:

La fonction set_time_limit() et la directive de configuration
max_execution_time n'affectent que le temps d'exécution du script
lui-même. Tout temps passé en dehors du script, comme un appel système
utilisant system(), des opérations sur les flux, les requêtes sur base
de données, etc. n'est pas pris en compte lors du calcul de la durée
maximale d'exécution du script. Ceci est faux sous Windows où le temps
mesuré est le temps réel.
Denis Beauregard
Le #26314820
Le Mon, 13 Oct 2014 23:45:22 +0200, Olivier Miakinen

Bonjour,

Le 13/10/2014 21:28, Julien Arlandis a écrit :

Il semblerait que le timeout ne soit pas pris en compte sur mon serveur
apache, en effet le script ci-dessous retourne au bout de 23 secondes :
10......................+

Comment l'expliquer ?

<?php

ini_set('max_execution_time', 10);



Comme d'hab, lire la doc est souvent très utile :

http://php.net/manual/fr/function.set-time-limit.php
Note:

La fonction set_time_limit() et la directive de configuration
max_execution_time n'affectent que le temps d'exécution du script
lui-même. Tout temps passé en dehors du script, comme un appel système
utilisant system(), des opérations sur les flux, les requêtes sur base
de données, etc. n'est pas pris en compte lors du calcul de la durée
maximale d'exécution du script. Ceci est faux sous Windows où le temps
mesuré est le temps réel.



Il est sous Linux. Par ailleurs, il met une limite de 10 secondes et
cela fait 23 fois "sleep(1)". Le 10 secondes est à quel endroit ?
Parce que si c'est le sleep qui ne compte pas, cela prendrait 10
secondes pour faire 23 fois echo "." et cela me semble un peu lent
en 2014...


Denis
Olivier Miakinen
Le #26314827
Le 14/10/2014 00:11, Denis Beauregard a écrit :

http://php.net/manual/fr/function.set-time-limit.php
Note:

La fonction set_time_limit() et la directive de configuration
max_execution_time n'affectent que le temps d'exécution du script
lui-même. Tout temps passé en dehors du script, comme un appel système
utilisant system(), des opérations sur les flux, les requêtes sur base
de données, etc. n'est pas pris en compte lors du calcul de la durée
maximale d'exécution du script. Ceci est faux sous Windows où le temps
mesuré est le temps réel.



Il est sous Linux.



Ce qui explique que le script ne s'arrête pas au bout de 10 secondes
de temps réel.

Par ailleurs, il met une limite de 10 secondes et
cela fait 23 fois "sleep(1)". Le 10 secondes est à quel endroit ?



Ils ne sont pas écoulés. Il s'est écoulé 23 secondes d'attente dans
les appels système sleep(), et peut-être quelques millisecondes de
temps cpu réellement consommé. Vu que « quelques millisecondes »
c'est plus petit que « 10 secondes », le script se termine normalement
au lieu d'être interrompu comme sur Windows.

Cordialement,
--
Olivier Miakinen
Denis Beauregard
Le #26314830
Le Tue, 14 Oct 2014 01:25:34 +0200, Olivier Miakinen

Par ailleurs, il met une limite de 10 secondes et
cela fait 23 fois "sleep(1)". Le 10 secondes est à quel endroit ?



Ils ne sont pas écoulés. Il s'est écoulé 23 secondes d'attente dans
les appels système sleep(), et peut-être quelques millisecondes de
temps cpu réellement consommé. Vu que « quelques millisecondes »
c'est plus petit que « 10 secondes », le script se termine normalement
au lieu d'être interrompu comme sur Windows.



Je pense que je viens de comprendre.

La limite de 10 secondes n'existe pas car elle n'est prise en
compte (ou calculée) que pendant que le script PHP fait quelque
chose. Donc, pendant le sleep, le temps du script n'avance pas.

Sur Linux, il pourrait même inscrire en théorie 1 seconde au
début et cela ne changerait rien.


Denis
Olivier Miakinen
Le #26314829
Le 14/10/2014 02:00, Denis Beauregard a écrit :

Je pense que je viens de comprendre.

La limite de 10 secondes n'existe pas car elle n'est prise en
compte (ou calculée) que pendant que le script PHP fait quelque
chose. Donc, pendant le sleep, le temps du script n'avance pas.



Voilà, exactement.

Sur Linux, il pourrait même inscrire en théorie 1 seconde au
début et cela ne changerait rien.



Oui.
Julien Arlandis
Le #26315286
Le 13/10/2014 à 23:45, Olivier Miakinen a écrit :
Bonjour,

Le 13/10/2014 21:28, Julien Arlandis a écrit :

Il semblerait que le timeout ne soit pas pris en compte sur mon serveur
apache, en effet le script ci-dessous retourne au bout de 23 secondes :
10......................+

Comment l'expliquer ?

<?php

ini_set('max_execution_time', 10);



Comme d'hab, lire la doc est souvent très utile :

http://php.net/manual/fr/function.set-time-limit.php
Note:

La fonction set_time_limit() et la directive de configuration
max_execution_time n'affectent que le temps d'exécution du script
lui-même. Tout temps passé en dehors du script, comme un appel système
utilisant system(), des opérations sur les flux, les requêtes sur base
de données, etc. n'est pas pris en compte lors du calcul de la durée
maximale d'exécution du script. Ceci est faux sous Windows où le temps
mesuré est le temps réel.




Effectivement, problème résolu. Merci.
Publicité
Poster une réponse
Anonyme