Heim  >  Artikel  >  Backend-Entwicklung  >  Zusammenfassung häufig verwendeter Funktionen in PHP-OB-Serienfunktionen

Zusammenfassung häufig verwendeter Funktionen in PHP-OB-Serienfunktionen

WBOY
WBOYOriginal
2016-07-30 13:31:47890Durchsuche

Häufig verwendete Funktionen in den ob-Serienfunktionen


ob_start(); //Öffnen Sie einen Ausgabepuffer. Alle Ausgabeinformationen werden nicht mehr direkt an den Browser gesendet, sondern in gespeichert die Ausgabe im Puffer.

ob_clean(); //Inhalt des internen Puffers löschen, 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_clean(); //Den Inhalt des internen Puffers zurückgeben und den Puffer schließen. Entspricht der Ausführung von ob_get_contents() und ob_end_clean()
ob_flush();                                                                  ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​sendet den Inhalt des Puffers und löscht den Inhalt des Puffers, ohne den Puffer zu schließen.
ob_end_flush(); //Sende den Inhalt des internen Puffers an den Browser, lösche den Inhalt des Puffers und schließe den Puffer.
ob_get_flush(); // Den Inhalt des internen Puffers zurückgeben, den Puffer schließen und dann den Inhalt des Puffers freigeben. Entspricht ob_end_flush() und gibt den Pufferinhalt zurück.
flush(); // Den von ob_flush freigegebenen Inhalt und den nicht im PHP-Puffer enthaltenen Inhalt an den Browser ausgeben und ihn ausgeben.

ob_get_contents(); //Den Inhalt des Puffers ohne Ausgabe zurückgeben.
ob_get_length(); //Gibt die Länge des internen Puffers zurück. Wenn der Puffer nicht aktiviert ist, gibt diese Funktion FALSE zurück.
ob_get_level(); //Die Verschachtelungsebene des Ausgabepuffermechanismus zurückgeben.
ob_get_status(); //Status der Ausgabepuffer abrufen.

ob_implicit_flush(); //Absolut einschalten oder off Refresh, der Standardwert ist off. Nach dem Öffnen von ob_implicit_flush(true) bedeutet die sogenannte absolute Aktualisierung, dass die Ausgabe direkt an den Browser gesendet wird, ohne dass Flush aufgerufen werden muss () oder warten. Ausgabe nur, wenn das Skript endet.

ob_gzhandler //ob_start Rückruffunktion, verwendet gzip, um den Inhalt des Puffers zu komprimieren.
ob_list_handlers //Alle verwendeten Ausgabehandler auflisten
output_add_rewrite_var //URL-Rewriter-Werte hinzufügen
output_reset_rewrite_vars //URL-Rewriter-Werte zurücksetzen

Das Verhalten dieser Funktionen wird durch die php_ini-Einstellungen beeinflusst:
output_buffering // Wenn dieser Wert aktiviert ist, wird die Ausgabesteuerung in allen Skripten verwendet. Wenn der Wert eine Zahl ist, stellt er die maximale Byte-Grenze des Puffers dar. Wenn der zwischengespeicherte Inhalt die Obergrenze erreicht Der Inhalt des aktuellen Puffers wird automatisch an den Browser ausgegeben.
output_handler //Diese Option kann alle Ausgaben des Skripts an eine Funktion umleiten. Wenn beispielsweise „output_handler“ auf „mb_output_handler()“ gesetzt ist, wird die Kodierung des Zeichens auf die angegebene Kodierung geändert. Alle eingestellten Verarbeitungsfunktionen übernehmen automatisch die Ausgabepufferung.
implicit_flush // Die Funktion ist dieselbe wie ob_implicit_flush, der Standardwert ist Aus.

Verwenden Sie PHPs ob_start();
Kontrollieren Sie Ihren Browser-Cache


Mit der Output Control-Funktion 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 zunächst ein einfaches Beispiel geben, um allen einen allgemeinen Eindruck von Output Control zu vermitteln:
Beispiel 1.

ProgrammcodeProgrammcode
ob_start( ); Open buffer
echo "Hellon"; //Output
header("location:index.php"); //Den Browser auf index.php umleiten
ob_end_flush(); der Browser
?>


