Heim >Backend-Entwicklung >PHP-Problem >So schließen Sie den Puffer in PHP

So schließen Sie den Puffer in PHP

青灯夜游
青灯夜游Original
2021-09-28 19:08:142652Durchsuche

So deaktivieren Sie den Puffer in PHP: 1. Öffnen Sie das PHP-Installationsverzeichnis, suchen und öffnen Sie die Konfigurationsdatei „php.ini“ 2. Suchen Sie in der Konfigurationsdatei das Element „output_buffering“ und legen Sie den Wert fest den Punkt auf „Aus“ stellen. Das war's.

So schließen Sie den Puffer in PHP

Die Betriebsumgebung dieses Tutorials: Windows 7-System, PHP-Version 7.1, DELL G3-Computer

PHP-Puffer (Puffer)

Die Skriptausgabeinformationen werden zuerst in den Puffer gelegt, und zwar nur Wenn der Puffer voll ist oder die Ausführung des Skripts abgeschlossen ist, werden die Daten zur nächsten Stufe übertragen. Sie finden das Einstellungselement output_buffering in der Konfigurationsdatei php.ini. Meine Standardkonfiguration (Windows/XAMPP v3.2.2) ist 4096

So schließen Sie den Puffer in PHP

Wenn auf „Ein“ gesetzt, ist der Puffer verfügbar und es gibt keine Größenbeschränkung

Wenn die Einstellung Aus ist, ist der Puffer nicht verfügbar.

Wenn die Einstellung auf eine Ganzzahl eingestellt ist, ist der Puffer verfügbar und hat die festgelegte Größe in Bytes. Es ist zu beachten, dass ini_set die Puffergröße nicht festlegen kann Dies wurde beim Initialisieren der Skriptausführungsumgebung durchgeführt. Okay, die Definition von buffer ist im CLI-Modus standardmäßig deaktiviert.

Dann stellt sich die Frage: Was ist der Unterschied zwischen dem Schließen und Öffnen des Puffers? Was bewirkt die anfängliche Puffergröße? Der CLI-Modus ist standardmäßig deaktiviert. Kann er aktiviert werden, wenn das Unternehmen ihn benötigt? Welche Vorteile bietet der Cache-Bereich?

1. Was ist der Unterschied zwischen dem Schließen und Öffnen des Puffers?

Überprüfung des bestandenen Codes

Wenn Output_Buffering als 4096 konfiguriert ist, führen Sie den Code aus

Ausgabeergebnis: Nach 3 Sekunden Wartezeit werden Start und Ende gleichzeitig ausgegeben

Wenn Output_buffering als Off konfiguriert ist, Führen Sie den gleichen Code aus

Ausgabeergebnis: Start wird zuerst ausgegeben, und nach 3 Sekunden Wartezeit wird Ende ausgegeben. Die Ergebnisse sind genau die gleichen ~ aber als ich den laufenden Prozess beobachtete, stellte ich einen überraschenden Unterschied fest. Wenn die Pufferung ausgeschaltet ist, wird zuerst „Start“ und nach einer Wartezeit von 3 Sekunden „Ende“ ausgegeben. Wenn der Puffer aktiviert ist, wartet er auf den Abschluss der Skriptausführung und gibt die Ergebnisse zusammen aus

In diesem Beispiel wird Flush verwendet, um den Apache-Puffer zu aktualisieren, was dem Herstellen einer direkten Verbindung zwischen dem PHP-Puffer und dem ähnelt Browser, sodass unsere Aufmerksamkeit auf den PHP-Puffer selbst gerichtet werden kann.

Durch ein anschauliches Beispiel ist der PHP-Puffer wie ein großes Haus. Jedes Mal, wenn die Ausgabefunktion wie Echo ausgeführt wird, werden Daten in dieses große Haus geworfen, bis die Skriptausführung abgeschlossen ist oder die Funktion ob_flush ausgeführt wird, um die Daten zu übertragen das große Haus freigegeben und in den WebServer-Puffer geworfen. Nach dem Schließen des PHP-Puffers wird die Echo-Funktion ausgeführt, wenn kein großes Haus vorhanden ist, in das ich sie direkt an den WebServer-Puffer übergeben kann.

Anhand von Beispielen und Codeausführungsergebnissen können wir verstehen, dass der sogenannte PHP-Puffer ein von PHP selbst entwickelter Datenspeicher-Hub ist und eine Reihe von Ob-Funktionen zu diesem Zweck tätig sind. (Zeigen Sie einige Beispielfunktionen)

