In diesem Artikel werden hauptsächlich die Funktionen des PHP-Puffers vorgestellt. Ich hoffe, dass er für alle hilfreich ist.
Der Code lautet wie folgt:
<?php for ($i=10; $i>0; $i--) { echo $i; flush(); sleep(1); } ?>
Laut PHP Handbuch:
Diese Funktion sendet alle bisherigen Ausgaben des Programms an den Browser des Benutzers.
Der obige Code sollte jede Sekunde $i ausgeben. Dies ist jedoch in der Praxis nicht unbedingt der Fall. Es ist möglich, dass nach einer Wartezeit von 10 Sekunden alle Ausgaben gleichzeitig angezeigt werden.
Okay, ändern wir diesen Code in
<?php ob_end_clean();//修改部分 for ($i=10; $i>0; $i--) { echo $i; flush(); sleep(1); } ?>
Es ist auch in Ordnung, wenn wir ob_end_clean() durch ob_end_flush() ersetzen.
<?php for ($i=10; $i>0; $i--) { echo $i; ob_flush();//修改部分 flush(); sleep(1); } ?>
Führen Sie es aus und stellen Sie fest, dass $i auch jede Sekunde ausgegeben wird? Warum ist das so?
Keine Sorge, werfen wir einen Blick auf php.ini.
Öffnen Sie php.ini und suchen Sie nach „output_buffering“. Wir sehen eine Einstellung wie diese: „output_buffering = 4096“. Genau wie der Name „output_buffering“ besteht die Funktion dieser Einstellung darin, die Ausgabe zu puffern. Die Puffergröße beträgt 4096 Bytes.
In unserem ersten Codeteil liegt der Grund dafür, dass die Ausgabe nicht wie erwartet ist this output_buffering Puffert diese Ausgaben. Die Ausgabe wird erst gesendet, wenn 4096 Bytes erreicht sind oder das Skript endet.
Die Funktion von ob_end_clean() und ob_end_flush() im zweiten Codeteil besteht darin, die Pufferung zu beenden. Auf diese Weise muss vor dem Versenden nicht gewartet werden, bis ein Puffer von 4096 Byte vorhanden ist.
Im dritten Codeteil wird ob_flush() verwendet. Seine Funktion besteht darin, die gepufferten Daten zu senden, die Pufferung wird jedoch nicht beendet, daher muss es vor jedem Flush() verwendet werden.
Wenn wir ob_end_clean(), ob_end_flush() und ob_flush() nicht verwenden möchten, müssen wir den Output_buffering in php.ini klein genug setzen, zum Beispiel auf 0. Bitte beachten Sie, dass diese Methode nicht funktioniert, wenn Sie planen, ini_set("output_buffering", "0") zum Festlegen in einem Skript zu verwenden. Bitte stoppen Sie dies, da diese Methode nicht funktioniert. Denn zu Beginn des Skripts wurden die Pufferungseinstellungen geladen und dann beginnt die Pufferung.
Vielleicht fragen Sie sich, warum Sie „flush()“ verwenden müssen, da ob_flush() die gepufferten Daten sendet? Können Sie nicht einfach den folgenden Code verwenden? ?
<?php for ($i=10; $i>0; $i--) { echo $i; ob_flush(); sleep(1); } ?>
Bitte beachten Sie den Unterschied zwischen ob_flush() und Flush(). Ersteres besteht darin, Daten aus dem PHP-Puffer freizugeben, und letzteres besteht darin, Daten, die sich nicht im Puffer befinden oder freigegeben wurden, an den Browser zu senden. Wenn also der Puffer vorhanden ist, müssen wir ob_flush() und Flush() gleichzeitig verwenden.
Ist Flush() hier unverzichtbar? Nein, wir haben eine andere Methode, bei der Daten bei der Ausgabe sofort an den Browser gesendet werden. Die folgenden beiden Codeteile müssen Flush() nicht verwenden. (Wenn Sie „output_buffering“ auf 0 setzen, benötigen Sie nicht einmal ob_flush() und ob_end_clean())
<?php ob_implicit_flush(true); for ($i=10; $i>0; $i--) { echo $i; ob_flush(); #如果ob函数打开的情况下 sleep(1); } ?>
<?php ob_end_clean(); ob_implicit_flush(true); for ($i=10; $i>0; $i--) { echo $i; sleep(1); } ?>
Zusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass er für das Studium aller hilfreich sein wird.
Verwandte Empfehlungen:
PHP-Methoden und Beispiele zur Implementierung von Prozesssteuerungsschaltern
So erhalten Sie den Kontrollkästchenwert in PHP und ein einfaches Beispiel
Detaillierte Grafik- und Texterklärung, wie PHP Text verwendet, um Besuche zu zählen
Das obige ist der detaillierte Inhalt vonFunktionen des PHP-Puffers. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!