Jeder, der die Funktion header() kennt, weiß, dass diese Funktion einen Dateiheader an den Browser sendet, aber wenn es eine Ausgabe gibt (einschließlich leerer Ausgabe, (z. B. Leerzeichen, Wagenrückläufe und Zeilenvorschübe), bevor Sie diese Funktion verwenden, wird eine Fehlermeldung angezeigt. Wenn wir ob_start() in der ersten Zeile entfernen und dann dieses Programm ausführen, erhalten wir eine Fehlermeldung: „Header had all ready send by“! Bei ob_start erfolgt jedoch keine Fehlermeldung. Der Grund dafür ist, dass die Zeichen nach dem Echo nicht an den Browser ausgegeben werden, sondern auf dem Server erhalten bleiben. Sie werden erst ausgegeben, wenn Sie Flush verwenden oder ob_end_flush, damit keine Datei-Header-Ausgabefehler auftreten!


1. Einführung in verwandte Funktionen:
1. Flush: 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: Öffnen Sie den Ausgabepuffer
Funktionsformat: void ob_start(void)
Beschreibung: Wenn der Puffer aktiviert ist, werden alle Nicht-Datei-Header-Informationen vom PHP-Programm nicht gesendet, sondern gespeichert . im internen Puffer. 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: string ob_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: int ob_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: void ob_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: void ob_end_clean(void)
Beschreibung: Diese Funktion gibt den Inhalt des internen Puffers nicht aus, sondern löscht ihn!
7. ob_implicit_flush: Absolute Aktualisierung ein- oder ausschalten
Verwendungsmethode: void ob_implicit_flush ([int flag])
Erklärung: Jeder, der Perl verwendet hat, kennt die Bedeutung von $|=x, diese Zeichenfolge kann sein aktiviert /Schließen Sie den Puffer, und die Funktion ob_implicit_flush ist die gleiche. Standardmäßig wird der Puffer geschlossen. Nach dem Aktivieren der absoluten Ausgabe wird jede Skriptausgabe direkt an den Browser gesendet, und es ist nicht erforderlich, Flush aufzurufen. )


2. Über die Flush-Funktion:

Es ist eine sehr effiziente Funktion Nützliche Funktion, die darin besteht, den Browser-Cache zu aktualisieren.

Beispiel 2.

ProgrammcodeProgrammcode

for($i = 1; $i < ;= 300; $i++ ) print(" ");
// Dieser Satz ist sehr kritisch. Die Struktur des Caches macht seinen Inhalt erst, wenn er eine bestimmte Größe erreicht es kann vom Browser ausgegeben werden
// Mit anderen Worten, wenn der Cache-Inhalt eine bestimmte Größe nicht erreicht, wird er nicht ausgegeben, bevor die Programmausführung abgeschlossen ist. Nach
// Tests habe ich festgestellt, dass die Untergrenze dieser Größe bei 256 Zeichen liegt. Dies bedeutet, dass der Inhalt, den der Cache in Zukunft empfängt,
// kontinuierlich gesendet wird.
For($j = 1; $j <= 20; $j++) {
echo $j."
";
flush(); //Dies fügt dem Cache neue Elemente hinzu Der Inhalt wird herausgedrückt und im Browser angezeigt
sleep(1); //Lassen Sie das Programm eine Sekunde lang „schlafen“, damit Sie den Effekt deutlicher sehen können
}
?>

Hinweis: Wenn Sie ob_implicit_flush() am Anfang des Programms hinzufügen, um die absolute Aktualisierung zu aktivieren, können Sie Flush() nicht mehr im Programm verwenden. Der Vorteil davon ist: Verbesserung der Effizienz!

2. Zu den ob-Serienfunktionen:

Ich möchte zuerst ein Beispiel von meinem guten Freund y10k zitieren:

Beispiel 3.

Zum Beispiel können Sie die verwenden Informationen zu Server- und Client-Einstellungen, diese Informationen variieren jedoch je nach Client. 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 es leicht lösen:

ProgrammcodeProgrammcode

ob_start(); / /Öffnen Sie den Puffer
phpinfo(); //Verwenden Sie die phpinfo-Funktion
$info=ob_get_contents(); //Holen Sie sich den Inhalt des Puffers und weisen Sie ihn $info zu
$file=fopen( 'info.txt ','w'); //Öffne die Datei info.txt
fwrite($file,$info); //Schreibe Informationen in info.txt($file); Schließen Sie die Dateiinfo.
?>

Mit der oben genannten Methode können Sie die PHPInfo-Informationen verschiedener Benutzer speichern. Tatsächlich ist das Obige eine Methode, um einige „Prozesse“ in „Funktionen“ umzuwandeln!
Einige Leute fragen sich vielleicht: „Ist das einfach so? Gibt es noch andere Verwendungsmöglichkeiten?“ Natürlich hängt zum Beispiel die PHP-Syntaxhervorhebung im Forum des Autors damit zusammen (die Standard-Syntaxhervorhebungsfunktion von PHP wird es tun). Wenn das Ergebnis direkt ausgegeben wird, kann es nicht bei jedem Aufruf gespeichert werden. Das Forum des Autors behält das von der Syntaxhervorhebungsfunktion angezeigte Ergebnis bei. Sie können einen Blick darauf werfen

Vielleicht haben Sie jetzt ein gewisses Verständnis für die Funktion von ob_start(). Das obige Beispiel scheint einfach, aber tatsächlich beherrschen Sie 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 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 im Cache verwenden geschrieben, wird der Befehl automatisch ausgeführt, z. B. ob_start( "ob_gzhandler"); und unser gebräuchlichster Ansatz besteht darin, ob_get_contents() zu verwenden, um den Inhalt des Caches 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 der ob-Funktionsreihe machen können...

1. Statische Template-Technologie

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

