50 votes

Est-ce que le temps de sommeil compte pour la limite de temps d'exécution?

J'ai deux questions concernant la fonction sleep() en PHP :

  1. Est-ce que le temps de sommeil affecte la limite de temps d'exécution maximale de mes scripts PHP ? Parfois, PHP affiche le message "dépassement du temps d'exécution maximum de 30 secondes". Ce message apparaîtra-t-il si j'utilise sleep(31) ?

  2. Y a-t-il des risques lors de l'utilisation de la fonction sleep() ? Cela coûte-t-il beaucoup de performances CPU ?

88voto

Samuel Points 21085

Vous devriez l'essayer, il suffit d'avoir un script qui dort pendant plus de votre temps d'exécution maximum.

Indice: Sous Linux, le temps de sommeil est ignoré, mais sous Windows, il compte comme temps d'exécution.

8voto

cletus Points 276888

Il ne concerne que le temps d'exécution du script et non les appels système comme sleep(). Il semble y avoir un bug où sur Windows sleep() est inclus. Le temps d'exécution maximal est en temps réel, pas en temps CPU ou autre. Vous pouvez le modifier comme suit :

  • Directive [max_execution_time][1] dans votre php.ini. Il s'agit d'un paramètre global ;
  • Utilisation de [ini_set()][2] avec la directive ci-dessus. Cela le changera uniquement pour le script en cours d'exécution uniquement pour cette exécution ;
  • [set_time_limit()][3] : également un changement local.

Quant à la différence entre les deux derniers, je crois que max_execution_time est une quantité fixe. En exécutant :

ini_set('max_execution_time', 60);

limitera le script à 60 secondes. Si après 20 secondes vous appelez :

set_time_limit(60);

le script sera maintenant limité à 20 + 60 = 80 secondes. [1]: https://www.php.net/manual/en/info.configuration.php#ini.max-execution-time [2]: https://www.php.net/ini_set [3]: https://www.php.net/set_time_limit

7voto

karim79 Points 178055

De la page PHP sleep(), il y a cette note contribuée par l'utilisateur :

Remarque : 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é sur des activités qui se produisent en dehors de l'exécution du script telles que des appels système utilisant system(), la fonction sleep(), des requêtes de base de données, etc. n'est pas inclus lors de la détermination du temps maximum pendant lequel le script a été en cours d'exécution.

0voto

Calvin Points 2800

D'autres ont déjà abordé les bases de sleep() et de la limite de temps d'exécution du script PHP, mais vous devez également être conscient d'un autre risque lors de l'utilisation de périodes de sommeil vraiment longues.

En général, lorsqu'un navigateur envoie une requête à un serveur et ne reçoit aucune donnée du serveur, la connexion peut expirer. Cette limite de temps dépend des configurations du navigateur, mais j'ai lu que IE7 a une valeur par défaut de seulement 30 secondes, tandis que Firefox a une valeur par défaut de 115 secondes - vous pouvez vérifier votre propre configuration dans Firefox en allant à about:config et en filtrant par network.http.keep-alive.timeout (la limite de temps est spécifiée en secondes).

Édition : J'avais inversé les unités de network.http.keep-alive.timeout et browser.urlbar.search.timeout. C'est en effet en secondes, pas en dixièmes de seconde.

-6voto

v3. Points 1370

A) Oui, cela compte pour la limite de temps (donc sleep(31) déclenchera une erreur)

b) Cela permet de libérer les performances du processeur - cela permet à d'autres applications d'utiliser le processeur (lorsqu'une application dort, l'utilisation du processeur de cette application sera proche de 0%). Mis à part le fait de prendre du temps à l'utilisateur, je ne vois pas vraiment de risques liés à l'utilisation de ceci.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X