PHP sleep delay

en PHP, je veux mettre un certain nombre de secondes de retard sur chaque itération de la boucle.

for ($i=0; $i <= 10; $i++) {
    $file_exists=file_exists($location.$filename);
    if($file_exists) {
        break;
    }

    //sleep for 3 seconds
}

Comment puis-je faire cela?

26
demandé sur Eric Leschinski 2013-03-14 20:16:37

5 réponses

Utiliser PHP sleep() fonction. http://php.net/manual/en/function.sleep.php Cela arrête l'exécution de la boucle suivante pour le nombre donné de secondes. Donc quelque chose comme ceci

for ($i=0; $i <= 10; $i++) {
    $file_exists=file_exists($location.$filename);
    if($file_exists) {
        break;
    }
    sleep(3); // this should halt for 3 seconds for every loop
}
47
répondu mavili 2013-03-14 16:20:15

je vois ce que vous faites... vous retardez un script pour vérifier constamment un fichier sur le système de fichiers (un fichier qui est téléchargé ou écrit par un autre script je suppose). C'est une mauvaise façon de le faire.

  1. votre script fonctionnera lentement. Étouffer le serveur si plusieurs utilisateurs exécutent ce script.
  2. votre serveur peut avoir des temps morts pour certains utilisateurs.
  3. l'accès HDD est une ressource coûteuse.
  4. il y a de meilleures façons de faire ce.

vous pourriez utiliser Ajax. Et utilisez un timeout pour appeler votre script PHP toutes les quelques secondes. Cela évitera le chargement lent du script. Et vous pouvez aussi continuer à le faire en permanence (le courant pour boucle ne fonctionnera que pendant 33 secondes, puis s'arrêtera).

Vous pouvez utiliser une base de données. Dans certains cas, l'accès à la base de données est plus rapide que l'accès au disque dur. Surtout avec les vues et la mise en cache. Le script créant le fichier / uploading le fichier peut définir un drapeau dans une table (i.e. file_exists) et puis vous pouvez avoir un script qui vérifie ce champ dans votre base de données.

12
répondu Husman 2013-03-14 16:39:58

Vous pouvez utiliser sleep(3) qui dort le fil pendant 3 secondes.

Correction méthode du sommeil en php sont en secondes.

6
répondu devBinnooh 2017-07-29 22:34:16

Hare sont deux façons de dormir le script php pour une certaine période de temps. Lorsque vous avez votre code et que vous voulez mettre le script en pause pendant un certain temps, utilisez ces fonctions. Dans ces exemples til a de la première partie du code va être fait sur le script de s'exécuter et la deuxième partie du code sera fait mais avec du retard.

  1. en utilisant sleep () fonction, vous pouvez définir le temps de sommeil en quelques secondes.

Exemple:

echo "Message 1";
// The first part of code.
$timeInSeconds = 3;
sleep($timeInSeconds);
// The second part of code.
echo "Message 2";

C' de cette façon il est possible de dormir le script php pendant 3 secondes. En utilisant cette fonction, vous pouvez sleep script pour le nombre entier de secondes.

  1. en utilisant usleep () fonction, vous pouvez définir le temps de sommeil en quelques microsecondes. Ce temps de sommeil est pratique pour les intervalles qui nécessitent plus de temps précis qu'une seconde.

Exemple:

echo "Message 1";
// The first part of code.
$timeInMicroSeconds = 2487147;
usleep($timeInMicroSeconds);
// The second part of code.
echo "Message 2";

vous pouvez utiliser cette fonction si vous voulez dormir php pour des valeurs de temps plus petites que second (float). Dans dans cet exemple, j'ai endormi script pendant 2,487147 secondes.

1
répondu Nole 2018-02-23 15:17:23

avez-vous envisagé d'utiliser un script de démon PHP en utilisant supervisorD. Je l'utilise dans plusieurs tâches qui doivent être exécutées en permanence.

le piège est de s'assurer que chaque fois que vous exécutez votre script vous vérifiez les ressources de mémoire. Si c'est trop élevé, arrêtez le processus et laissez-le redémarrer à nouveau.

j'ai utilisé avec succès ce processus pour être toujours en train de vérifier les enregistrements de base de données pour les tâches à traiter.

Il pourrait - être exagéré, mais à considérer.

0
répondu davidofadelaide 2016-05-31 02:03:35