356 Stimmen

Was ist der Nutzen von ob_start() in php?

Ist ob_start() verwendet für output buffering damit die Kopfzeilen gepuffert und nicht an den Browser gesendet werden? Verstehe ich das richtig? Wenn nicht, warum sollten wir dann ob_start() ?

573voto

Riley Dutton Punkte 7335

Denken Sie an ob_start() "Fangen Sie an, sich alles zu merken, was normalerweise ausgegeben wird, aber machen Sie noch nichts damit."

Zum Beispiel:

ob_start();
echo("Hello there!"); //would normally get printed to the screen/output to browser
$output = ob_get_contents();
ob_end_clean();

Es gibt noch zwei weitere Funktionen, mit denen man sie normalerweise kombiniert: ob_get_contents() die im Grunde alles wiedergibt, was im Puffer "gespeichert" wurde, seit er mit ob_start() und dann ob_end_clean() o ob_flush() die entweder aufhört zu speichern und alles verwirft, was gespeichert wurde, oder aufhört zu speichern und alles auf einmal ausgibt.

201voto

JD Isaacks Punkte 53254

Ich verwende dies, um PHP mit viel HTML zu verlassen, aber es nicht zu rendern. Es erspart mir das Speichern als Zeichenfolge, die IDE Farbkodierung deaktiviert.

<?php
ob_start();
?>
<div>
    <span>text</span>
    <a href="#">link</a>
</div>
<?php
$content = ob_get_clean();
?>

Anstelle von:

<?php
$content = '<div>
    <span>text</span>
    <a href="#">link</a>
</div>';
?>

101voto

symcbean Punkte 46489

Die hier akzeptierte Antwort beschreibt, was ob_start() tut - und nicht, warum es verwendet wird (was die Frage war).

Wie an anderer Stelle ausgeführt ob_start() erzeugt einen Puffer, 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 ().

Zu den Gründen....

  1. Das Senden von HTML an den Browser in größeren Stücken bringt einen Leistungsvorteil durch einen geringeren Netzwerk-Overhead.

  2. Die Übergabe der Daten aus PHP heraus in größeren Paketen bringt einen Leistungs- und Kapazitätsvorteil, da die Anzahl der erforderlichen Kontextwechsel verringert wird.

  3. Die Übergabe größerer Datenpakete an mod_gzip/mod_deflate bringt einen Leistungsvorteil, da die Komprimierung effizienter sein kann.

  4. Die Pufferung der Ausgabe bedeutet, dass Sie die HTTP-Header später im Code noch bearbeiten können.

  5. ausdrücklich Spülung der Puffer nach der Ausgabe von [head]....[/head] kann es dem Browser ermöglichen, mit dem Marschalling anderer Ressourcen für die Seite zu beginnen, bevor der HTML-Stream abgeschlossen ist.

  6. Das Erfassen der Ausgabe in einem Puffer bedeutet, dass sie an andere Funktionen, wie z. B. E-Mail, weitergeleitet oder in eine Datei als zwischengespeicherte Darstellung des Inhalts kopiert werden kann.

35voto

Craige Punkte 2832

Sie haben es falsch verstanden. ob_start puffert nicht die Kopfzeilen, sondern den Inhalt. Verwendung von ob_start ermöglicht es Ihnen, den Inhalt in einem serverseitigen Puffer aufzubewahren, bis Sie bereit sind, ihn anzuzeigen.

Dies wird üblicherweise verwendet, damit Seiten Kopfzeilen senden können, nachdem sie bereits einen Inhalt "gesendet" haben (d. h., sie entscheiden sich auf halbem Weg durch das Rendern einer Seite für eine Umleitung).

16voto

hawx Punkte 1589

Ich bevorzuge:

ob_start();
echo("Hello there!");
$output = ob_get_clean(); //Get current buffer contents and delete current output buffer

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X