2010-05-27 7 views
6

Ich sehe (nicht nur auf dieser Website) eine Menge Fragen von unerfahrenen PHP-Programmierer über die berüchtigten "Header bereits gesendet ... Ausgang gestartet um" Fehler , und viele Leute schlagen vor, Ausgangspufferung als eine Lösung zu verwenden.Anwendungsfall für die Ausgabe-Pufferung als die richtige Lösung für "Header bereits gesendet"

Nach meiner Erfahrung habe ich nie eine Situation gefunden, wo dieser Fehler nicht durch einen Fehler in der Logik des Programms verursacht wurde. Gibt es Fälle, in denen die Ausgangspufferung die richtige Lösung ist?

Antwort

4

Ich würde mit Ihrer ursprünglichen Aussage übereinstimmen. Im Allgemeinen ist das Lösen des "headers" -Problems mit der Pufferung der Ausgabe ein Notbehelf.

Der wirklich traurige/lustige Teil dieser Lösung ist: Was passiert, wenn Sie etwas Großes ausgeben wollen, wie eine Datei, die Sie hinter einer Paywall aufbewahren? Normalerweise führt dies dazu, dass Leute das "headers" -Problem dadurch ersetzen, dass ihre Skripte nicht genügend Speicher haben.

Whoops.

0

für Template-Systeme benötigen Sie ob_start ... aussehen und Zend_View

Später bearbeiten ich die Frage falsch verstanden und einen Fall vorgesehen, wo ob_start Verwendung eine gültige Lösung.

+0

Können Sie das näher erläutern? –

+0

Wahr, Template-Systeme brauchen es. Die Frage bezieht sich jedoch auf "Header gesendet" -Situationen. – deceze

+1

solomongaby bedeutet, dass einige Vorlagensysteme die Ausgabepufferung verwenden, um Fragmente der Vorlage, die zusammengeführt werden sollen, in einem späteren Renderschritt zu rendern.Während dies eine gültige Verwendung der Ausgabepufferung ist, ist dies jedoch keine Erklärung dafür, warum die Pufferung ein gültiger Weg sein könnte, um das "Header" -Problem zu lösen, was die ursprüngliche Frage ist. – ivans

2

Die einzige Situation, die ich vorstellen kann, ist ein CMS oder Weblog, in dem Plugins können im HTML-Code aufgerufen werden, wie

<h1>My images</h1> 
{plugin:show_images} 

diesen Plugins können ihre eigenen Stylesheets und andere Dinge hinzufügen, die gehen in der Abschnitt der Seite. Mit Pufferung wäre dies möglich.

In der Praxis ist dies jedoch nicht gut für die Leistung, fühlt sich kludgy an und funktioniert nicht, wenn die Ausgangspufferung ausgeschaltet ist. Auch hier ist es daher besser, den Inhalt vor dem Anzeigen vorzuspeichern und Stylesheets usw. hinzuzufügen, bevor etwas ausgegeben wird.

+1

Ich denke, Sie sprechen über ein anderes Thema. HTML unterscheidet sich von HTTP-Header. –

+1

@ZZ Coder Nein, ich spreche über das Einfügen von Code an einem Ort, der "über" dem Ort liegt, an dem Sie gerade arbeiten. Ob das eine andere Position innerhalb des ' 'oder' ' Elements ist, spielt keine Rolle. Der Punkt ist, Pufferung zu verwenden, um die Ausgabe vor dem Senden zu ändern. –

+0

@Pekka 웃 Was ist eigentlich nicht die Frage? – immibis

0

Möglicherweise möchten Sie spät im Ablauf HTTP-Weiterleitungen ausgeben, z. B. in Vorlagen oder in der Ausnahmebehandlung. (Natürlich kann ein Rahmen mit Templat oder globaler Ausnahmebehandlung würde ohnehin Ausgabepufferung benötigen, so könnte man sagen, es ist keine Lösung für dieses Problem spezifisch.)

0

In meiner Erfahrung, die ich habe noch nie eine Situation, in Dieser Fehler wurde nicht durch einen Fluss in der Programmlogik verursacht. Gibt es Fälle, in denen die Ausgangspufferung die richtige Lösung ist?

ich Ihnen zustimmen müsste, aber:

1) Einer der Gründe, warum ich PHP mag, ist, weil es Sie können wählen, wie Sie das Problem lösen

2) gibt es andere verwendet für output_buffering anders als das Fixieren der Nachricht 'Header senten sent' - z Komprimieren Ausgabe, Ausgabe beliebigen Code erfassen, die Vermeidung aufgeteilte Codierung ....

C.

Verwandte Themen