Heim  >  Artikel  >  Backend-Entwicklung  >  Gibt es in PHP eine Möglichkeit zu erkennen, ob eine Ausgabe vorliegt, bevor das Programm hier ausgeführt wird?

Gibt es in PHP eine Möglichkeit zu erkennen, ob eine Ausgabe vorliegt, bevor das Programm hier ausgeführt wird?

WBOY
WBOYOriginal
2016-10-10 11:56:081196Durchsuche

Beachten Sie, dass ich nicht versuche, das Problem von header() zu lösen, aber es gibt eine Funktion im Programm, die diese Anforderung hat.
Im Gegenteil, ich habe darüber nachgedacht, ob ich es erkennen kann, indem ich einen Header sende oder ein Cookie setze (die gleiche Wahrheit). Es wird jedoch gesagt, dass PHP über einen Output_Buffering-Mechanismus verfügt, der diesen Ansatz unbrauchbar macht. Denn das grausame Ausschalten dieses Mechanismus kann zu anderen unerwarteten Problemen führen und nicht alle Umgebungen können ausgeschaltet werden.
Auch wenn es funktioniert, ist das Cookie immer langsam und kann nicht sofort nach dem Setzen abgerufen werden. Das Senden eines Headers führt dazu, dass nutzlose Dinge in den HTTP-Header gemischt werden.

Das. . .

Gibt es eine Möglichkeit, diese Anforderung zu erfüllen?

(Ich möchte den Code in anderen Teilen des Programms nicht ändern)

Antwortinhalt:

Beachten Sie, dass ich nicht versuche, das Problem von header() zu lösen, aber es gibt eine Funktion im Programm, die diese Anforderung hat.
Andererseits habe ich darüber nachgedacht, ob ich es erkennen kann, indem ich einen Header sende oder ein Cookie setze (eine Wahrheit). Es wird jedoch gesagt, dass PHP über einen Output_Buffering-Mechanismus verfügt, der diesen Ansatz unbrauchbar macht. Denn das grausame Ausschalten dieses Mechanismus kann zu anderen unerwarteten Problemen führen und nicht alle Umgebungen können ausgeschaltet werden.
Auch wenn es funktioniert, ist das Cookie immer langsam und kann nicht sofort nach dem Setzen abgerufen werden. Das Senden eines Headers führt dazu, dass nutzlose Dinge in den HTTP-Header gemischt werden.

Das. . .

Gibt es eine Möglichkeit, diese Anforderung zu erfüllen?

(Ich möchte den Code in anderen Teilen des Programms nicht ändern)

Die Verwendung von headers_sent() zur Bestimmung, ob der Header gesendet wird, kann Ihren Anforderungen entsprechen? Wenn der Inhalt ausgegeben wurde, müssen die Header gesendet worden sein.

Der Ausgabemechanismus von PHP gibt nicht sofort nach der Verwendung von Anweisungen wie echo aus, sondern legt diesen Teil des Inhalts zunächst in einen Puffer. (Der sogenannte Puffer ist ein Teil des gemeinsam genutzten Speichers.) Wenn der Speicher voll ist oder das Skript endet, liefert PHP diesen Speicher zur Ausgabe an Nginx oder Apache.
Um Ihre Anforderungen zu erfüllen, müssen Sie daher nur feststellen, ob sich Inhalt im Puffer befindet.
php stellt uns eine solche Funktion zur Verfügung, nämlich
ob_get_contents

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn