Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

PHP timeout

8 réponses
Avatar
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/?Jid=69ff9886fdf9d6ef24e4416b80ccfa49592213d0@news.nemoweb.net>

8 réponses

Avatar
Denis Beauregard
Le Mon, 13 Oct 14 19:28:58 +0000, Julien Arlandis
écrivait dans fr.comp.lang.php:

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
Avatar
Julien Arlandis
Le 13/10/2014 à 21:56, Denis Beauregard a écrit :
Le Mon, 13 Oct 14 19:28:58 +0000, Julien Arlandis
écrivait dans fr.comp.lang.php:

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.
Avatar
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
<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.>
Avatar
Denis Beauregard
Le Mon, 13 Oct 2014 23:45:22 +0200, Olivier Miakinen
<om+ écrivait dans fr.comp.lang.php:

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
<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.>



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
Avatar
Olivier Miakinen
Le 14/10/2014 00:11, Denis Beauregard a écrit :

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.>



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
Avatar
Denis Beauregard
Le Tue, 14 Oct 2014 01:25:34 +0200, Olivier Miakinen
<om+ écrivait dans fr.comp.lang.php:

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
Avatar
Olivier Miakinen
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.
Avatar
Julien Arlandis
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
<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.>




Effectivement, problème résolu. Merci.