Heim  >  Artikel  >  Backend-Entwicklung  >  Einführung in die Methode zur Verwendung des PHP-Output_Buffering-Cache

Einführung in die Methode zur Verwendung des PHP-Output_Buffering-Cache

jacklove
jackloveOriginal
2018-06-09 15:05:581602Durchsuche

Puffer ist ein Speicheradressraum. Die Standardgröße des Linux-Systems beträgt im Allgemeinen 4096 (4 KB). Es wird hauptsächlich zum Speichern von Datenübertragungsbereichen zwischen Geräten mit unsynchronisierten Geschwindigkeiten oder Geräten mit unterschiedlichen Prioritäten verwendet.

Puffer kann die Wartezeit zwischen Prozessen reduzieren.

Wenn Sie beispielsweise einen Texteditor öffnen und ein Zeichen eingeben, schreibt das System es nicht sofort auf die Festplatte. Stattdessen wird es in einem Puffer gespeichert. Wenn ein Puffer voll ist, wird der Inhalt des Puffers auf die Festplatte geschrieben.

Natürlich können Sie Flush auch verwenden, um das Schreiben der Pufferdaten auf die Festplatte zu erzwingen.

In PHP, wie Echo, Print, wird die Ausgabe nicht sofort über TCP an die Browserausgabe übergeben. Stattdessen werden die Daten in den PHP-Puffer geschrieben. Wenn ein PHP-Puffer voll ist, wird er über TCP an den Browser weitergeleitet.

echo /print -> php output_buffer -> tcp buffer -> php-output_buffering

Standardmäßig ist der PHP-Puffer aktiviert und der Standardwert ist 4096 (4 KB). Die Output_buffering-Konfiguration finden Sie in php.ini. Es wird erst an den Browser gesendet, wenn der Puffer voll ist.

Sie können ob_start() auch so einstellen, dass es nicht sofort an den Browser gesendet wird, selbst wenn es den Standardwert (4 KB) überschreitet Browser, bis das Skript abgeschlossen ist oder die ob_end_flush-Methode aufgerufen wird.

1.output_buffering=4096, weniger Daten ausgeben (weniger als ein Puffer)

<?php
for($i=0; $i<10; $i++){
    echo $i.&#39;<br>&#39;;
    sleep(2);
}
?>
Laufergebnis: Warten bis alle Skripte abgeschlossen sind, bevor sie ausgegeben werden, da die Daten nicht mit einer Puffergröße voll sind.

2.output_buffering=4096, weniger Daten ausgeben (weniger als ein Puffer), Output_buffering ausschalten, Output_buffering=0 in php.ini ändern

<?php
for($i=0; $i<10; $i++){
    echo $i.str_repeat(" ",500).&#39;<br>&#39;; // 当接受到的256(甚至更多)个字节以后才开始显示该页面,所以必须发送一些额外的空格来让这些浏览器显示页面内容。
    flush();
    sleep(1);
}
?>

Ausführungsergebnisse: Da die PHP-Pufferung deaktiviert ist, muss nicht auf die Ausführung des Skripts gewartet werden, bevor es ausgegeben werden kann. Die Daten bleiben nicht im PHP-Puffer und Sie kann eine intermittierende Ausgabe sehen. echo -> tcp buffer ->browser

3. Wenn „output_buffering=4096“ größere Daten ausgibt (größer als ein Puffer), verwenden Sie nicht ob_start( )

