2010-09-04 8 views
6

Ein paar Probleme mit der Ausgabepufferung. Hauptsächlich versuche ich, die Ausgabepufferung mit dem Rückruf ob_gzhandler auszuführen, aber es sagt mir immer wieder, dass es einen nicht unterstützten Komprimierungstyp verwendet. Alles aktiviert ist, und ich glaube, das Problem ist, dass ob_get_level läuft() zu Beginn meines Skript erzeugt ein Niveau von 1. php.ini hat mein output_buffering auf 4096.ob_get_level() beginnt bei Level 1

Wenn ich etwas laufen wie:

while(ob_get_level() > 0){ 
    ob_end_clean(); 
} 

Dann kann ich ob_start() mit dem Ob_gzhandler Callback erfolgreich ausführen. Aber ich frage mich, ob es ein Problem sein sollte. Während meines Skripts rufe ich an verschiedenen Stellen zu ob_clean() auf, da ich es vermeide, zu viele Puffer zu stapeln, da ich gelesen habe, dass dies die Leistung erhöhen kann. Ich bin mir nur unsicher, was ich hier machen soll.

Prost.

Antwort

7

Sie haben die Ausgabepufferung standardmäßig aktiviert (siehe the docs) - das bedeutet im Grunde, dass jedes PHP-Skript mit ob_start() beginnt.

Wenn Sie den Standard-OB für alle PHP-Skripte deaktivieren möchten, setzen Sie in Ihrer php.ini .

Wenn Sie nur den Standard-OB für dieses spezifische Skript deaktivieren möchten, verwenden Sie die Schleife while - es ist ganz richtig.

Wie für die ob_clean - sind Sie sicher, dass Sie die Ausgabe löschen möchten, die in Ihrem Puffer ist? IMO ist es nicht wirklich notwendig, es sei denn, Sie sehen signifikante langsame Seitenlasten. Mach dir keine Sorgen, das zu optimieren (zumindest jetzt nicht).

+0

Ja, ich glaube ich tue. Es ist gesetzt als: output_buffering = 4096 (was ich oben gesagt habe). Worauf ich hinaus will, ist, ob ich das so lassen soll, wie es ist, und einfach die obige Schleife laufen lasse, damit ich Output-Pufferung ob_gzhandler starten kann? –

+0

@Jason Lewis: Das liegt an dir. Ich würde wahrscheinlich die Standard-OB für alle Skripts eingeschaltet lassen und sie mit der 'while'-Schleife beenden, falls ich meine eigene verwenden wollte. – Piskvor

+0

Ich sollte sagen, ich benutze ob_get_clean() an einigen Stellen, um die Ausgabe in ein paar Variablen zu speichern und schließlich wird es geleert. Ist dies ein guter Weg, oder sollte ich einen neuen Puffer für jeden Ort, an dem ich die Ausgabe erfassen möchte, starten und stattdessen ob_get_flush() verwenden? –