我有一个 PHP 进程,用户在浏览器中运行该进程,但通常需要相当长的时间 - 超过 5 分钟。我们刚刚切换到新服务器,当我们尝试运行该脚本时,它会在 4 分钟后始终超时,发送到 500 内部服务器错误页面并在错误日志中输出以下错误:
等待 CGI 脚本输出超时
脚本头过早结束:cgi_wrapper
有趣的是,PHP 进程似乎在后台完成。如果我们离开 500 错误页面并稍等片刻,脚本中所需的更改就会完成。
有什么方法可以解除似乎已经强加给我们的 CGI 限制吗?我读过有关 FastCGI 的信息,但不确定如何在我们的服务器(Apache、centOS、PHP 5.3)上安装它。
答案1
这不是解决问题的方法 - HTTP 不适用于处理需要很长时间的操作 - 虽然听起来您当前的 PHP 配置允许程序运行很长时间,但这意味着您配置错误 - 它应该知道 Web 服务器何时断开连接并做出适当的响应。也许可以伪造 Web 服务器配置,甚至可以让浏览器保持足够长的连接时间,也许您不必担心中间的代理 - 但您使用每个工具的方式都不符合它们的设计用途。
解决问题的正确方法是从网页开始,但运行是一个单独的进程组并向长时间运行的进程中添加代码,将状态写入某处,然后可以通过浏览器触发的脚本进行轮询。