Heim  >  Artikel  >  php教程  >  Lassen Sie uns kurz über den Unterschied zwischen ob_flush und Flush in PHP sprechen

Lassen Sie uns kurz über den Unterschied zwischen ob_flush und Flush in PHP sprechen

高洛峰
高洛峰Original
2016-12-22 16:34:191077Durchsuche

Die Beschreibung von ob_flush/flush im Handbuch besagt, dass beide den Ausgabepuffer aktualisieren und zusammen verwendet werden müssen, was bei vielen Menschen zu Verwirrung führen wird ...

Tatsächlich handelt es sich bei der Operation um Objekte In einigen Fällen führt Flush überhaupt nichts aus.

Die ob_*-Funktionsreihe betreibt den Ausgabepuffer von PHP selbst.

Ob_flush aktualisiert also den Puffer von PHP selbst.

Genau genommen hat Flush nur dann eine tatsächliche Wirkung, wenn PHP als Apache-Modul (Handler oder Filter) installiert ist. Es aktualisiert den Puffer des Webservers (der speziell als Apache betrachtet werden kann).

Unter dem Sapi des Apache-Moduls ruft Flush indirekt die Apache-API auf, indem es den Flush-Member-Funktionszeiger von sapi_module aufruft: ap_rflush aktualisiert den Ausgabepuffer von Apache. Natürlich heißt es im Handbuch auch, dass es einige andere Module von gibt Apache. Es kann das Ergebnis dieser Aktion ändern Client-Browser sofort. Sogar Browser speichern empfangene Inhalte zwischen, bevor sie diese anzeigen. 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. Daher ist die richtige Reihenfolge, um die beiden zu verwenden. Unter anderen Sapi ist es natürlich in Ordnung, Flush nicht aufzurufen zusammen.

Bei der Verwendung von Flush und ob_flush gibt es einige Besonderheiten, die verhindern, dass der Ausgabepuffer geleert wird.


1. Die richtige Reihenfolge von Flush und ob_flush, ob_flush zuerst und dann Flush, wie folgt:

ob_flush();

flush();
Wenn das Betriebssystem von Da es sich bei dem Webserver um ein Windows-System handelt, gibt es kein Problem, wenn die Reihenfolge umgekehrt wird oder wenn ob_flush() nicht verwendet wird. Auf Linux-Systemen kann der Ausgabepuffer jedoch nicht geleert werden.

2. Stellen Sie vor der Verwendung von ob_flush() sicher, dass die vorherige Inhaltsgröße 4069 Zeichen beträgt.


Die Standardausgabepufferung einiger Webserver beträgt 4069 Zeichen oder mehr, d. h. der Ausgabeinhalt muss 4069 Zeichen erreichen, bevor der Server den Ausgabepuffer leert, um sicherzustellen, dass die Leerung wirksam ist. Es ist am besten, der Funktion ob_flush() voranzugehen. Es gibt die folgenden Anweisungen:

print str_repeat(" ", 4096);

um sicherzustellen, dass der Wert für die Ausgabepufferung erreicht wird.

Weitere verwandte Artikel über den Unterschied zwischen ob_flush und Flush in PHP finden Sie auf der chinesischen PHP-Website!
<?php
for ($i=1; $i<20; $i++)
{
echo "<font size=&#39;10&#39; color=&#39;red&#39;>".$i."</font>";
echo &#39;<br>&#39;;
ob_flush();
flush();
sleep(1);
}
ob_end_flush();
?>
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