私は 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
したがって、ニーズを達成するには、バッファーにコンテンツがあるかどうかを判断するだけで済みます。
ob_get_contents
🎜 を提供します。