【发布时间】:2013-06-28 17:11:21
【问题描述】:
我有一个使用 Web 服务的非常长的过程,我需要通过 ajax 请求使用单个按钮启动,因此我可以在过程完成时显示响应消息。 ajax请求只是调用了一个Zend Controller,可以这样概括:
public function myajaxAction() {
$myModel = new MyModel();
$someData = $myModel->fetchAll();
foreach ($someData as $dataElement) {
$response = call_to_remote_client($dataElement['ID']);
echo $response;
}
$this->_helper->viewRenderer->setNoRender();
$this->_helper->getHelper('layout')->disableLayout();
}
$response 然后作为 success 的参数被接收,并且可以被 html()'d 到某个响应 div 中。
这一切都顺利了一段时间,但我现在发现如果上述进程运行时间过长,我的 ajax 请求将失败,因为 502 Bad Gateway 错误。 Firebug 告诉我这发生在每次 5 分 0 秒后,所以听起来很像超时。
我发现this link 似乎讨论了完全相同的问题。它帮助我更好地识别问题,但我想不出任何解决方案。有没有办法增加这个超时?我尝试在 stdout 上使用 stream_set_timeout(),但我显然不知道自己在做什么,因此它显然不起作用。
对我现在的选择有什么想法吗?
【问题讨论】:
-
你试过在 Bootstrap.php 中设置
set_time_limit(0)吗? -
显然不是。会试试的。
-
试过了,5分钟后出现同样的Bad Gateway错误。
-
您的过程数据功能是做什么的?你能把代码贴出来吗
-
从技术上讲,它不是一个函数,我只是想通过将处理部分总结为一个通用函数来使问题尽可能简单,但我明白你的意思。我编辑了我的摘要以添加有关该过程的详细信息。我认为重要的是,如果我在 30 转之后从循环中中断,这将非常有效。它输出结果,没有超时错误。而且问题不可能是无限循环,因为我只是在有限数组上使用 foreach。
标签: php ajax zend-framework timeout