我有一个运行Apache httpd 2.2.15和PHP 5.3.3的CentOS 6.3版系统。
我的PHP网站运行良好,除了一个查询,显然已经超时限制。 该查询现在需要超过60秒的时间才能运行,因此用户的浏览器只是等待了很长时间,大约5分钟或更长时间,然后才显示空白页面。
这让我想知道Apache / PHP是如何工作的。
我build立了一个简单的PHP脚本testing用例,它简单地执行以下操作:
超时时间为55秒时,一切正常; 我的浏览器等待55秒,然后呈现HTML。
当我将超时设置为65秒时,浏览器旋转5分钟或更长时间,然后显示完全空白的页面。 与此同时:
“我还在这里”debugging行仍然附加到服务器上的文件中,显示PHP愉快地跑;
Apache访问日志还显示查询运行,返回一个200的HTTP状态码和正确的包含HTML的字节数;
Apache或PHP都没有logging错误。
我试着改变了几个似乎相关的configuration设置:
Apache httpd.conf'Timeout'指令,从60到120;
php.ini的'default_socket_timeout'设置,从60到120。
但testing用例仍然运行完全一样; 即使在页面返回65秒之后,浏览器仍然“挂起”。 这是几个Firefox版本的情况。
有人能帮助我理解这里的事情吗? 其次,我怎样才能提高有效的超时限制,所以我的慢查询可能需要超过60秒的时间才能运行,并成功地将其结果返回给浏览器?
我预料到,如果Apache有限制 – “不要等待超过60秒,PHP才能运行查询” – 那么在60秒后或者其它情况下,它会向浏览器返回某种错误logging一些其他的错误。 相反,我看到PHP运行完成,Apache访问日志告诉我“嘿,一切都很好,我把75个字节的输出传输到浏览器”,但浏览器本身就在那里,从来没有收到输出。 什么是默默“断开”? 如果Apache从不发送错误,并允许PHP运行完成,为什么不发送结果(就像它在访问日志中说的那样)?
非常感谢您的帮助。
将/etc/php.ini中的所有60秒值更新为120以进行testing。 如果您在configuration更改后重新启动Apache,并且仍然遇到上述问题,那么看起来php是基于描述引起的。