我一直在使用php中的output_buffering(由phpinfo()确认),我发现在打开它时,我将开始在我的页面上得到随机的404错误,但页面内容加载正常,一切看起来都不错.
这只发生在我的生产网站上. PHP 5.5.35,Apache / 2.4.18(Unix).我不知道404从哪里发送.有没有人对我可能发生的事情有什么想法,或者我可以在我的服务器上搜索什么来修复它?
这些是我的响应标题,如果完全相关:
Cache-Control:s-maxage=10
Cache-Control:no-cache, must-revalidate, max-age=0
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:13021
Content-Type:text/html; charset=UTF-8
Date:Fri, 02 Feb 2018 18:31:59 GMT
Expires:Wed, 11 Jan 1984 05:00:00 GMT
Keep-Alive:timeout=5, max=96
Server:Apache
Strict-Transport-Security:max-age=31536000; includeSubDomains; preload
Vary:Accept-Encoding
X-Powered-By:PHP/5.5.35
编辑:
我发现这个问题只发生在我从Wordpress实例加载“最近帖子”的页面上.我删除这个小小部件并不是一个真正的选择,但我认为设置404标头背后有一个原因.有什么想法吗?
最佳答案 我认为正在发生的事情是,无论输出缓冲是打开还是关闭,您的代码在某些情况下都会发出404s;但是当输出缓冲关闭时,标头无法设置,因为它已经被编写生成类似这样的警告:
Warning: Cannot modify header information – headers already sent by
(output started at /file.php:20) in /file.php on line 100
因此,只有在输出缓冲打开时才能看到404,这使您可以在将缓冲区写入输出之前的任何时刻设置标头.