52 votes

Quelle est une utilisation pratique pour le sommeil de PHP ()?

Je viens de jeter un coup d'œil à la documentation sur sleep() .

Où utiliseriez-vous cette fonction?

Est-il là pour donner au processeur une pause dans une fonction coûteuse?

Des pièges communs?

51voto

codaddict Points 154968

Un endroit où il est utilisé est de créer un délai .

Disons que vous avez construit un robot qui utilise curl - file_get_contents pour obtenir des pages distantes. Maintenant, vous ne voulez pas bombarder le serveur distant avec trop de demandes en peu de temps. Vous introduisez donc un délai entre les requêtes consécutives.

sleep prend l'argument en secondes, son ami usleep prend les arguments en microsecondes et est plus approprié dans certains cas.

34voto

Andy Lester Points 34051

Un autre exemple: Vous êtes en cours d'exécution une sorte de processus de traitement par lots qui rend la forte utilisation d'une ressource. Peut-être que vous êtes à pied la base de données de 9 000 000 de titres de livres et de mise à jour d'environ 10% d'entre eux. Ce processus doit s'exécuter dans le milieu de la journée, mais il ya tellement de nombreuses mises à jour à faire que de l'exécution de votre programme de commandes traîne le serveur de base de données vers une analyse pour d'autres utilisateurs.

Si vous modifiez le processus de traitement par lots pour présenter, disons, 1000 mises à jour, sleep pendant 5 secondes pour donner le serveur de base de données une chance de terminer le traitement de toutes les demandes en provenance d'autres utilisateurs qui ont sauvegardé.

26voto

Mischa Points 26200

Voici un extrait de la façon dont j'utilise sleep dans l'un de mes projets:

 foreach($addresses as $address)
{
  $url = "http://maps.google.com/maps/geo?q={$address}&output=json...etc...";
  $result = file_get_contents($url);
  $geo = json_decode($result, TRUE);

  // Do stuff with $geo

  sleep(1);
}
 

Dans ce cas, sleep m'aide à ne pas être bloqué par Google Maps, car j'envoie trop de requêtes au serveur.

Edit: ceci est un exemple de ce que dit codaddict.

10voto

Angry Dan Points 852

Vieille question, je sais, mais une autre raison d'utiliser u/sommeil peut être lors de l'écriture de sécurité/cryptographie code, tel qu'un script d'authentification. Quelques exemples:

  1. Vous pouvez réduire l'efficacité d'une éventuelle attaque en force en faisant de votre script de connexion délibérément lent, surtout après quelques tentatives infructueuses.
  2. Aussi, vous pourriez vouloir ajouter un délai artificiel au cours de cryptage pour protéger contre les attaques temporelles. Je sais que les chances sont minces que vous allez être la rédaction d'un tel en profondeur le code de cryptage dans un langage comme PHP, mais toujours valable je pense.

1voto

Fabio Points 1854

Vous pouvez utiliser le sommeil pour mettre en pause l'exécution du script... par exemple retarder l' AJAX d'appel par le côté de serveur ou de mettre en œuvre un observateur. Vous pouvez également l'utiliser pour simuler des retards.

J'utilise aussi de retarder la sendmail() & co. .

Quelqu'un utilise utiliser sleep() pour empêcher le DoS et la connexion brutefoces, je ne suis pas d'accord " cause de cela, vous devez ajouter quelques vérifications pour empêcher l'utilisateur d'exécuter à plusieurs reprises.

Vérifiez également usleep.

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