ob_clean(); //Löschen Sie den Inhalt des internen Puffers, 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_contents(); //Gibt den Inhalt des Puffers zurück, gibt nicht aus

ob_get_length();/Gibt die Länge des internen Puffers zurück, gibt diese Funktion FALSE zurück.

2. Welche Rolle spielt die anfängliche Puffergröße?

Ändern Sie die Ausgabepufferung von 4096 auf 5, um das Testen zu erleichtern.Code ausführen 345, warte auf 3 Sekunden später endet die Ausgabe

Ein Vergleich der Ausgabe kann den Unterschied deutlich verdeutlichen.

Der Puffer kann nur 5 Bytes an Daten aufnehmen. Wenn die eingegebenen Daten kleiner als der Maximalwert sind, können sie zuerst gespeichert werden. Wenn sie größer oder gleich dem kritischen Wert sind, müssen die Daten gespeichert werden rausgeschmissen. Dies ist, was wir manuell tun. Die ob_flush-Funktion hat einen Effekt.

3. Der CLI-Modus ist standardmäßig deaktiviert. Kann er aktiviert werden, wenn das Unternehmen ihn benötigt?

Diese Frage kann ergänzt werden: Wenn php.ini den Puffer deaktiviert, das Unternehmen ihn jedoch verwenden muss, was kann ich dann tun? Natürlich wird es nicht so schwierig sein.

ob_start(); Alle Ausgabeinformationen werden nicht mehr direkt an den Browser gesendet, sondern im Ausgabepuffer gespeichert .

Da wir nun wissen, dass der PHP-Puffer dem Konzept des temporären Datenspeicherbereichs ähnelt, schauen wir uns noch einmal den TP5-Quellcode an.

Schauen Sie sich zunächst die Erklärung der Funktionen ob_get_level und ob_get_clean an

ob_get_level(): Gibt die Verschachtelungsebene des Ausgabepuffermechanismus zurück.

ob_get_clean(): Den Inhalt des aktuellen Puffers abrufen und den aktuellen Ausgabepuffer löschen.

Sie können auch ein oder zwei Dinge aus dem Code lernen. Wenn der Level größer als 0 ist, rufen Sie den Inhalt des Puffers ab, löschen Sie den Puffer und öffnen Sie dann einen neuen über ob_start „erneute Anwendung“ in den Kommentaren erklärt.

Die sogenannte Verschachtelung wird hier erklärt, wann der Wert von level 0 ist und wenn er nicht 0 ist, was ist es? Bitte schalten Sie php.ini Output_buffering und Output aus, um das Ergebnis zu sehen. Versuchen wir außerdem, die Ausgabeergebnisse zu vergleichen, ob_start mehrmals und ob_get_level mehrmals.

Werfen wir zunächst einen Blick auf die beiden Modelle


Wenn ob_start mehrmals einen neuen Puffer öffnet, wird die Datenstruktur als zweiter Typ erstellt, der verschachtelt ist. ob_get_level gibt die verschachtelte Ebene zurück.

Persönlich gesehen kann die Verschachtelung mit dem Streaming-Mechanismus von Java verglichen werden. Die Daten in einem Puffer werden an den nächsten Puffer ausgegeben, und dann können benutzerdefinierte Vorgänge an den Daten ausgeführt werden.

Wenn man sich nun den TP5-Quellcode ansieht, wird die Idee klarer. Wenn das System den Puffer initialisiert, löschen Sie ihn zuerst und öffnen Sie ihn dann erneut, da die Größe möglicherweise begrenzt ist. Die Größe des durch Ausführen von ob_start geöffneten Cache-Bereichs ist „groß genug“, aber es gibt keine spezifische Beschreibung, wie groß er ist. Ich weiß nur, dass die Daten, egal wie groß sie geschrieben werden, erst am Ende gesendet werden das Skript

4. Welche Vorteile bietet der Cache-Bereich?

PHP-Ausgabedaten werden einmal an den WebServer gesendet, was den Ressourcenverbrauch erhöht. Es ist besser, sie einheitlich im Speicher zu speichern, was effizienter ist.

Webanfragen enthalten HTTP-Header und es kann keine Ausgabe erfolgen, bevor die Header festgelegt sind. Der PHP-Puffer erledigt diese Arbeit für uns, indem er verschiedene Daten ausgibt, bevor er den Header sendet. Der Puffer sendet zunächst die Header-Informationen an WebSever und sendet dann die Datenpakete einheitlich.

Empfohlenes Lernen: „PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonSo schließen Sie den Puffer in 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