【问题标题】:Turning on Output_Buffering creates 404 errors on random pages开启 Output_Buffering 会在随机页面上创建 404 错误
【发布时间】:2018-07-13 08:12:32
【问题描述】:

我一直在使用 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 标头是有原因的。有什么想法吗?

【问题讨论】:

  • 拥有响应代码 = 404 并具有(可能有用的)内容的页面在技术上是可以的 (i) 你能告诉我们预期的结果是什么...404 或 200 (ii) 可以您确认行为是随机的还是可预测的?
  • 我期望 200,行为是..奇怪。我有时会看到带有 404 错误的页面,并且硬刷新什么也没做 - 错误又回来了。然后我会在第二天早上来,每个不工作的页面都会返回 200 状态。所以我猜是不可预测的,但不是从一秒到下一秒。
  • 奇怪。无论如何,请检查 PHP 错误日志中的“无法修改标头”或类似内容。发布您发现的任何错误。

标签: php wordpress apache http-status-code-404 output-buffering


【解决方案1】:

我认为发生的情况是,无论输出缓冲是打开还是关闭,您的代码在某些情况下都会发出 404;但是当输出缓冲 off 时,标头无法设置,因为它已经被写入,生成如下警告:

警告:无法修改标头信息 - 标头已由 (输出开始于 /file.php:20)在 /file.php 第 100 行

因此,您只能在输出缓冲打开时看到 404,on 这使您可以在将缓冲区写入输出之前的任何时间设置标头。

【讨论】:

  • 这是可能的,但我收到该错误的唯一一次是当我最近发布的 Wordpress 小部件尝试设置缓存控制标头时。我无法想象为什么 Wordpress 会发送 404,以及它来自代码中的哪个点。你有什么建议吗?
  • 设置一个错误处理程序来捕获警告并查看是否是这种情况,如果有像我建议你的消息那样的警告将有文件名和行号。
  • 也许您可以将所有警告发送到日志文件codex.wordpress.org/Debugging_in_WordPress
  • 我确实不断收到“无法修改标头信息”错误,但它引用了 wordpress functions.php 文件来设置 nocache 标头。我认为你是对的,这里的东西是发送一个 404,它更像是一个 Wordpress 问题而不是一个 output_buffering 问题。
猜你喜欢
  • 2015-05-24
  • 1970-01-01
  • 2010-11-25
  • 2013-07-13
  • 2018-09-30
  • 2017-05-12
  • 2017-01-23
  • 1970-01-01
相关资源
最近更新 更多