Wird ob_start()
für verwendet, output buffering
damit die Header gepuffert und nicht an den Browser gesendet werden? Mache ich hier Sinn? Wenn nicht, warum sollten wir dann verwenden ob_start()
?
php
output-buffering
Aditya Shukla
quelle
quelle
ob_get_contents()
mitob_get_clean()
und entfernen ,ob_end_clean()
da imob_get_clean()
Wesentlichen beide Funktionen ausführt. Referenz: php.net/manual/en/function.ob-get-clean.php (PHP 4> = 4.3.0, PHP 5)ob_start();
Ist dies korrekt? Was passiert, wenn es nicht aktiviert ist?ob_end_clean
damit repariert habe , funktioniert es wie ein Zauber! Vielen Dank @ Riley DuttonIch benutze dies, damit ich mit viel HTML aus PHP ausbrechen kann, es aber nicht rendern kann. Es erspart mir das Speichern als Zeichenfolge, die die IDE-Farbcodierung deaktiviert.
Anstatt:
quelle
ob_get_clean()
nicht verwendetob_end_clean()
Die hier akzeptierte Antwort beschreibt, was
ob_start()
funktioniert - nicht warum es verwendet wird (was die gestellte Frage war).Wie an anderer Stelle angegeben,
ob_start()
wird ein Puffer erstellt, in den die Ausgabe geschrieben wird.Aber niemand hat erwähnt, dass es möglich ist, mehrere Puffer in PHP zu stapeln. Siehe ob_get_level ().
Was das Warum betrifft ....
Das Senden von HTML an den Browser in größeren Blöcken bietet einen Leistungsvorteil durch einen geringeren Netzwerk-Overhead.
Das Übergeben der Daten aus PHP in größeren Blöcken bietet einen Leistungs- und Kapazitätsvorteil, indem die Anzahl der erforderlichen Kontextwechsel verringert wird
Das Übergeben größerer Datenblöcke an mod_gzip / mod_deflate bietet einen Leistungsvorteil, da die Komprimierung effizienter sein kann.
Durch das Puffern der Ausgabe können Sie die HTTP-Header später im Code noch bearbeiten
Durch explizites Leeren des Puffers nach der Ausgabe von [head] .... [/ head] kann der Browser beginnen, andere Ressourcen für die Seite zu sammeln, bevor der HTML-Stream abgeschlossen ist.
Das Erfassen der Ausgabe in einem Puffer bedeutet, dass sie zu anderen Funktionen wie E-Mail umgeleitet oder als zwischengespeicherte Darstellung des Inhalts in eine Datei kopiert werden kann
quelle
Du hast es rückwärts. ob_start puffert die Header nicht, sondern den Inhalt. Mit
ob_start
können Sie den Inhalt in einem serverseitigen Puffer aufbewahren, bis Sie bereit sind, ihn anzuzeigen.Dies wird üblicherweise verwendet, damit Seiten Header senden können, nachdem sie bereits Inhalte gesendet haben (dh sich entschieden haben, die Hälfte des Renderns einer Seite umzuleiten).
quelle
Ich bevorzuge:
quelle
Dies soll JD Isaaks Antwort weiter klären ...
Das Problem, auf das Sie häufig stoßen, ist, dass Sie PHP verwenden, um HTML von vielen verschiedenen PHP-Quellen auszugeben, und diese Quellen werden häufig, aus welchem Grund auch immer, auf unterschiedliche Weise ausgegeben.
Manchmal haben Sie wörtlichen HTML-Inhalt, den Sie direkt an den Browser ausgeben möchten. In anderen Fällen wird die Ausgabe dynamisch erstellt (serverseitig).
Der dynamische Inhalt wird immer (?) Eine Zeichenfolge sein. Jetzt müssen Sie dieses stringifizierte dynamische HTML mit jedem wörtlichen, direkt anzuzeigenden HTML ... in einer aussagekräftigen HTML-Knotenstruktur kombinieren.
Dies zwingt den Entwickler normalerweise dazu, den gesamten direkt anzuzeigenden Inhalt in eine Zeichenfolge zu packen (wie JD Isaak besprochen hat), damit er in Verbindung mit dem dynamischen HTML-Code ordnungsgemäß bereitgestellt / eingefügt werden kann ... auch wenn Sie dies nicht wirklich tun will es verpackt.
Mit den Methoden ob _ ## können Sie jedoch das Durcheinander von Zeichenfolgen vermeiden. Der Literalinhalt wird stattdessen in den Puffer ausgegeben. Dann wird in einem einfachen Schritt der gesamte Inhalt des Puffers (Ihr gesamtes Literal-HTML) in Ihre Dynamic-HTML-Zeichenfolge verkettet.
(Mein Beispiel zeigt, wie Literal-HTML in den Puffer ausgegeben wird, der dann zu einer HTML-Zeichenfolge hinzugefügt wird. Sehen Sie sich auch das Beispiel von JD Isaaks an, um zu sehen, wie HTML-Zeichenfolgen umbrochen werden.)
quelle
Diese Funktion ist nicht nur für Header. Damit kann man viele interessante Sachen machen. Beispiel: Sie können Ihre Seite in Abschnitte aufteilen und wie folgt verwenden:
Sie können die hier generierte Ausgabe erfassen und an zwei völlig unterschiedlichen Stellen in Ihrem Layout hinzufügen.
quelle
Folgende Dinge werden in den vorhandenen Antworten nicht erwähnt: Konfiguration der Puffergröße HTTP-Header und Verschachtelung.
Konfiguration der Puffergröße für ob_start:
Der obige Code verbessert die Serverleistung, da PHP größere Datenmengen sendet, z. B. 4 KB (ohne ob_start-Aufruf sendet PHP jedes Echo an den Browser).
Wenn Sie mit dem Puffern ohne die Blockgröße beginnen (dh ein einfaches ob_start ()), wird die Seite am Ende des Skripts einmal gesendet.
Die Ausgabepufferung wirkt sich nicht auf die HTTP-Header aus, sie werden auf unterschiedliche Weise verarbeitet. Aufgrund der Pufferung können Sie die Header jedoch auch nach dem Senden der Ausgabe senden, da sie sich noch im Puffer befindet.
Schön erklärt hier: https://phpfashion.com/everything-about-output-buffering-in-php
quelle
Nein, du liegst falsch, aber die Richtung passt;)
Die Ausgabepufferung puffert die Ausgabe eines Skripts. Das ist (kurz gesagt) alles nach
echo
oderprint
. Die Sache mit den Headern ist, dass sie nur gesendet werden können, wenn sie nicht bereits gesendet wurden. Aber HTTP sagt, dass Header die allerersten der Übertragung sind. Wenn Sie also zum ersten Mal (in einer Anfrage) etwas ausgeben, werden die Header gesendet und Sie können keine anderen Header festlegen.quelle