Position actuelle: Accueil> Derniers articles> Utilisez Time_nanosleep et Ob_flush pour obtenir des données de sortie étape par étape

Utilisez Time_nanosleep et Ob_flush pour obtenir des données de sortie étape par étape

gitbox 2025-05-29

  • Cette fonction pause le script pour le nombre spécifié de secondes et de nanosecondes. Il a une précision plus élevée que le sommeil et le sommeil , et convient aux scénarios où un contrôle de latence plus fin est nécessaire.

  • ob_flush ()
    Forcer le contenu du tampon de sortie de PHP au navigateur, mais ne ferme pas le tampon. Lorsqu'il est utilisé avec Flush () , le contenu peut être "poussé" en temps réel.

Remarque: Afin de s'assurer que la sortie atteint réellement le navigateur, il est généralement utilisé avec Flush () , et la mise en cache et la compression ne peuvent pas être désactivées du côté du serveur et du navigateur.

2. Exemple de code pour implémenter une sortie en temps réel étape par étape

 <?php
// Fermer la limite de temps d&#39;exécution du script(Au besoin)
// set_time_limit(0);

// Allumez la tampon de sortie
ob_start();

// Désactiver la mise en cache et la compression du navigateur,Assurer une transmission de données instantanée
header("Content-Type: text/plain");
header("Cache-Control: no-cache");
header("X-Accel-Buffering: no"); // pour Nginx Désactiver le cache
// fermeture gzip compression(Si le serveur est activé par défaut)
// Les méthodes spécifiques sont configurées en fonction de l&#39;environnement du serveur

for ($i = 1; $i <= 5; $i++) {
    echo "Étapes actuelles:{$i}\n";

    // Forcer un rafraîchissement PHP Tampon de sortie
    ob_flush();
    flush();

    // utiliser time_nanosleep Retard de microseconde,0.5Deuxième = 500,000,000 纳Deuxième
    time_nanosleep(0, 500000000);
}

echo "Toutes les étapes sont terminées!\n";
?>

illustrer:

  • ob_start () : Démarrez la mise en mémoire tampon de sortie pour vous assurer que le rinçage du tampon peut être contrôlé.

  • Echo : Informations sur la sortie une par une.

  • ob_flush () + flush () : forcer le contenu tampon à être envoyé au client et actualiser l'affichage du navigateur.

  • Time_nanosleep (0, 500000000) : pause pendant 0,5 seconde (500 000 000 nanosecondes), ce qui rend l'effet de sortie plus évident et simule des processus en temps réel.

  • Configurez les en-têtes HTTP de manière appropriée pour éviter le retard de contenu causé par le navigateur et le cache du serveur.

3. Choses à noter

  1. Impact de la configuration du serveur <br> Les serveurs (tels qu'Apache, Nginx) peuvent activer la compression de sortie ou la mise en mémoire tampon par défaut, ce qui affectera l'effet de sortie en temps réel. Assurez-vous de désactiver la compression GZIP et d'accélérer le cache.

  2. Comportement du navigateur <br> Certains navigateurs accumulent le contenu jusqu'à ce qu'il atteigne une certaine taille et peut ne pas être affiché immédiatement si le contenu de sortie est trop petit. Vous pouvez essayer de produire un certain nombre de caractères d'espace pour déclencher le rendu.

  3. Tampon
    Le tampon de sortie de PHP et la taille du tampon de serveur Web affectent la vitesse de sortie. La taille du tampon peut être ajustée en fonction des conditions réelles.

  4. Version PHP
    Time_nanosleep est pris en charge en commençant par PHP 5.0.0 pour vous assurer que votre environnement répond aux exigences.

4. Résumé

En combinant Time_nanosleep et ob_flush () , nous pouvons implémenter la sortie de données en temps réel étape par étape et segmentée en PHP, améliorant la perception des utilisateurs de la progression des scripts à long terme. Cette méthode est simple et facile à utiliser et convient aux scénarios où les retards nécessitent des microsecondes.

Si vous êtes combiné avec des paramètres de serveur et de navigateur raisonnables, vous pouvez obtenir des effets de sortie en temps réel très lisses et améliorer l'expérience utilisateur.