PHP-Grundlagen-Tutorial PHP-Seitenpufferungsmechanismus

巴扎黑
Freigeben: 2016-11-21 09:53:16
Original
1041 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 $ zuweisen info

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

fwrite($file,$info); zu 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 Inhaltsausgaben abrufen der PHP-Seite

$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); );

eval($code);

ob_end_clean ();

 } else {

echo „Fehler! Keine Ausgabe“;

exit();

return $contents; Mit der Funktion Output Control können Sie die Ausgabe von Daten im Skript frei steuern. 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();//Alle Inhalte an den Browser ausgeben

 ?>

Jeder, der die Funktion header() kennt, weiß, dass diese Funktion einen Dateiheader an den Browser sendet, 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, die eine sehr nützliche Funktion zum Aktualisieren des Browser-Cache hat. Nehmen wir ein Beispiel mit einem sehr offensichtlichen Betriebseffekt, um Flush zu veranschaulichen.

CODE< ;? php

 for($i = 1; $i <= 300;$i ) print(" ");

  // Die Struktur des Caches macht es Der Inhalt kann erst aus dem Browser ausgegeben werden, wenn er eine bestimmte Größe erreicht

// Mit anderen Worten, wenn der Cache-Inhalt eine bestimmte Größe nicht erreicht, wird er nicht ausgegeben, bevor das Programm ausgeführt wird vollendet. 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 <= 20;$j ) {

 echo $j.“

 flush (); //Dadurch wird der neu hinzugefügte Inhalt aus dem Cache entfernt und im Browser angezeigt

sleep(1); //Lassen Sie das Programm eine Sekunde lang „schlafen“, damit Sie es tun können Der Effekt ist deutlicher zu erkennen. PHP

Der neueste PHP-Chatroom von PHP2000 verwendet diese Technologie. Leider wird der Quellcode nicht offengelegt.

Hinweis: Wenn Sie ob_implicit_flush() hinzufügen. Wenn Sie am Anfang des Programms die absolute Aktualisierung aktivieren, können Sie „flush()“ nicht mehr im Programm verwenden. Der Vorteil besteht darin, die Effizienz zu verbessern:

Ich möchte zuerst einen meiner guten Freunde y10k zitieren. Beispiel:

Beispiel 3.

Zum Beispiel können Sie die Einstellungsinformationen des Servers und des Clients verwenden , aber diese Informationen sind je nach Client unterschiedlich. Was ist zu tun, wenn Sie die Ausgabe der Funktion phpinfo() speichern möchten? aber mit der Pufferkontrolle können wir es leicht lösen:

 CODE
ob_start() ; //Öffne den Puffer

phpinfo(); phpinfo function

$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); //Schreibe Informationen in info.txt

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

?> Mit der oben genannten Methode können Sie die PHPInfo-Informationen verschiedener Benutzer speichern. Dies war in der Vergangenheit leider nicht möglich , das Obige ist eine Methode zum Konvertieren einiger „Prozesse“ in „Funktionen“! Einige Leute fragen sich vielleicht: „Ist das alles? Gibt es natürlich noch eine andere Verwendung, zum Beispiel die PHP-Syntax?“ Das Hervorheben im Forum des Autors hängt damit zusammen (die Standard-Syntaxhervorhebungsfunktion von PHP gibt das Ergebnis direkt aus und kann das Ergebnis nicht speichern. Wenn es bei jedem Aufruf angezeigt wird, ist es eine Verschwendung von CPU. Das Forum des Autors ist Die Ergebnisse werden angezeigt von Die Syntaxhervorhebungsfunktion bleibt durch die Steuerung des Puffers erhalten. Wenn Sie interessiert sind, können Sie einen Blick auf http://www.zphp.com/bbs/ werfen. Vielleicht sind Sie jetzt interessiert Wenn Sie über ein gewisses Verständnis der Funktion von ob_start () verfügen, mag das obige Beispiel einfach erscheinen, aber tatsächlich beherrschen wir die wichtigsten Punkte der Verwendung von ob_start ().

 <1>. 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).

< 2>. Jetzt sollten Sie wissen, welche Vorteile Sie haben: Sie können Header, Setcookie und Session nach jedem Ausgabeinhalt verwenden. Dies ist eine großartige Funktion von ob_start. Sie können auch die Parameter von ob_start verwenden, um sie in den Cache zu schreiben 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 ...

<3>. Nach der Verarbeitung können wir 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:



 <2>. Verwenden Sie zur Implementierung die Funktion ob series.

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();/ /Puffer öffnen

 ?>

 Alle Ausgaben der PHP-Seite

 
 $fp =fopen("output00001.html", "w"); //Eine Datei erstellen, öffnen und zum Schreiben vorbereiten

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

 fclose($fp> ?>
 So lässt sich die sogenannte statische Vorlage einfach implementieren...

2. Ausgabe erfassen

Das obige Beispiel 4. ist der einfachste Fall. Sie können es auch ändern vor dem Schreiben. $content funktioniert...

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 die größte Essenz 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);

function CheckCanGzip(){ global$HTTP_ACCEPT_ENCODING;

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; $ENCODING){

print „nn“;

ob_end_clean(); >
if ($debug){

$s = ”

Notcompress length: .strlen($Contents);

$s .= ”

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

$Contents .= $s;

}

header(" Content- Codierung:$ENCODING“);

 print“x1fx8bx08×00x00×00x00×00“;$Size = strlen($Contents);

$Crc = crc32($Contents);

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

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

print $Contents;

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

exit; }else{

ob_end_flush(); 🎜 > Funktion zum Komprimieren des übertragenen Inhalts. Tests zeigen, dass sie sich auf Seiten über 10 KB auswirkt, 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