Discussion:
PHP timeout
(trop ancien pour répondre)
Julien Arlandis
2014-10-13 19:28:58 UTC
Permalink
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/?Jid=***@news.nemoweb.net>
Denis Beauregard
2014-10-13 19:56:25 UTC
Permalink
Le Mon, 13 Oct 14 19:28:58 +0000, Julien Arlandis
Post by Julien Arlandis
Bonsoir,
Il semblerait que le timeout ne soit pas pris en compte sur mon serveur
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.
Post by Julien Arlandis
10123456789
Fatal error: Maximum execution time of 10 seconds exceeded in C:\Users\html\test.php on line 18
C'est dans Linux que cela fait 23 secondes ?

Denis
Julien Arlandis
2014-10-13 19:57:50 UTC
Permalink
Post by Denis Beauregard
Le Mon, 13 Oct 14 19:28:58 +0000, Julien Arlandis
Post by Julien Arlandis
Bonsoir,
Il semblerait que le timeout ne soit pas pris en compte sur mon serveur
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.
Post by Julien Arlandis
10123456789
Fatal error: Maximum execution time of 10 seconds exceeded in
C:\Users\html\test.php on line 18
C'est dans Linux que cela fait 23 secondes ?
Denis
Oui sur une Debian.
Olivier Miakinen
2014-10-13 21:45:22 UTC
Permalink
Bonjour,
Post by Julien Arlandis
Il semblerait que le timeout ne soit pas pris en compte sur mon serveur
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
<cit.>
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.
</cit.>
Denis Beauregard
2014-10-13 22:11:36 UTC
Permalink
Le Mon, 13 Oct 2014 23:45:22 +0200, Olivier Miakinen
Post by Olivier Miakinen
Bonjour,
Post by Julien Arlandis
Il semblerait que le timeout ne soit pas pris en compte sur mon serveur
10......................+
Comment l'expliquer ?
<?php
ini_set('max_execution_time', 10);
http://php.net/manual/fr/function.set-time-limit.php
<cit.>
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.
</cit.>
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
2014-10-13 23:25:34 UTC
Permalink
Post by Denis Beauregard
Post by Olivier Miakinen
http://php.net/manual/fr/function.set-time-limit.php
<cit.>
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.
</cit.>
Il est sous Linux.
Ce qui explique que le script ne s'arrête pas au bout de 10 secondes
de temps réel.
Post by Denis Beauregard
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
2014-10-14 00:00:30 UTC
Permalink
Le Tue, 14 Oct 2014 01:25:34 +0200, Olivier Miakinen
Post by Olivier Miakinen
Post by Denis Beauregard
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
2014-10-14 00:09:29 UTC
Permalink
Post by Denis Beauregard
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.
Post by Denis Beauregard
Sur Linux, il pourrait même inscrire en théorie 1 seconde au
début et cela ne changerait rien.
Oui.
Julien Arlandis
2014-10-15 16:03:54 UTC
Permalink
Post by Olivier Miakinen
Bonjour,
Post by Julien Arlandis
Il semblerait que le timeout ne soit pas pris en compte sur mon serveur
10......................+
Comment l'expliquer ?
<?php
ini_set('max_execution_time', 10);
http://php.net/manual/fr/function.set-time-limit.php
<cit.>
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.
</cit.>
Effectivement, problème résolu. Merci.

Continuer la lecture sur narkive:
Loading...