<?php
for($i=0; $i<10; $i++){
    echo file_get_contents(&#39;f.txt&#39;).$i.&#39;<br>&#39;;
    sleep(1);
}
?>

Betriebsergebnis: f.txt ist eine Datei, die größer als 4 KB ist, da der Pufferspeicher nicht ausreicht Sobald ein Puffer voll ist, wird er ausgegeben, sodass eine intermittierende Ausgabe zu sehen ist.

4. Um größere Daten auszugeben (größer als ein Puffer), verwenden Sie ob_start()

<?php
ob_start();
for($i=0; $i<10; $i++){
    echo file_get_contents(&#39;f.txt&#39;).$i.&#39;<br>&#39;;
    sleep(1);
}
?>

Ausführungsergebnisse: Da ob_start() verwendet wird, wird genügend Speicherplatz für den Puffer festgelegt, sodass dieser gespeichert wird, bis das Skript ausgeführt und dann ausgegeben wird.

Ausgabepuffermethode


1.ob_start

Aktivieren Sie die Ausgabepufferung Mechanismus: Nach der Aktivierung wird das Skript nicht mehr direkt an den Browser ausgegeben, sondern vorübergehend in den PHP-Pufferbereich geschrieben. Es wird erst gesendet, wenn die Ausführung des Skripts abgeschlossen ist.


2.ob_get_contents

Rufen Sie die Daten in der PHP-Pufferung ab. Hinweis: Es muss vor ob_end_clean() aufgerufen werden, sonst erhalten Sie nur Nullzeichen.


3.ob_end_flush und ob_end_clean

ob_end_flush gibt die Daten in der PHP-Pufferung aus, löscht sie jedoch nicht.

ob_end_clean gibt keine Ausgabe aus, sondern löscht nur die Daten in der PHP-Pufferung.

Hinweis:
Die Beschreibung von ob_flush/flush im Handbuch dient der Aktualisierung des Ausgabepuffers und muss auch in Verbindung verwendet werden, sodass dies bei vielen zu Verwirrung führt Leute...
Eigentlich arbeiten sie mit verschiedenen Objekten. In einigen Fällen führt Flush überhaupt nichts aus. Die ob_*-Funktionsreihe betreibt den Ausgabepuffer von PHP selbst.ob_flush dient also dazu, PHPs eigenen Puffer zu aktualisieren Und Flush hat genau genommen nur dann einen tatsächlichen Effekt, wenn PHP als Apache-Modul (Handler oder Filter) installiert ist (kann als speziell auf Apache bezogen betrachtet werden) Puffer Unter dem Sapi des Apache-Moduls ruft Flush indirekt die API von Apache auf, indem es den Flush-Member-Funktionszeiger von sapi_module aufruft: ap_rflush aktualisiert den Ausgabepuffer von Apache Im Handbuch heißt es auch, dass es einige andere Module von Apache gibt, die das Ergebnis dieser Aktion ändern können.Einige Apache-Module, wie z. B. mod_gzip, führen möglicherweise selbst eine Ausgabe-Zwischenspeicherung durch, was die Funktion „flush()“ auslöst bis Die erzeugten Ergebnisse werden nicht sofort an den Client-Browser gesendet. Sogar der Browser speichert den empfangenen Inhalt zwischen, bevor er ihn anzeigt. Beispielsweise speichert der Netscape-Browser Inhalte zwischen, bis er eine neue Zeile oder den Anfang eines HTML-Tags empfängt, und zeigt die gesamte Tabelle erst an, wenn er ein f16b1740fad44fb09bfe928bcc527e08-Tag empfängt. Einige Versionen von Microsoft Internet Explorer beginnen erst mit der Anzeige der Seite, nachdem 256 Bytes empfangen wurden. Daher müssen einige zusätzliche Leerzeichen gesendet werden, damit diese Browser den Seiteninhalt anzeigen können.

Die richtige Reihenfolge für die Verwendung der beiden lautet also. Zuerst Ob_flush, dann Flush.

Natürlich ist es unter anderen Sapi nicht erforderlich, Flush aufzurufen. Um die Portabilität Ihres Codes sicherzustellen, wird jedoch empfohlen, ihn zusammen zu verwenden.

In diesem Artikel wird erläutert, wie der PHP-Ausgabepuffer-Cache verwendet wird. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

So implementieren Sie die BigPipe-Chunked-Ausgabe über PHP

So verwenden Sie fsockopen GET/POST zum Senden von Formularen und Hochladen von Dateien über PHP

Einführung in den relevanten Inhalt der PHP-Filterung in HTML Tag-Attributklassen

Das obige ist der detaillierte Inhalt vonEinführung in die Methode zur Verwendung des PHP-Output_Buffering-Cache. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn