Heim > Backend-Entwicklung > PHP-Tutorial > PHP-Grundlagen-Tutorial PHP-Seitenpufferungsmechanismus

PHP-Grundlagen-Tutorial PHP-Seitenpufferungsmechanismus

巴扎黑
Freigeben: 2016-11-07 11:51:18
Original
1013 Leute haben es durchsucht

PHP verfügt über viele Mechanismen und Funktionen. Wenn es wiederholt verwendet wird, treten bereits bei einfacher Anwendung magische Effekte auf. Band of Brothers PHP-Schulung

Hier ist die ob_start()-Funktion.

Die Funktion ob_start() wird zum Öffnen des Puffers verwendet. Wenn beispielsweise vor der Funktion header() eine Ausgabe erfolgt, einschließlich Wagenrückläufen, Leerzeichen und Zeilenvorschüben, wird der Fehler „Header“ angezeigt hatte alles bereit send by". In diesem Fall können Sie ob_start() verwenden, um den Puffer zu öffnen. Der Datenblock des PHP-Codes und die Ausgabe von echo() gelangen in den Puffer und werden nicht sofort ausgegeben. Das Öffnen des Puffers hat natürlich funktioniert Viele Funktionen, nutzen Sie einfach Ihre Fantasie. Die folgenden vier Punkte können zusammengefasst werden:

1. Wird vor header() verwendet

ob_start(); //Open buffer

echo ”Hallon”; //Ausgabe

header(“location: index.php”);//Umleiten des Browsers zu index.php

ob_end_flush();//Geben Sie den gesamten Inhalt aus Browser

 ?>

 2 Die Funktion .phpinfo() kann Client- und Serverinformationen abrufen, aber die Puffermethode ist die beste Wahl, um Clientinformationen zu speichern

 ob_start( ); //Öffne den Puffer

phpinfo(); //Verwende die phpinfo-Funktion

$info=ob_get_contents(); //Den Inhalt des Puffers abrufen und ihn $info zuweisen

$file=fopen('info. txt','w'); //Öffne die Datei info.txt

fwrite($file,$info); info.txt

fclose($file) ; //Schließe die Datei info.txt

 ?>

3. Statische Seitentechnologie

