Question

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

  1. Le temps de sommeil affecte le délai d'exécution maximum de mes scripts PHP? Parfois, PHP affiche le message « temps d'exécution maximum de 30 secondes a été dépassée ». Est-ce que ce message apparaîtra si j'utilise sleep(31)?

  2. Y a-t-il des risques lors de l'utilisation du sleep()function? Est-ce que ça coûte beaucoup de performances du processeur?

Était-ce utile?

La solution

Vous devriez essayer, juste avoir un script qui peut accueillir plus de temps d'exécution maximum.

<?php
  sleep(ini_get('max_execution_time') + 10);
?>

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

Autres conseils

Il est temps de script affecte uniquement pas les appels système comme le sommeil (). Il y a apparemment un bug sur le sommeil (Windows) est inclus. Max temps d'exécution est sur le point en temps réel, pas le temps CPU ou quelque chose comme ça. Vous pouvez changer cependant:

  • max_execution_time dans votre php.ini. Ceci est un paramètre global;
  • Utilisation ini_set () avec la directive ci-dessus. Cela changera seulement pour la seule pour que l'exécution en cours d'exécution de script;
  • set_time_limit () :. Aussi un changement au niveau local

En ce qui concerne la différence entre les deux derniers, je crois max_execution_time est une quantité fixe. Course à pied:

ini_set('max_execution_time', 60);

limitera au script à 60 secondes. Si au bout de 20 secondes, vous appelez:

set_time_limit(60);

le script sera maintenant limité à 20 + 60 = 80 secondes.

De la sommeil PHP () , il y a cette note contribué utilisateur:

  

Note: La fonction set_time_limit ()   et la directive de configuration   max_execution_time affectent uniquement les   temps d'exécution du script lui-même.   Tout le temps consacré à l'activité qui   qui se passe en dehors de l'exécution de la   de script tels que les appels système à l'aide   system (), la fonction de sommeil (),   requêtes base de données, etc. ne sont pas inclus   pour déterminer le temps maximal que   le script a été en cours d'exécution.

D'autres ont déjà couvert les bases du sommeil () et script PHP limite de temps d'exécution, mais vous devez aussi être au courant d'un autre risque lors de l'utilisation de très longues périodes de sommeil.

En général, lorsqu'un navigateur envoie une requête à un serveur et ne reçoit pas de données à partir du serveur, la connexion peut expirer. Ce délai 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 le filtrage réseau .http.keep-alive.timeout (la limite de temps est spécifiée en secondes).

Edit: j'avais les unités pour network.http.keep-alive.timeout et browser.urlbar.search.timeout mélangés. Il est en effet en quelques secondes, pas dixièmes de seconde.

a) Oui, il compte dans la limite de temps (si le sommeil (31) déclenche une erreur)

b) Il fait le contraire de coûts les performances du processeur - il permet à d'autres applications utilisent la CPU (lorsqu'une application dort, l'utilisation du processeur de cette application sera proche de 0%). En plus de prendre du temps loin de l'utilisateur, je ne peux pas vraiment penser à tout risque d'utilisation de ce.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top