Ich kenne zwei Möglichkeiten, eine statische Ausgabe zu erreichen:
<1>. Implementiert durch eine Klasse namens template.inc.php von phplib, modifiziert durch y10k.
<2>. Verwenden Sie zur Implementierung ob-Serienfunktionen.
Da es sich bei der ersten Methode nicht um das Thema handelt, das in diesem Artikel untersucht werden soll, werde ich nicht näher darauf eingehen.
Werfen wir nun einen Blick auf die spezifische Implementierung der zweiten Methode:
Beispiel 4.


ProgrammcodeProgrammcode
ob_start(); /Puffer öffnen
?>
Alle Ausgaben der PHP-Seite
$content = ob_get_contents();//Gesamten Inhalt der PHP-Seitenausgabe abrufen
$fp = fopen("output00001.html", "w"); //Eine Datei erstellen und zum Schreiben öffnen
fwrite($fp, $content); //Alle Inhalte der PHP-Seite in Output00001 schreiben .html , und dann...
fclose($fp);
?>


Auf diese Weise lässt sich das sogenannte statische Template einfach implementieren...

II, Ausgabe erfassen

Das obige Beispiel 4 ist der einfachste Fall. Sie können $content auch vor dem Schreiben bearbeiten...

Sie können versuchen, einige Schlüsselwörter zu erfassen, und dann Gehe zu Es führt eine Neuverarbeitung durch, z. B. die PHP-Syntaxhervorhebung, wie in Beispiel 3 beschrieben. 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.

Programmcode Programmcode
Funktion run_code($code) {
If($code) {
ob_start();
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 typisch, dass $code selbst eine Ausgabeseite ist, die Variablen enthält, und dieses Beispiel verwendet eval, um die Variablen in $code zu ersetzen, und dann Erfassen Sie die Ausgabeergebnisse erneut und verarbeiten Sie sie erneut ...

2. Ausgabe-Cache-Handle ob_gzhandler


PHP4.0.4 verfügt über ein neues Ausgabe-Cache-Handle ob_gzhandler, das mit dem vorherigen verwandt ist Klassen sind ähnlich, aber ihre Verwendung ist unterschiedlich. Der folgende Inhalt sollte zur php.ini hinzugefügt werden, wenn ob_gzhandler verwendet wird:


output_handler = ob_gzhandler;


Diese Codezeile veranlasst PHP, das Ausgabe-Caching zu aktivieren und komprimiert alles, was es aussendet.

Wenn Sie diese Codezeile aus irgendeinem Grund nicht zur php.ini hinzufügen möchten, können Sie das Standardserververhalten (nicht komprimiert) auch über die .htaccess-Datei in dem Verzeichnis ändern, in dem sich die PHP-Quelldatei befindet . Die Syntax lautet wie folgt:


php_value output_handler ob_gzhandler


Oder rufen Sie es wie folgt aus dem PHP-Code auf:


ob_start("ob_gzhandler");


Die Methode der Verwendung von Ausgabe-Cache-Handles ist in der Tat sehr effektiv und stellt keine besondere Belastung für den Server dar. Es muss jedoch beachtet werden, dass Netscape Communicator komprimierte Grafiken nur unzureichend unterstützt. Wenn Sie also nicht sicherstellen können, dass alle Benutzer den IE-Browser verwenden, sollten Sie komprimierte JPEG- und GIF-Grafiken deaktivieren. Im Allgemeinen funktioniert diese Komprimierung für alle anderen Dateien. Es wird jedoch empfohlen, sie für jeden Browser separat zu testen, insbesondere wenn Sie spezielle Plug-Ins oder Datenbetrachter verwenden. Dies ist besonders wichtig.
Hinweise:
1. Die Standardausgabepufferung einiger Webserver beträgt 4069 Zeichen oder mehr, d , verwenden Sie am besten ob_flush() Vor der Funktion steht die folgende Anweisung:

Der Code lautet wie folgt:

print str_repeat("", 4096); //Um das sicherzustellen Der Wert „output_buffering“ ist erreicht


2. Die ob_*-Funktionsreihe betreibt den Ausgabepuffer von PHP selbst, sodass ob_flush nur den PHP-eigenen Puffer aktualisiert, während „flush“ den Apache-Puffer aktualisiert. Daher ist die richtige Reihenfolge für die Verwendung der beiden: zuerst ob_flush, dann Flush. ob_flush gibt Daten aus dem PHP-Puffer frei und Flush sendet alle Daten in/aus dem Puffer an den Browser.
3. Denken Sie nicht fälschlicherweise, dass nach der Verwendung von ob_start() das Echo/Print und andere Ausgaben des Skripts nie im Browser angezeigt werden. Denn nach Beendigung des PHP-Skripts wird der Puffer automatisch aktualisiert und der Inhalt ausgegeben.

Das Obige hat eine Zusammenfassung häufig verwendeter Funktionen in der PHP-Ob-Reihe vorgestellt, einschließlich relevanter Inhalte. Ich hoffe, dass es für Freunde hilfreich sein wird, die an PHP-Tutorials interessiert sind.

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