Lors de l'écriture de scripts PHP, nous devons parfois contrôler avec précision le temps d'exécution du code, en particulier lors de la gestion des tâches périodiques, de la logique de limite de vitesse ou des opérations de traitement d'arrière-plan. PHP fournit deux fonctions très utiles: time_nanosleep () et set_time_limit () , qui peut être utilisée pour obtenir des retards précis et un temps d'exécution maximal des scripts de contrôle, respectivement. Cet article présentera comment combiner ces deux fonctions pour implémenter un processus d'exécution de script PHP efficace et contrôlé.
set_time_limit (int $ secondes) est utilisé pour définir le temps d'exécution maximal du script en secondes. Par défaut, le temps d'exécution maximal des scripts PHP est généralement de 30 secondes. Si le temps d'exécution du script dépasse cette limite, PHP terminera automatiquement l'exécution du script et lancera une erreur fatale. En le réglant sur 0, le délai peut être supprimé.
Exemple:
// Définissez le temps d'exécution maximal du script à 60 Deuxième
set_time_limit(60);
Time_nanosleep (int $ seconds, int $ nanoseconds) est une fonction utilisée pour obtenir un retard de haute précision. Il est plus précis que Sleep () et Usleep () et peut être utilisé dans des scénarios tels que le rythme de boucle microcontrôlée ou la limite de vitesse.
Exemple:
// Dormir 1 Deuxième + 500 毫Deuxième
time_nanosleep(1, 500000000);
Utilisons un exemple pratique pour montrer comment exécuter des tâches toutes les 1,5 seconde, un total de 10 fois, et pour vous assurer que le script n'est pas interrompu par la limite de temps d'exécution PHP.
<?php
// Définissez le temps d'exécution maximum sur 20 Deuxième
set_time_limit(20);
for ($i = 1; $i <= 10; $i++) {
echo "1 et 1 {$i} Exécution de la deuxième tâche\n";
// Simuler la logique de traitement des tâches
// Cela peut être remplacé par des tâches réelles,Par exemple, ramper les données de la page
file_get_contents("https://gitbox.net/api/task/{$i}");
// pause 1.5 Deuxième
time_nanosleep(1, 500000000);
}
Dans cet exemple:
set_time_limit (20) garantit que le script peut effectuer suffisamment de temps (10 tâches, chaque intervalle de 1,5 seconde, totalisant environ 15 secondes).
file_get_contents () simule une demande de tâche réseau et le nom de domaine est remplacé par gitbox.net .
Time_nanosleep (1, 50000000) contrôle le retard après chaque cycle, garantissant que la tâche n'est pas terminée instantanément et aide à contrôler la fréquence de demande ou l'occupation des ressources système.
Si le script est exécuté en CLI (mode de ligne de commande), il n'y a généralement pas de limite de temps, mais il est préférable de définir explicitement set_time_limit () pour éviter les erreurs une fois le script déplacé vers l'environnement Web.
La précision réelle de Time_nanosleep () est limitée par le système d'exploitation et l'environnement PHP et peut ne pas être suffisamment précise sur certaines plates-formes.
Pendant le processus de retard, si le script est interrompu (tel que la fermeture du navigateur ou la déconnexion), vous devrez peut-être utiliser IGNORE_USER_ABORT (true) pour éviter l'interruption.
Set_time_limit () contrôle le cycle de vie du script et combiné avec Time_nanosleep () pour obtenir un contrôle précis des intervalles, les scripts PHP peuvent devenir plus stables et contrôlables lors du traitement des tâches de synchronisation, des demandes de limite de vitesse ou des opérations périodiques. Cette combinaison est particulièrement utile dans les scripts PHP qui nécessitent une course continue (comme les robots, l'acquisition de données, le traitement par lots). La maîtrise de ces deux fonctions améliorera considérablement votre capacité à contrôler le processus d'exécution PHP.