4

我有一个应用程序(CakePHP 2.2)直到最近都运行良好,但是突然之间它开始只提供页面的一部分。页面的 HTML 被截断,但它并不总是每次都在完全相同的位置截断(尽管它大约在同一个位置)。

我已经让其他人从另一个位置对此进行了测试,他们也遇到了同样的问题。

我第一次遇到这个问题时,我重新启动了服务器,它似乎解决了这个问题,但是它又发生了。这次我尝试重新启动 Apache,而不是整个服务器,它似乎没有解决问题。

我不确定还有什么可以尝试的,所以欢迎任何建议。

提前致谢。

更新:我现在也尝试禁用 APC,但禁用后问题仍然存在。

另一个更新:尝试在截断点的上方和下方添加内容后,它似乎在距文件末尾一定距离处被截断,因为近似断点仅在内容被添加到中断位置后移动时才移动。

又一次更新……好吧,所以我做了更多的挖掘工作,我的生产服务器上的内容长度计算似乎有问题。这是我挖掘的输出(删除日期标题以节省空间)......

未设置 Content-Length 的服务器

如果我Content-Length在 CakeResponse::_setContentLength() 中取消设置标题,则整个页面显示正常,这是返回的标题...</p>

Connection  close
Server  Apache/2.2.24 (Unix) mod_ssl/2.2.24 OpenSSL/1.0.0-fips mod_bwlimited/1.4
Transfer-Encoding   chunked
X-Powered-By    PHP/5.3.24

设置了 Content-Length 的服务器

如果我不取消设置Content-Length标头,则显示的页面将被截断,并且响应标头是……</p>

Connection  close
Content-Length  2455
Content-Type    text/html; charset=UTF-8
Server  Apache/2.2.24 (Unix) mod_ssl/2.2.24 OpenSSL/1.0.0-fips mod_bwlimited/1.4
X-Powered-By    PHP/5.3.24

具有标准内容长度的本地机器

我认为这是标题长度计算,除了在我的本地机器上,即使没有取消设置Content-Length标题,整个页面也会显示,即使Content-Length返回的结果与生产服务器上的相同......

Connection  Keep-Alive
Content-Length  2455
Content-Type    text/html; charset=UTF-8
Keep-Alive  timeout=5, max=100
Server  Apache/2.2.22 (Unix) DAV/2 PHP/5.3.15 with Suhosin-Patch mod_ssl/2.2.22 OpenSSL/0.9.8x
X-Powered-By    PHP/5.3.15
4

1 回答 1

0

从我所能收集到的,

脚本必须是die'ing,然后在显示代码后停止 HTML。

您需要进一步查看 CakePHP 的代码,并检查逻辑函数是否没有意外结束,并且没有可能导致 HTML 加载的未完成的 die 函数。

于 2013-09-02T08:45:36.917 回答