Lorsque vous effectuez des opérations par lots en PHP, vous rencontrez généralement la nécessité de montrer la progression de l'utilisateur pendant le processus de traitement. Utilisez la fonction Time_nanosleep pour obtenir un contrôle du sommeil de haute précision, simulant ainsi l'effet de mise à jour de la barre de progression pendant le traitement par lots. Cet article présentera comment utiliser Time_nanosleep combiné avec une barre de progression de ligne de commande simple pour implémenter les opérations de traitement par lots avec des invites de progrès.
Time_nanosleep est une fonction utilisée dans PHP pour interrompre l'exécution du programme. Il permet au programme de suspendre le temps aux niveaux du deuxième et de la nanoseconde, dans le format comme suit:
bool time_nanosleep(int $seconds, int $nanoseconds);
$ secondes : entier secondes
$ nanosecondes : nanosecondes, 1 seconde = 1 milliard de nanosecondes
Comparé au sommeil et au sommeil , Time_nanosleep offre un contrôle de temps de précision plus élevé, adapté aux scénarios où une attente à grain fin est requise.
Définissez le nombre total d'étapes de traitement, tels que 100.
Une fois que chaque partie de la tâche est traitée, l'affichage de la barre de progression de mise à jour s'affiche.
Le temps de traitement de chaque étape est simulé via Time_nanosleep pour une démonstration facile.
Le code suivant montre comment utiliser Time_nanosleep pour implémenter une barre de progression de la ligne de commande.
<?php
$totalSteps = 50; // Nombre total d'étapes
$barWidth = 40; // Largeur de la barre de progression
echo "Démarrer une opération par lots...\n";
for ($i = 1; $i <= $totalSteps; $i++) {
// Simuler le temps de traitement des tâches,Dormir50millisecondes
time_nanosleep(0, 50 * 1000000);
// Calculer le pourcentage de progrès
$progress = $i / $totalSteps;
$filledLength = round($barWidth * $progress);
// Construire une chaîne de barre de progression
$bar = str_repeat("=", $filledLength) . str_repeat(" ", $barWidth - $filledLength);
// Barre de progrès de sortie et pourcentage,utiliser "\r" Retour au début de la ligne,Implémenter des mises à jour dynamiques
printf("\r[%s] %.2f%%", $bar, $progress * 100);
flush();
}
echo "\nLe fonctionnement par lots est terminé!\n";
Utilisez Time_nanosleep (0, 50 * 1000000) pour suspendre le programme pendant 50 millisecondes, simulant le temps de traitement par étape.
Utilisez \ r pour contrôler les caractères pour revenir au début de la ligne pour réaliser un rafraîchissement dynamique de la barre de progression.
Printf produit des barres et des pourcentages de progrès formatés.
Flush () garantit que la sortie est affichée dans le temps.
Si la tâche par lots est une véritable opération, le sommeil peut être remplacé par la logique d'exécution de la tâche spécifique.
Combiné avec des journaux de sortie ou des messages d'erreur, il est plus propice au débogage et à la surveillance.
$ Barwidth et le temps de sommeil peuvent être ajustés pour contrôler l'effet d'affichage et la vitesse de rafraîchissement de la barre de progression.
Une documentation plus officielle sur Time_nanosleep peut être vue:
https://gitbox.net/manual/en/function.time-nanosleep.php