Heim Backend-Entwicklung PHP-Tutorial Detaillierte Erläuterung der PHP-Ausgabepuffersteuerung

Detaillierte Erläuterung der PHP-Ausgabepuffersteuerung

Jun 01, 2018 pm 02:47 PM
php 控制 详解

In diesem Artikel werden hauptsächlich detaillierte relevante Informationen und einfache Beispielcodes bereitgestellt, um Ihnen beim Lernen und Nachschlagen zu helfen.

Einführung in die PHP-Pufferung

Eigentlich ist mein Eindruck von der PHP-OB-Serie immer noch sehr vage, ich weiß nicht viel darüber, wie man sie spielt, ich habe wirklich kein tiefes Verständnis davon diese Inhalte. Als PHPer schäme ich mich sehr. Nach der Online-Suche und dem gegenseitigen Kopieren kann das vom Autor beschriebene Phänomen beim Ausführen des Codes nicht auftreten. Dieser Artikel ist ein gewissenhaftes Produkt und der Code wurde vom Autor ausgeführt.

Beim Ausführen einer Ausgabe, z. B. Echo, Drucken. Die Ausgabe wird nicht sofort an den Webserver gesendet, sondern die Daten werden in den PHP-Puffer geschrieben. Die Vorteile des PHP-Output_buffering-Mechanismus verbessern sicherlich die Leistung. Tatsächlich wird die PHP-Datei schließlich im Browser angezeigt und durchläuft drei Pufferstufen: PHP-Puffer=》Webserver-Puffer=》Browser-Puffer. Endlich im Browser angezeigt

Standardmäßig ist der PHP-Puffer aktiviert und der Standardwert des Puffers ist 4096, was 4 KB entspricht. Sie finden die Konfiguration „output_buffering“ in der Konfigurationsdatei php.ini. Puffer ist ein Speicheradressraum. Die Standardgröße des Linux-Systems beträgt im Allgemeinen 4096 (4 KB), was einer Speicherseite entspricht. Es wird hauptsächlich zum Speichern von Datenübertragungsbereichen zwischen Geräten mit unsynchronisierten Geschwindigkeiten oder Geräten mit unterschiedlichen Prioritäten verwendet. Durch den Puffer können die Prozesse weniger aufeinander warten. Hier ist ein allgemeineres Beispiel. Wenn Sie einen Texteditor öffnen, um eine Datei zu bearbeiten, schreibt das Betriebssystem das Zeichen nicht sofort direkt auf die Festplatte, sondern schreibt es beim Schreiben zuerst in den Puffer Wenn ein Puffer voll ist, werden die Daten im Puffer auf die Festplatte geschrieben. Wenn die Kernelfunktion „flush()“ aufgerufen wird, müssen natürlich die fehlerhaften Daten im Puffer zurück auf die Festplatte geschrieben werden.

Zum Beispiel muss

<?php
echo "南无阿弥陀佛<br>";
header("content-type:text/html;charset=&#39;utf-8&#39;");
echo "真善忍好!";
//output
//南无阿弥陀佛
//真善忍好
Nach dem Login kopieren

header() vor jeder tatsächlichen Ausgabe aufgerufen werden, aber wir Das Programm hat eine Ausgabe, läuft aber normal. Wenn Sie sich den folgenden Code ansehen:

<?phpecho "南无阿弥陀佛<br>";
ob_flush();
header("content-type:text/html;charset=&#39;utf-8&#39;");
echo "真善忍好!";
//output
//南无阿弥陀佛
//Cannot modify header information - headers already sent by (output started at E:\php\test.php:3)
//真善忍好
Nach dem Login kopieren

Das obige Programm zeigt, dass das Programm nicht sofort ausgibt, sondern nur den Puffer aktualisiert und ausgibt, wenn der ob_flush Funktion aufgerufen wird.

ob_flush() und Flush()

ob_flush() und Flush() sind in PHP verfügbar Benutzerhandbuch Detaillierte Anweisungen finden Sie hier. Der Unterschied zwischen den beiden ist:

ob_flush() dient zum Aktualisieren des PHP-eigenen Puffers.

flush() dient zum Aktualisieren des WebServer-Serverpuffers . Ausgabe an den Browser. Die folgende Situation tritt jedoch ein:

  1. Einige Webserverprogramme, insbesondere Webserverprogramme unter Win32, speichern die Ausgabe des Skripts immer noch zwischen, bevor sie die Ergebnisse an den Browser senden . , bis zum Ende des Programms.

  2. Einige Apache-Module, wie z. B. mod_gzip, können ihre eigene Ausgabe zwischenspeichern, was dazu führt, dass die von der Funktion „flush()“ generierten Ergebnisse nicht sofort an den Client-Browser gesendet werden.

  3. Sogar der Browser speichert den empfangenen Inhalt zwischen, bevor er ihn anzeigt. Beispielsweise speichert der Netscape-Browser Inhalte zwischen, bis er einen Zeilenumbruch oder den Anfang eines HTML-Tags erhält, und zeigt die gesamte Tabelle erst an, wenn er ein -Tag erhält.

  4. 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.

