当前位置:Gxlcms > PHP教程 > php有没有办法检测出程序运行到此处之前有无输出?

php有没有办法检测出程序运行到此处之前有无输出?

时间:2021-07-01 10:21:17 帮助过:3人阅读

注意我并不是想解决header()的问题,只是程序中有一个功能有这个需求。
反之,我倒是想过是不是可以通过发个header来检测,或者set个cookie(一个道理)。但是据说php有个output_buffering机制,搞得这条路又行不通了。因为把这个机制残忍地关闭可能会导致一些其它不可预期的问题,而且不是所有环境都能关闭的。
就算行得通,但cookie总是慢一拍,不能set完马上获取到。发个header又会导致没用的东西掺杂在http头中。

那。。。

有什么办法达到这个需求呢?

(我并不想修改程序其他部分的代码)

回复内容:

注意我并不是想解决header()的问题,只是程序中有一个功能有这个需求。
反之,我倒是想过是不是可以通过发个header来检测,或者set个cookie(一个道理)。但是据说php有个output_buffering机制,搞得这条路又行不通了。因为把这个机制残忍地关闭可能会导致一些其它不可预期的问题,而且不是所有环境都能关闭的。
就算行得通,但cookie总是慢一拍,不能set完马上获取到。发个header又会导致没用的东西掺杂在http头中。

那。。。

有什么办法达到这个需求呢?

(我并不想修改程序其他部分的代码)

使用 headers_sent() 判断头是否发出是不是可以满足你的需求?的如果已经输出内容了,headers 肯定已经发送过了。

php的输出机制并不是使用完了echo 之类的指令就会立即输出的,而是先将这部分内容放到一个缓冲区里区。(所谓缓冲区就是一块共享内存),等内存满了或者脚本结束的时候,php才会将这块内存交付给nginx或者apache来输出。
因此,要想实现你的需求,只需要判断缓冲区里有没有内容即可。
php给我们提供了这样的函数,即
ob_get_contents

人气教程排行