ob_start( );//Puffer öffnen

 ?>

 Alle Ausgaben der PHP-Seite

 $content =ob_get_contents();//Alle Inhalte der PHP-Seitenausgabe abrufen

 $fp =fopen("output00001.html", "w"); //Erstelle eine Datei und öffne sie, bereit zum Schreiben

 fwrite($fp, $content); den gesamten Inhalt der PHP-Seite in „output00001.html“ und dann...

 fclose($fp); $code) {

ob_start();

eval ($code);

$contents =ob_get_contents();

ob_end_clean(); else {

echo „Fehler! Keine Ausgabe“ ;

exit();

return $contents; die Ausgabe von Daten im Skript. Dies ist sehr nützlich, insbesondere wenn Sie den Dateiheader nach der Datenausgabe ausgeben möchten. Die Ausgabesteuerungsfunktion hat keinen Einfluss auf die mit header() oder setcookie() gesendeten Datei-Header-Informationen, sondern nur auf die Datenblöcke ähnlich echo() und PHP-Code.

Lassen Sie uns ein einfaches Beispiel geben, um Ihnen einen allgemeinen Eindruck von OutputControl zu vermitteln:

Beispiel 1.

CODE
ob_start (); //Puffer öffnen

echo „Hellon“; //Ausgabe

header(“location:index.php“); //Den Browser auf index.php umleiten

ob_end_flush();//Geben Sie den gesamten Inhalt an den Browser aus

 ?>

Jeder, der die Funktion header() kennt, weiß, dass diese Funktion einen Absatz sendet. Der Dateiheader wird an den gesendet Wenn jedoch vor der Verwendung dieser Funktion eine Ausgabe erfolgt (einschließlich leerer Ausgaben wie Leerzeichen, Wagenrückläufe und Zeilenvorschübe), wird ein Fehler angezeigt. Wenn wir ob_start() in der ersten Zeile entfernen und dieses Programm erneut ausführen, erhalten wir eine Fehlermeldung: „Header had all ready send by“ Bei ob_start gibt es jedoch keine Fehlermeldung, da der Puffer leer ist Wenn der Bereich aktiviert ist, werden die Zeichen nach dem Echo nicht an den Browser ausgegeben, sondern bleiben auf dem Server erhalten. Sie werden erst ausgegeben, wenn Sie Flush oder ob_end_flush verwenden, sodass keine Fehler bei der Ausgabe des Dateiheaders auftreten
1. Einführung zu verwandten Funktionen:

1. Leeren: Aktualisieren Sie den Inhalt des Puffers und geben Sie ihn aus.
Funktionsformat: Flush()

Beschreibung: Diese Funktion wird häufig verwendet und ist sehr effizient.

2. ob_start: Öffne den Ausgabepuffer

Funktionsformat: void ob_start(void)

Beschreibung: Wenn der Puffer aktiviert ist, werden alle Nicht-Datei-Header vom PHP Programm Keine der Informationen wird gesendet, sondern in einem internen Puffer gespeichert. Um den Inhalt des Puffers auszugeben, können Sie ob_end_flush() oder Flush() verwenden, um den Inhalt des Puffers auszugeben.

 3. ob_get_contents: Gibt den Inhalt des internen Puffers zurück.

Verwendung: stringob_get_contents(void)

Beschreibung: Diese Funktion gibt den Inhalt des aktuellen Puffers zurück. Wenn der Ausgabepuffer nicht aktiviert ist, wird FALSE zurückgegeben.

 4. ob_get_length: Gibt die Länge des internen Puffers zurück.

Verwendung: intob_get_length(void)

Beschreibung: Diese Funktion gibt die Länge im aktuellen Puffer zurück, genau wie ob_get_contents, wenn der Ausgabepuffer nicht aktiviert ist. gibt dann FALSE zurück.

5. ob_end_flush: Senden Sie den Inhalt des internen Puffers an den Browser und schließen Sie den Ausgabepuffer.

Verwendung: voidob_end_flush(void)

Beschreibung: Diese Funktion sendet den Inhalt des Ausgabepuffers (falls vorhanden).

6. ob_end_clean: Löschen Sie den Inhalt des internen Puffers und schließen Sie den internen Puffer

Verwendungsmethode: voidob_end_clean(void)

Hinweis: Diese Funktion gibt den internen Puffer nicht aus Pufferbereichsinhalt, aber löschen!

7. ob_implicit_flush: Absolute Aktualisierung ein- oder ausschalten

Verwendungsmethode: void ob_implicit_flush([int flag])

Beschreibung: Verwenden Jeder, der Perl verwendet hat, kennt die Bedeutung von $|=x. Diese Zeichenfolge kann den Puffer öffnen/schließen, und die Funktion ob_implicit_flush ist die gleiche. Standardmäßig wird der Puffer nach dem Einschalten der absoluten Ausgabe geschlossen wird direkt an Browser gesendet, die nicht mehr Flush() aufrufen müssen

2. Detailliertes Verständnis:

1. Über die Flush-Funktion:

Diese Funktion erschien in PHP3 und ist eine sehr effiziente Funktion zum Aktualisieren des Browser-Cache. Nehmen wir ein Beispiel mit einem sehr offensichtlichen Laufeffekt, um das Flush zu veranschaulichen >CODE php

 for($i = 1; $i
// Mit anderen Worten, wenn der Cache-Inhalt eine bestimmte Größe nicht erreicht, wird er nicht vor dem Programm ausgegeben hingerichtet. Nach
 // Nach dem Testen habe ich festgestellt, dass die Untergrenze dieser Größe 256 Zeichen lang ist. Dies bedeutet, dass die vom Cache empfangenen Inhalte in Zukunft kontinuierlich gesendet werden
//.

 For($j = 1; $j
 echo $j.“

 flush( ); //Dadurch wird der neue Inhalt aus dem Cache herausgedrückt und im Browser angezeigt

sleep(1); //Lassen Sie das Programm eine Sekunde lang „schlafen“, damit Sie es sehen können Wirkung: Klarer sehen. 🎜> Der neueste PHP-Chatroom von PHP2000 verwendet diese Technologie. Leider wird der Quellcode nicht offengelegt Um die absolute Aktualisierung zu aktivieren, können Sie Flush() nicht mehr im Programm verwenden. Der Vorteil davon ist: verbesserte Effizienz:

Ich würde Ich möchte zunächst ein Beispiel meines guten Freundes y10k zitieren:

Beispiel 3.

Zum Beispiel können Sie die Einstellungsinformationen des Servers und des Clients verwenden, diese Informationen sind jedoch je nach Fall unterschiedlich Was ist, wenn Sie die Ausgabe der Funktion phpinfo() speichern möchten? Bevor es keine Puffersteuerung gab, kann man sagen, dass es überhaupt keine Möglichkeit gab, aber mit der Puffersteuerung können wir das Problem leicht lösen:

 CODE
ob_start(); / /Öffnen Sie den Puffer

phpinfo(); //Verwenden Sie die phpinfo-Funktion

$info= ob_get_contents(); //Den Inhalt des Puffers abrufen und $info

zuweisen $file=fopen('info.txt','w'); //Öffne die Datei info.txt

fwrite($file,$info); //Informationen in info.txt schreiben

 fclose($file); //Schließe die Datei info.txt

 ?> 🎜>
Mit der oben genannten Methode können Sie die PHPInfo-Informationen verschiedener Benutzer speichern, was in der Vergangenheit wahrscheinlich nicht möglich war. Tatsächlich handelt es sich bei der oben genannten Methode um eine Methode zum Konvertieren einiger „Prozesse“. in „Funktionen“!

Jemand könnte fragen: „Ist das genau so? Gibt es natürlich noch andere Verwendungsmöglichkeiten?“ (Die standardmäßige Syntaxhervorhebungsfunktion von PHP wird direkt ausgegeben und kann das Ergebnis nicht speichern. Wenn es bei jedem Aufruf angezeigt wird, ist dies eine Verschwendung von CPU. Das Forum des Autors fügt Syntaxhervorhebung hinzu. Die von der Bright-Funktion angezeigten Ergebnisse werden von beibehalten Wenn Sie interessiert sind, können Sie einen Blick auf http://www.zphp.com/bbs/ werfen.

Vielleicht interessieren Sie sich jetzt für ob_start(), von dem ich ein gewisses Verständnis habe Die Funktion scheint einfach zu sein, aber tatsächlich habe ich die wichtigsten Punkte bei der Verwendung von ob_start() gemeistert.
 
Verwenden Sie ob_start, um den Cache des Browsers zu öffnen. Dadurch wird sichergestellt, dass der Inhalt des Caches nicht ausgegeben wird, bevor Sie Flush(), ob_end_flush() aufrufen (oder das Programm ausgeführt wird).

Jetzt sollten Sie die Vorteile kennen, die Sie haben: Sie können Header, Setcookie und Session nach jedem Ausgabeinhalt verwenden, was eine großartige Funktion von ob_start ist. Sie können auch die Parameter von ob_start verwenden, nachdem der Cache geschrieben wurde Führen Sie dann automatisch den Befehl aus, z. B. ob_start("ob_gzhandler"); und unsere am häufigsten verwendete Methode besteht darin, ob_get_contents() zu verwenden, um den Inhalt im Cache abzurufen und ihn dann zu verarbeiten ...

 . Wenn die Verarbeitung abgeschlossen ist, können wir schließlich verschiedene Methoden zur Ausgabe verwenden: Flush(), ob_end_flush() und die automatische Ausgabe nach der Ausführung des Programms. Wenn Sie ob_get_contents() verwenden, müssen Sie die Ausgabemethode natürlich selbst steuern.

Komm, lass uns sehen, was wir mit den ob-Serienfunktionen machen können...

1. Statische Template-Technologie

Einführung: Die sogenannte statische Template-Technologie ist dazu da Verwenden Sie eine bestimmte Methode, sodass der Benutzer auf der Clientseite die von PHP generierte HTML-Seite erhält. Wenn diese HTML-Seite nicht mehr aktualisiert wird, ruft das Programm PHP und zugehörige Datenbanken nicht mehr auf, wenn ein anderer Benutzer diese Seite erneut durchsucht. Für einige Websites mit einer großen Informationsmenge, z. B. Sina, 163, Sohu. Die Vorteile einer solchen Technologie sind enorm.

Ich kenne zwei Möglichkeiten, eine statische Ausgabe zu erreichen:

Implementiert durch eine Klasse namens template.inc.php von phplib, modifiziert durch y10k.

  Implementiert mit ob-Serienfunktionen.

Was die erste Methode betrifft, werde ich nicht näher darauf eingehen, da sie nicht Gegenstand dieses Artikels ist.

Schauen wir uns nun die konkrete Implementierung der zweiten Methode an:

Beispiel 4.

CODE
ob_start();/ /Öffnen Sie den Puffer

 ?>

 Alle Ausgaben der PHP-Seite

   

 $content =ob_get_contents();//Holen Sie sich die PHP-Seite Seitenausgabe Der gesamte Inhalt von

$fp =fopen("output00001.html", "w"); //Erstelle eine Datei und öffne sie, bereit zum Schreiben

fwrite($fp , $content ); //Schreibe den gesamten Inhalt der PHP-Seite in „output00001.html“ und dann...

 fclose($fp> ?>

 Auf diese Weise lassen sich die sogenannten statischen Templates einfach implementieren...

2. Ausgabe erfassen

Das obige Beispiel 4. ist der einfachste Fall. Sie können $content auch vorher ändern Schreiben. Vorgang...

Sie können versuchen, einige Schlüsselwörter zu erfassen und sie dann erneut zu verarbeiten, z. B. die in Beispiel 3 beschriebene PHP-Syntaxhervorhebung. Persönlich denke ich, dass diese Funktion der beste Teil dieser Funktion ist. Sie kann eine Vielzahl von Problemen lösen, erfordert jedoch genügend Vorstellungskraft ...

 Beispiel 5.

CODE
Funktion run_code($code) {  

If($code) {

eval($code); >
$contents =ob_get_contents();

ob_end_clean();

}else {

echo "Fehler! Keine Ausgabe"; exit();

 }

return $contents;

 }

Das obige Beispiel ist nicht sehr nützlich, aber es ist sehr typisch für $code Es handelt sich um eine Ausgabeseite mit Variablen. In diesem Beispiel wird eval verwendet, um die Variablen in $code zu ersetzen. Anschließend werden die Ausgabeergebnisse erfasst und erneut verarbeitet ...

 Beispiel 6. Geschwindigkeit ​up-Übertragung

CODE

ob_implicit_flush(0); 🎜>
if (headers_sent() ||connection_timeout() || Connection_aborted()){

return 0;

} , 'x-gzip') !== false) return ”x-gzip";  

 if(strpos( $HTTP_ACCEPT_ENCODING,'gzip') !== false) return „gzip“;

return 0; if ($ENCODING){

print „n
n“;

$Contents =ob_get_contents();

ob_end_clean();

if ($debug){

 $s = ”
Notcompress length: ”. strlen($Contents);

 $s .= ”

Komprimierte Länge: .strlen(gzcompress($Contents,$level));

$Contents .= $s;

} );

print”x1fx8bx08×00x00×00x00×00“;

$ Inhalt =gzcompress($Contents,$level);

 $Contents = substr($Contents,0, strlen($Contents) – 4);

 print $Contents;

print pack('V',$Crc); 🎜>
print pack('V',$Size);

Exit;

ob_end_flush();

Exit ;

 }

 }

 ?>

  Dies ist ein sehr alter Code von catoc, den ich auf weblogs.com gesehen habe Tests zeigen, dass der Effekt bei Seiten über 10 KB auftritt, und je größer die Seite, desto offensichtlicher ist der Effekt ...

Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage