ob_start und ob_end_flush

Subwoover

Erfahrenes Mitglied
Jo ich hab seit längerem ob_start in meiner _head.php aber keine ahnung warum :)

und da hab ich halt mal in der manual nachgelesen und bin ehrlich gesagt auch nicht schlauer geworden...
irgendwas mit "Diese Funktion schaltet die Pufferung von Ausgaben ein."

Nur sagt mir das ned viel, sorry ich kann mir drunter nicht viel vorstellen? Wie kann man sich das ganze denn vorstellen?
Was bringen mir die befehle ob_start und ob_end_flush?

Und wie kann ich damit sinnvoll arbeiten?

grüsse, suB
 
ob_start
Diese Funktion schaltet die Pufferung von Ausgaben ein. Solange die Ausgabe-Pufferung aktiv ist, erfolgt keine Ausgabe bei der Skript-Ausführung. Statt dessen werden alle Ausgaben in einem internen Puffer gespeichert.

Der Inhalt diese internen Puffers kann in eine String-Variable kopiert werden (per ob_get_contents()). Die Ausgabe erfolgt erst bei Aufruf von ob_end_flush() und sobald der Puffer-Inhalt per ob_end_clean() verworfen wird.



ob_end_flush
Der Inhalt des Ausgabe-Puffers (sofern vorhanden) wird abgeschickt und die Pufferung der Ausgabe deaktiviert. Falls sie mit dem Puffer-Inhalt weiter arbeiten möchten, müssen sie diesen erst per ob_get_contents() zwischen speichern bevor sie ob_end_flush() aufrufen, da dadurch der Puffer geleert wird.




Ist doch eigentlich recht deutlich beschrieben was die Funktionen bewirken oder?Frägt sich nur wie die da plötzlich in deinen Code rein kommen :-)
 
ja und was kann ich nun damit bewirken mit den befehlen?
ich glaub ich hab sie mal aus einem grund von cookies reingegeben...

irgendwie wurde mein header schon aufgerufen und da hat diese funktion geholfen oder so :)
aber was kann ich damit erreichen? effektiv...
 
Effektiv fällt mir da auch kein Beispiel ein.
Du kannst halt die Ausgabe zurückhalten und das dann später ausgeben.Vielleicht gäbe das dann eine Möglichkeit das du es nach der Pufferung nochmal filterst oder so, aber was konkretes fällt mir nicht ein!
 
deiner erklärung nach sollte das:
PHP:
<?php
$str_1 = "foobar rockz<hr>";
$str_2 = "aso is das";
ob_start();
echo $str_1;
ob_flush();
?>

foobar rock<hr> ausgeben...

und das:
PHP:
<?php
$str_1 = "foobar rockz<hr>";
$str_2 = "aso is das";
ob_start();
echo $str_1;
?>

sollte garnichts ausgeben... in beiden fällen gibt es mir den string aber aus... hab ich da was falsch verstanden?

greetz
 
ob_start() und ob_end_flush() kommt eigentlich am meisten dann zum einsatz, wenn man die ausgabe bestimmter dinge verzögern möchte.

zum beispiel:
PHP:
<?php
highlight_file( __FILE__ );
?>

gibt sofort (!) den hervorgehobenen Text aus. Die Möglichkeit, das noch irgendwo weiterzuverwenden ist nicht gegeben.

PHP:
<?php
ob_start();
highlight_file( __FILE__ );
$highlight = ob_get_content();
ob_end_clean();

echo $highlight;
?>

speichert den syntaxhighlighter erst in der variable und man kann dann den inhalt ausgeben wo man will. z.B. könnte man das noch jeweils in zeilen aufsplitten und davor eine Zeilennummer schreiben.

@ Samuel:
du musst deinen puffer immer mit ob_end_clean bzw. ob_end_flush beenden, damit es klappt. ob_flush sendet nur den Puffer!
 
Zuletzt bearbeitet:
Zurück