Zum Beispiel:

<?php
/**
Server:LightTPD/1.4.28 (Win32)
X-Powered-By:PHP/5.3.27
*/
echo &#39;佛法无边&#39;."<BR>";
ob_flush();
flush();
sleep(1);
echo &#39;法轮常转&#39;;

//output
Nach dem Login kopieren

Der obige Code wird Zeile für Zeile im Chrome-Browser ausgegeben und auf dem Das heißt, der Browser gibt alle Serien aus. Tatsächlich handelt es sich um das vierte Element oben. Einige Browser beginnen mit der Anzeige erst, wenn sie 256 Zeichen empfangen. Ändern Sie den obigen Code in die folgende Form:

<?php
/**
Server:LightTPD/1.4.28 (Win32)
X-Powered-By:PHP/5.3.27
*/
echo str_pad(&#39;&#39;,240)."\n"; 
echo &#39;佛法无边&#39;."<BR>";
ob_flush();
flush();
sleep(1);
echo &#39;法轮常转&#39;;

//output
Nach dem Login kopieren

Auf diese Weise wird er zeilenweise im IE ausgegeben, da er 256 Zeichen überschreitet.

ob Andere Funktionsbeschreibungen

1.ob_end_flush und ob_end_clean

Ende endet, wie der Name schon sagt, schließt Die Pufferbereiche schalten beide den Ausgabepuffer aus, einer ist der Ausgabepuffer und der andere ist leer. Beispiel:

<?php
/**
Server:LightTPD/1.4.28 (Win32)
X-Powered-By:PHP/5.3.27
*/
echo &#39;before&#39;;
ob_end_clean();
echo str_pad(&#39;&#39;,4096)."\n";
for ($i=10; $i>0; $i--) 
{ 
 echo $i;
 sleep(1);
}
Nach dem Login kopieren

Der obige Code gibt den gesamten Inhalt auf einmal aus, anstatt ihn einzeln auszugeben. Schaltet ob_end_clean() den Puffer nicht aus? Warum nicht einzeln ausgeben? Tatsächlich wird PHP, wie oben erwähnt, nicht direkt an den Browser, sondern an den Webserver ausgegeben. Obwohl PHP keine Pufferung hat. Aber der Webserver existiert noch. Der folgende Code:

/**
Server:LightTPD/1.4.28 (Win32)
X-Powered-By:PHP/5.3.27
*/
echo &#39;before&#39;;
ob_end_clean();
echo str_pad(&#39;&#39;,4096)."\n";
for ($i=10; $i>0; $i--) 
{ 
 flush();
 echo $i;
 sleep(1);
}
Nach dem Login kopieren

plus Flush() gibt es Zeile für Zeile aus. Wenn Sie ob_end_clean durch ob_end_flush ersetzen, wird before ausgegeben.

Weitere Funktionen entnehmen Sie bitte dem Handbuch, das relativ einfach ist.

Zusammenfassung

Vom PHP-Skript zum Browser müssen Sie php buffer=》web server buffer=》browser buffer durchlaufen. Endlich im Browser angezeigt. Beides ist unverzichtbar. Wir benötigen also ob_flush und Flush und fügen echo str_pad('',4096) hinzu, um den gewünschten Effekt zu debuggen.

Zusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein.

Verwandte Empfehlungen:

Anmelde-, Registrierungs- und Passwortänderungsfunktionen in PHP implementiert

Detaillierte Erläuterung der anonymen PHP-Funktionen und Vorsichtsmaßnahmen

Verwendung der Callback-Funktion call_user_func_array in PHP

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der PHP-Ausgabepuffersteuerung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

CakePHP-Projektkonfiguration CakePHP-Projektkonfiguration Sep 10, 2024 pm 05:25 PM

In diesem Kapitel werden wir die Umgebungsvariablen, die allgemeine Konfiguration, die Datenbankkonfiguration und die E-Mail-Konfiguration in CakePHP verstehen.

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

CakePHP-Routing CakePHP-Routing Sep 10, 2024 pm 05:25 PM

In diesem Kapitel lernen wir die folgenden Themen im Zusammenhang mit dem Routing kennen.

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

CakePHP erstellt Validatoren CakePHP erstellt Validatoren Sep 10, 2024 pm 05:26 PM

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.

See all articles