2010-11-08 11 views
9

Die php-Dokumentation schlägt vor, dass ich jedes ob_start() mit einem ob_end_flush() beenden sollte. Ich benutze eins auf jeder Seite einer Seite, nur um mir die Möglichkeit zu geben, die Log-Methoden von Firephp überall in der App zu verwenden.Warum muss ich meine ob_start() beenden?

Die App funktioniert gut, aber ich frage mich, ob es etwas gibt, das ich nicht weiß, dass das schädlich sein könnte.

Antwort

8

Ich denke, der Grund für diesen Vorschlag ist, dass PHP Ihren Ausgabepuffer implizit spült, wenn Sie keine der Funktionen ob_end_* verwenden. Während kein Fehler, kann Probleme verursachen, wenn Sie es nicht erwarten. Die PHP-Dokumente versuchen, Sie vor diesen Problemen zu schützen. Wenn Ihnen der implizite Flush bekannt ist, ist dies wahrscheinlich kein Problem.

0

können Sie Output Buffering verwenden als

<?php 
ob_start(); 
echo "Some text you want to echo on page!!"; 
header("Location:somepage.php"); 
ob_end_flush(); 
?> 

Das Problem ist, dass wir nicht den Header senden können, nachdem wir die Ausgabe beginnen zu senden. Um dies zu lösen, puffern wir die Ausgabe. Die Funktion ob_start schaltet die Pufferung der Ausgabe ein. Während die Ausgabepufferung aktiv ist, wird keine Ausgabe vom Skript (außer den Headern) gesendet, stattdessen wird die Ausgabe in einem internen Puffer gespeichert. Die Echoausgabe wird also gepuffert. Als nächstes senden wir die Kopfzeile ohne Probleme, da wir noch keine Ausgabe ausgegeben haben. Schließlich rufen wir ob_end_flush auf, um den Inhalt des internen Puffers zu löschen und die Pufferung der Ausgabe zu stoppen.

0

Wenn es zum Beispiel Schleifen gibt, kann man die Pufferung starten. Und ruft deine Funktion an. Wenn er versucht, ob_end_flush code sammelt Ihre Inhalte.