【问题标题】:Apache/PHP - HTML output abruptly stopsApache/PHP - HTML 输出突然停止
【发布时间】:2018-09-06 13:27:04
【问题描述】:

我有一个 PHP 脚本,它生成一个 HTML 网页并通过 Apache 提供给客户端。大多数情况下,脚本都能正常工作,并发送整个网页。但是,有时 HTML 输出会被截断,在文档中看似随机但一致的点处停止。

我检查了 Apache 错误日志,但没有与该问题相关的条目。我还重新启动了服务器,看看我是否遇到了未知的内存问题,但问题仍然存在。

知道什么可能导致输出截断吗?

服务器配置

Apache 配置为以 FastCGI 方式运行 PHP,其他 PHP 脚本可以正确运行并完全输出。 PHP 和 Apache 日志记录在 PHP 设置为 E_ALL 和 Apache 设置为 warn 时启用。

【问题讨论】:

  • 发布代码..
  • @KarloKokkak 该脚本是专有的,并且获得了禁止披露的许可。然而,这与讨论的问题无关。我花了几个小时在线搜索解决方案,但找不到任何记录此问题的信息。我调试了我的代码,发现我将 Content-Length 标头设置为错误的值。我决定发布此问答(在 SO 政策允许的情况下),因为我认为将来遇到类似问题的其他人可能会从我的努力和文档中受益。
  • 另外,如果有人想知道我为什么回答我自己的问题,请参阅 this questionStack Overflow FAQ 了解有关 Stack Overflow 问答风格帖子的详细信息。

标签: php apache http webserver


【解决方案1】:

有几个可能的问题会导致 PHP 内容突然结束。但是,大多数情况下通常会导致将错误添加到服务器日志中。几个常见问题是:

  1. PHP 进程内存不足。
  2. 已超过 PHP 最大执行时间,脚本已终止。

由于在您的情况下没有生成错误并且您启用了错误报告/日志记录,因此很可能在脚本中的某处设置了错误的 Content-Length 标头。如果Content-Length 标头小于实际内容长度,则内容被截断,然后发送到浏览器。

要解决此问题,请尝试以下操作:

  1. 检查您的 PHP 脚本是否有对 header('Content-Length: '...) 的调用 并验证所有长度计算是否正确执行。
  2. 如果没有必要,请删除对 header('Content-Length: '...) 的调用。

通常,如果未设置,Content-Length 标头会自动计算并设置为正确的长度。

作为最后的手段,如果您无法确定错误标头的来源,您也可以稍后在脚本中(在内容输出开始之前)使用 header_remove('Content-Length') 取消设置 Content-Length 标头。但是,请注意,建议这样做,因为它只是解决根本问题,而不是识别和纠正它。

【讨论】:

  • 内存不足加一。
猜你喜欢
  • 2013-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-23
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多