web-dev-qa-db-fra.com

PHP retard de sommeil

En PHP, je veux mettre un nombre de secondes à 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 ceci?

26
Yeak

Utilisez la fonction PHP sleep(). http://php.net/manual/en/function.sleep.php .__ Ceci arrête l'exécution de la boucle suivante pour le nombre de secondes indiqué Donc quelque chose comme ça

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
}
48
mavili

Je vois ce que vous faites ... votre retarder un script pour vérifier constamment un fichier sur le système de fichiers (un fichier en cours de téléchargement ou en cours d'écriture par un autre script, je suppose). C'est une mauvaise façon de le faire.

  1. Votre script se déroulera lentement. Étouffer le serveur si plusieurs utilisateurs exécutent ce script.
  2. Votre serveur peut expirer pour certains utilisateurs.
  3. L’accès au disque dur est une ressource coûteuse.
  4. Il y a de meilleures façons de le faire.

Vous pouvez utiliser Ajax. Et utilisez un délai d’appel pour appeler votre script PHP toutes les quelques secondes. Cela évitera le chargement lent du script. Et vous pouvez également continuer à le faire constamment (le courant de la 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/chargeant le fichier peut définir un indicateur dans une table (par exemple, file_exists) et vous pouvez ensuite avoir un script qui vérifie ce champ dans votre base de données.

13
Husman

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

Correction Les méthodes de sommeil dans php sont en secondes .

6
devBinnooh

Les lièvres sont deux façons de dormir en script php pendant un certain temps. Lorsque vous avez votre code et que vous souhaitez suspendre le script pendant un certain temps, utilisez ces fonctions . Dans ces exemples, t la première partie de code sera exécuté à l'exécution du script et la deuxième partie de code sera fait mais avec un retard.

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

Exemple:

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

De cette façon, il est possible de dormir le script php pendant 3 secondes. En utilisant cette fonction, vous pouvez mettre le script en veille pendant un nombre entier (entier) de secondes.

  1. En utilisant usleep () function, vous pouvez définir le temps de sommeil en microsecondes. Ce temps de sommeil convient aux intervalles nécessitant un temps plus 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 souhaitez mettre en veille php pour des valeurs de temps inférieures à secondes (float). Dans cet exemple, j'ai mis le script en veille pendant 2 487 147 secondes.

1
Nole

Avez-vous envisagé d’utiliser un script Daemon PHP avec supervisorD . Je l'utilise dans plusieurs tâches qui doivent être exécutées tout le temps. 

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

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

C'est peut-être exagéré mais mérite d'être considéré. 

0
davidofadelaide