Heim  >  Artikel  >  Backend-Entwicklung  >  Analyse grundlegender Konzepte und Prinzipien des Ausgabepuffers basierend auf PHP

Analyse grundlegender Konzepte und Prinzipien des Ausgabepuffers basierend auf PHP

步履不停
步履不停Original
2019-06-24 17:26:074210Durchsuche

Analyse grundlegender Konzepte und Prinzipien des Ausgabepuffers basierend auf PHP

1. Konzept

Während PHP ausgeführt wird, kann das Funktions- oder Operationsergebnis, das eine Ausgabe generiert, vorübergehend im PHP-Pufferbereich gespeichert werden. Erst wenn der Puffer voll ist oder die Ausführung von PHP abgeschlossen ist oder bei Bedarf eine Ausgabe erfolgt, werden die Daten an den Browser ausgegeben. Dieser Bereich der gepufferten Daten wird als PHP-Ausgabepuffer (OB) bezeichnet.

2. Prinzip

① Wenn Sie nach der Verwendung des Puffers beim Ausführen von PHP auf Codes wie echo und print_r stoßen, die Daten ausgeben (tatsächliche Viele Funktionen auf dem Wenn oben eine Ausgabe generiert wird, legt PHP die auszugebenden Daten in den eigenen Puffer von PHP und wartet auf die Ausgabe Die Daten im Puffer werden an den Server ausgegeben. Der Server empfängt die von PHP ausgegebenen Daten und speichert sie dann im eigenen Puffer des Servers.

③Wenn der Server die Anweisung akzeptiert Genau dann, wenn Sie den Inhalt des Puffers ausgeben möchten, wird der Inhalt des Puffers ausgegeben und an den Browser zurückgegeben.

Wie oben zu sehen ist, ist die Ausgabepufferschicht nicht die einzige Schicht, die zum Puffern der Ausgabe verwendet wird, sondern tatsächlich nur eine von vielen Schichten. Das Letzte, was Sie beachten müssen, ist, dass das Verhalten der Ausgabepufferschicht mit der von Ihnen verwendeten SAPI (Web oder CLI) zusammenhängt. Verschiedene SAPIs können unterschiedliche Verhaltensweisen haben.

Analyse grundlegender Konzepte und Prinzipien des Ausgabepuffers basierend auf PHPWie im ersten Konzept erwähnt, werden die gepufferten Daten ausgegeben, wenn der Puffer voll ist. Dies hängt mit SAPI zusammen. Der Puffer wird hauptsächlich über die Variable „output_buffering“ in php.ini gesteuert. Die Standardeinstellung von „output_buffering“ ist „On“ und der Standardwert ist 4096 (4 KB).

3. Ausgabepufferkonfiguration

1. Am Beispiel der SAPI von PHP-FPM finden Sie hier eine Zusammenfassung der INI-Dateikonfiguration phpEs gibt hauptsächlich drei Optionen:

output_buffering
implicit_flush
output_handler

Verwenden Sie eine Tabelle, um diese drei Parameter zu verdeutlichen. Bedeutung:

Analyse grundlegender Konzepte und Prinzipien des Ausgabepuffers basierend auf PHP Beachten Sie, dass die oben genannten drei Werte zur Laufzeit nicht mit ini_set() geändert werden können.

2. Bezüglich der Konfiguration bei der Ausführung im PHP-CLI-Modus sind einige Punkte zu beachten:

(1) Der Parameter „output_buffering“ ist standardmäßig nicht aktiviert.

(2) Der Parameter implicit_flush ist standardmäßig auf 1 (ein) gesetzt.

3. Bezüglich der Callback-Funktion „output_handler“ beachten Sie bitte einige allgemeine Einstellungen:

①ob_gzhandler: verwenden Sie ext/zlib, um die Ausgabe zu komprimieren;

②mb_output_handler: verwenden Sie ext/ mbstring-Konvertierung Zeichenkodierung;

③ob_iconv_handler: Verwenden Sie ext/iconv, um die Zeichenkodierung zu konvertieren;

⑤ob_[inflate /deflate]_handler: Verwenden Sie ext/http, um die Ausgabe zu komprimieren; ⑥ob_etaghandler: Verwenden Sie ext/http, um automatisch HTTP-Etag zu generieren.

ob_start(); //Alle Ausgabeinformationen werden nicht mehr direkt an die nächste Ebene gesendet, sondern im Ausgabepuffer gespeichert.

ob_clean(); //Inhalt des internen Puffers löschen, ohne den Puffer zu schließen (keine Ausgabe).

ob_end_clean(); //Löschen Sie den Inhalt des internen Puffers und schließen Sie den Puffer (keine Ausgabe).

ob_get_clean(); //Den Inhalt des internen Puffers zurückgeben und den Puffer schließen.

ob_flush(); //Sende den Pufferinhalt an die nächste Ebene, lösche den Pufferinhalt und schließe den Puffer nicht.

ob_end_flush(); //Sende den Pufferinhalt an die nächste Ebene, lösche den Pufferinhalt und schließe den Puffer. ob_get_flush(); // Den Inhalt des Puffers zurückgeben, den Puffer schließen und dann den Inhalt des Puffers freigeben. ob_get_contents(); //Den Inhalt des Puffers ohne Ausgabe zurückgeben.

ob_get_length(); //Gibt die Länge des Puffers zurück. Wenn der Puffer nicht aktiviert ist, wird FALSE zurückgegeben.

ob_get_status() ; //Den Status aller Ausgabepuffer abrufen.
ob_implicit_flush(); //Absolute Spülung ein-/ausschalten.


5. Anwendung des Ausgabepuffers


1. Vor Sitzung öffnen, Cookie, Header und andere Einstellungsfunktionen:

Die häufigste ist in Einige Daten wurden vor der Verwendung der Header-Funktion ausgegeben, was zu bestimmten Fehlern führt, z. B. Header-Informationen können nicht geändert werden – Header bereits gesendet von;

Der Grund für diesen Fehler ist, dass die Daten vor dem Header ausgegeben wurden . Bestimmte Daten, und während der Ausgabe dieser Daten sendet der Server auch einen Antwortstatus an den Browser (da eine Ausgabe erfolgt, ist die Anfrage gültig), und dann verwenden Sie erneut die Header-Funktion

Senden des http header gibt diesen Fehler zurück. Der Fehler bedeutet: Der HTTP-Header wurde gesendet und Sie können ihn nicht ändern.

So können Sie die ob_start-Methode zu Beginn aktivieren.

2. Steuern Sie die Download-Funktion des PHP-Programms:

Normalerweise verwenden viele Leute PHP, um Dateien herunterzuladen, aber wenn die Größe einer Datei zu groß ist (z. B. 100 MB), wird sie eingelesen Zuerst den Speicher löschen und dann an den Benutzer übertragen, wird die Antwortzeit erheblich verlängert (oder es kommt sogar zu einer Zeitüberschreitung) und die Speichernutzung wird ebenfalls stark erhöht (oder es kommt sogar zu einem Überlauf).

Mithilfe der Ausgabepufferung können Sie die gelesene Datei in den Puffer einlesen, sie bei Erreichen einer bestimmten Größe an den Benutzer übertragen und dann mit dem Lesen fortfahren, um den Sharding-Effekt zu erzielen. Auf diese Weise kann der Browser weiterhin Daten empfangen, ohne warten zu müssen, bis alle Dateien gelesen sind, und der Speicher wird nicht zu viel beansprucht.

3. Als statischer Dateicache:

Dateien, die mehrmals gelesen werden müssen und eine sehr geringe Änderungshäufigkeit aufweisen, werden beim ersten Lesen zum Generieren in den Puffer gelegt Bei statischen Dateien kann jeder nachfolgende Lesevorgang direkt zurückgegeben werden, ohne dass eine PHP-Verarbeitung (Lesen der Datenbank usw.) durchgeführt werden muss.

Weitere technische Artikel zum Thema PHP finden Sie in der Spalte PHP-Tutorial, um mehr darüber zu erfahren!

Das obige ist der detaillierte Inhalt vonAnalyse grundlegender Konzepte und Prinzipien des Ausgabepuffers basierend auf PHP. 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