Aktueller Standort: Startseite> Neueste Artikel> Verwenden Sie Time_nanosleep und OB_FLUSH, um schrittweise Ausgabedaten zu erhalten

Verwenden Sie Time_nanosleep und OB_FLUSH, um schrittweise Ausgabedaten zu erhalten

gitbox 2025-05-29

  • Diese Funktion pausiert das Skript für die angegebene Anzahl von Sekunden und Nanosekunden. Es hat eine höhere Genauigkeit als Schlaf und US -Sleep und eignet sich für Szenarien, in denen eine feinere Latenzkontrolle erforderlich ist.

  • ob_flush ()
    Erzwingen Sie den Ausgangspuffergehalt von PHP zum Browser, schließen jedoch den Puffer nicht. Bei Verwendung mit Flush () kann der Inhalt in Echtzeit "gedrückt" werden.

Hinweis: Um sicherzustellen, dass der Ausgang den Browser tatsächlich erreicht, wird er normalerweise mit Flush () verwendet, und das Caching und die Komprimierung können auf der Server- und Browserseite nicht deaktiviert werden.

2. Beispielcode zum Implementieren einer Schritt-für-Schritt-Echtzeitausgabe

 <?php
// Skript -Ausführungszeitlimit schließen(Nach Bedarf)
// set_time_limit(0);

// Ausgangspufferung einschalten
ob_start();

// Deaktivieren Sie den Browser -Zwischenspeichern und Komprimierung,Stellen Sie die sofortige Datenübertragung sicher
header("Content-Type: text/plain");
header("Cache-Control: no-cache");
header("X-Accel-Buffering: no"); // für Nginx Cache deaktivieren
// Schließung gzip Kompression(Wenn der Server standardmäßig aktiviert ist)
// Spezifische Methoden werden gemäß der Serverumgebung konfiguriert

for ($i = 1; $i <= 5; $i++) {
    echo "Aktuelle Schritte:{$i}\n";

    // Erfrischung erzwingen PHP Ausgangspuffer
    ob_flush();
    flush();

    // verwenden time_nanosleep Mikrosekunde Verzögerung,0.5Zweite = 500,000,000 纳Zweite
    time_nanosleep(0, 500000000);
}

echo "Alle Schritte sind abgeschlossen!\n";
?>

veranschaulichen:

  • OB_Start () : Starten Sie die Ausgangspufferung, um sicherzustellen, dass das Pufferspülen gesteuert werden kann.

  • Echo : Ausgabeinformationen nacheinander.

  • OB_FLUSH () + Flush () : Erzwingen Sie den Pufferinhalt, der an den Client gesendet wird, und aktualisieren Sie die Browseranzeige.

  • TIME_NANOSSEED (0, 500000000) : Pause für 0,5 Sekunden (500.000.000 Nanosekunden), wodurch der Ausgangseffekt offensichtlicher wird und Echtzeitprozesse simuliert.

  • Richten Sie die HTTP -Header angemessen ein, um die durch Browser- und Server -Cache verursachte Inhaltsverzögerung zu vermeiden.

3.. Dinge zu beachten

  1. Serverkonfiguration Auswirkung <br> Server (wie Apache, Nginx) können standardmäßig die Ausgangskomprimierung oder -pufferung ermöglichen, die den Echtzeitausgangseffekt beeinflusst. Stellen Sie sicher, dass Sie die GZIP -Komprimierung ausschalten und den Cache beschleunigen.

  2. Browserverhalten <br> Einige Browser sammeln Inhalte an, bis sie eine bestimmte Größe erreicht und möglicherweise nicht sofort angezeigt werden, wenn der Ausgangsinhalt zu klein ist. Sie können versuchen, eine bestimmte Anzahl von Whitespace -Zeichen auszugeben, um das Rendering auszulösen.

  3. Puffergröße
    Sowohl der Ausgangspuffer von PHP als auch die Größe des Webserverpuffers beeinflussen die Ausgangsgeschwindigkeit. Die Puffergröße kann gemäß den tatsächlichen Bedingungen eingestellt werden.

  4. PHP -Version
    TIME_NANOSSEEP wird beginnend mit PHP 5.0.0 unterstützt, um sicherzustellen, dass Ihre Umgebung den Anforderungen entspricht.

4. Zusammenfassung

Durch die Kombination von Time_nanosleep und ob_flush () können wir schrittweise und segmentierte Echtzeitdatenausgaben in PHP implementieren, wodurch die Wahrnehmung des Fortschritts von Langzeitskripten der Benutzer verbessert wird. Diese Methode ist einfach und einfach zu bedienen und für Szenarien geeignet, in denen Verzögerungen Mikrosekunden erfordern.

In Kombination mit angemessenen Server- und Browsereinstellungen können Sie sehr reibungslose Echtzeit-Ausgabesffekte erzielen und die Benutzererfahrung verbessern.