ホームページ  >  記事  >  バックエンド開発  >  ここでプログラムが実行される前に出力があるかどうかを PHP で検出する方法はありますか?

ここでプログラムが実行される前に出力があるかどうかを PHP で検出する方法はありますか?

WBOY
WBOYオリジナル
2016-10-10 11:56:081200ブラウズ

私は header() の問題を解決しようとしているわけではありませんが、プログラムにはこの要件を持つ関数があることに注意してください。
逆に、ヘッダーを送ることで検知できるか、Cookie(真実)を設定できないか考えてみました。しかし、PHPにはoutput_bufferingメカニズムがあるため、このアプローチは実行できないと言われています。なぜなら、このメカニズムを残酷にオフにすると、他の予期せぬ問題が発生する可能性があり、すべての環境をオフにできるわけではないからです。
たとえ機能しても、Cookie は常に少し遅く、設定後すぐに取得できません。ヘッダーを送信すると http ヘッダーに無駄なものが混入してしまいます。

それ。 。 。

この需要を満たす方法はありますか?

(プログラムの他の部分のコードを変更したくない)

返信内容:

header() の問題を解決しようとしているわけではありませんが、プログラムにはこの要件を持つ関数があることに注意してください。
逆に、ヘッダーを送ることで検知できないか、Cookie(真実)を設定できないか考えてみました。しかし、PHPにはoutput_bufferingメカニズムがあるため、このアプローチは実行できないと言われています。なぜなら、このメカニズムを残酷にオフにすると、他の予期せぬ問題が発生する可能性があり、すべての環境をオフにできるわけではないからです。
たとえ機能しても、Cookie は常に少し遅く、設定後すぐに取得できません。ヘッダーを送信するとhttpヘッダーに無駄なものが混入してしまいます。

それ。 。 。

この需要を満たす方法はありますか?

(プログラムの他の部分のコードを変更したくない)

headers_sent() を使用して、ニーズを満たすヘッドが発行されているかどうかを判断しますか?コンテンツが出力されている場合は、ヘッダーが送信されている必要があります。

PHP の出力メカニズムは、echo などの命令を使用した直後に出力するのではなく、まずコンテンツのこの部分をバッファーに入れます。 (いわゆるバッファは共有メモリの一部です) メモリがいっぱいになるか、スクリプトが終了すると、PHP はこのメモリを nginx または apache に渡して出力します。 echo 之类的指令就会立即输出的,而是先将这部分内容放到一个缓冲区里区。(所谓缓冲区就是一块共享内存),等内存满了或者脚本结束的时候,php才会将这块内存交付给nginx或者apache来输出。
因此,要想实现你的需求,只需要判断缓冲区里有没有内容即可。
php给我们提供了这样的函数,即
ob_get_contents したがって、ニーズを達成するには、バッファーにコンテンツがあるかどうかを判断するだけで済みます。

php はそのような関数、つまり 🎜ob_get_contents🎜 を提供します。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。