Heim > Artikel > Backend-Entwicklung > Ob-Funktionspuffermechanismus in PHP
Dieser Artikel stellt ihn hauptsächlich vor. Ich hoffe, dass er für alle hilfreich ist.
Wenn es um Pufferung geht, das heißt Puffer, müssen wir es mit dem Cache vergleichen. Es ist bedeutungslos, einfach zu vergleichen, was sie bewirken. Caching löst das Problem, Daten schnell zu finden und zu nutzen und CPU-Verbrauch einzusparen, während Pufferung das Problem der Nichtübereinstimmung zwischen Hochgeschwindigkeits-CPU und langsamen E/A-Geräten löst.
Lassen Sie uns über den anderen Protagonisten dieses Artikels sprechen, die ob-Funktion ist die Abkürzung für output_buffering. Da es sich bei der ob-Funktion um eine PHP-Erweiterungsfunktion handelt, ist die Hauptoperation der ob-Funktion PHP-Puffer.
Nachdem wir kurz auf die beiden Protagonisten dieses Artikels eingegangen sind, müssen wir zum Ausgangsthema zurückkehren. Wie gelangen die von der Funktion echo print_r ausgegebenen Daten zum Browser, damit der Benutzer sie sehen kann? Der eigentliche Prozess ist wie folgt:
Der Code lautet wie folgt:
echo、print_r=>php output_buffering=>webServer buffer=>browser buffer=>browser display
Wir können das deutlich von der Funktion echo, print_r bis zum Senden von Informationen an den Client erkennen. Es hat zwei Puffer durchlaufen, der Client durchläuft auch einen Browserpuffer. Was wir in diesem Artikel hauptsächlich besprechen, ist PHP-Ausgabepufferung.
Nutzung des Puffers, wenn die ob-Funktion nicht verwendet wird
Unsere Codes verwenden die ob-Funktion oft überhaupt nicht. Verwenden sie also den Puffer? Dies hängt von den PHP-Einstellungen ab. Der Puffer wird über die Variable „output_buffering“ in php.ini gesteuert. Der Standardwert ist „off“ und kann auf „on“ gesetzt werden, um den Puffer zu öffnen. Nach dem Aufruf des Puffers verwendet der Code tatsächlich den Puffer, auch wenn die ob-Funktion nicht im Programm verwendet wird. Darüber hinaus ist PHP im CLI-Modus unabhängig von der Einstellung von „output_buffering“ in „php.ini“ standardmäßig immer geschlossen.
Warum ist es ein Puffer? Vereinfacht ausgedrückt hat die Hochgeschwindigkeits-CPU ihre eigenen Daten frühzeitig verarbeitet und möchte sie über die Leitung an den Benutzer übertragen, aber die Leitung ist zu schmal und kann nicht sofort übertragen werden. Wenn ein Puffer eingeführt wird, kann die CPU die generierten Daten schnell in den Puffer legen und sie dann an einem kühlen Ort ruhen lassen. Der Puffer gibt Daten gemäß den Anweisungen zeitnah aus. Dadurch wird der Widerspruch zwischen Hochgeschwindigkeits-CPU und langsamen E/A-Geräten effektiv gelöst.
Wann werden die Pufferdaten ausgegeben? 1. Wenn der Puffer voll ist, verfügt der Puffer über eine Kapazität und der Inhalt wird automatisch ausgegeben, wenn das Limit erreicht ist. 2. Die Skriptausführung ist abgeschlossen. Viele kleine Programme geben nicht so viel Inhalt aus. Sie können nicht warten, bis der Puffer voll ist, bevor Sie etwas ausgeben ~ Das ist natürlich.
Puffernutzung bei Verwendung der ob-Funktion
Der Code lautet wie folgt:
ob_start()
Schalten Sie den Ausgabepuffer ein. Diese Funktion ist eine der Funktionen, die wir am häufigsten aufrufen. Wenn „output_buffering“ auf „on“ oder „x k“ gesetzt ist, öffnet diese Funktion den Ausgabepuffer nicht so sehr, sondern erweitert den Ausgabepuffer auf eine große Größe. Unter der Bedingung, dass „output_buffering“ auf „off“ gesetzt ist, übernimmt ob_start natürlich die Rolle des Öffnens des Puffers. ob_start() kann auch einen optionalen Parameter an die Funktion „output_callback“ übergeben, der im offiziellen PHP-Handbuch ausführlich erläutert wird.
Der Code lautet wie folgt:
ob_get_contents
()
Holen Sie sich einfach den Inhalt des Ausgabepuffers, löschen Sie ihn jedoch nicht.
Der Code lautet wie folgt:
ob_end_clean()与ob_clean()
Der Unterschied zwischen diesen beiden Funktionen ist buchstäblich zu sehen. Ersteres löscht den Pufferinhalt und schließt ihn, während letzteres nur die Löscharbeit übernimmt. Es ist zu beachten, dass nach Verwendung dieser beiden Funktionen die vorherigen Funktionen wie echo und print_r den Inhalt nicht ausgeben.
Der Autor hat einmal versucht, den Inhalt von ob_get_contents() über print_r auszudrucken, und hat dann ob_clean() aufgerufen, um den Puffer zu löschen, damit er nicht beeinträchtigt wird Nachfolgende Operationen am Puffer schlugen wiederholt fehl. Wenn Sie sorgfältig darüber nachdenken, wird der Inhalt von print_r erneut in den Puffer geschrieben und dann die Operation ob_clean() ausgeführt, sodass natürlich keine Ausgabe erfolgt. Durch Aufrufen der Funktion ob_flush() vor der Operation ob_clean kann der gewünschte Effekt erzielt werden.
Der Code lautet wie folgt:
ob_flush()与flush()
ob_flush() sendet den Inhalt des Puffers und verwirft den Inhalt. Daher ist es am besten, vor dieser Funktion ob_get_contents() zu verwenden, um den Pufferinhalt abzurufen. Flush() leert den serverseitigen Puffer und sendet ihn an den Client. Daher sollte aus Prozesssicht zuerst ob_flush() und dann die Flush-Funktion aufgerufen werden.
Lassen Sie mich außerdem das Funktionsprinzip von Apache Buffer Flush() erläutern: Unter dem Sapi des Apache-Moduls erfolgt die Spülung durch Aufruf von sapi_module()Der Flush-Member-Funktionszeiger verwendet indirekt Apaches API::ap_rflush, um den Ausgabepuffer von Apache zu aktualisieren. Natürlich können andere Apache-Module wie mod_gzip das Ergebnis dieser Aktion ändern und den Ausgabepuffer möglicherweise selbst ausführen, was dazu führt, dass die von der Funktion „flush()“ generierten Ergebnisse nicht an den Client-Browser gesendet werden sofort.
Der Code lautet wie folgt:
ob_get_clean()
Wenn Sie bereits mit ob_get_contents() und ob_clean() vertraut sind, dann ist diese Funktion sehr hilfreich einfach. Weil es eine Kombination aus den ersten beiden ist. Es ruft hauptsächlich den Inhalt des aktuellen Puffers ab und löscht den aktuellen Ausgabepuffer.
Es gibt viele weitere ob-Funktionen, aber die meisten davon sind relativ einfach zu verwenden und leicht zu verstehen. Weitere Informationen finden Sie im PHP-Handbuch. Dieser Artikel listet einige Funktionen auf, die der Autor zunächst nicht sehr gut verstanden hat. Natürlich werden in Zukunft neue Probleme auftreten. Das Nachdenken über Probleme und deren Lösung kann hier die Freude am Leben sein.
Zusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass er für das Studium aller hilfreich sein wird.
Verwandte Empfehlungen:
PHP-SMTP-Methode zur Implementierung der E-Mail-Versandfunktion
PHP zur rein statischen Implementierung Seitenmethode
So implementieren Sie das Beobachtermuster in PHP
Das obige ist der detaillierte Inhalt vonOb-Funktionspuffermechanismus in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!