这个问题已被问过几次,我没有找到满意的答案来解决我的具体情况。我正在执行一个长期运行的php脚本(来自symfony2控制器),该脚本访问Web服务获取数据并将其推送到数据库中。有时,随机地,无论我设置的执行时间限制是什么,我都会得到这些致命的错误异常 -
Fatal Error: Maximum execution time of 120 seconds exceeded
代码
public function webCallAction()
{
set_time_limit(120);
$count = 0;
while($count < 100) {
$count = $count + 1;
try{
$webAPIUtil = new WebAPIHelper();
//fatal timeout error here on random occassions
$dataList = $webAPIUtil ->getData();
}
catch(\FatalErrorException $e1)
{
//Not working
}
foreach ($dataList as $dataItem) {
//Insert into database using doctrine
}
}
}
这些似乎是临时错误,例如curl_timeouts等(来自第三方库)。我希望能够通过处理致命错误异常来重试调用。在Symfony2中有没有正确的方法?
其中一个问题的答案是 -
PHP不提供用于捕获和从致命错误中恢复的常规方法。这是因为在致命错误之后通常不应该恢复处理。匹配输出缓冲区的字符串(正如PHP.net上描述的原始帖子所建议的那样)绝对是不明智的。
但同样,这似乎是因为连接超时而被抛出的fatalerror。当我们捕获致命错误超时异常时,我们当然需要一个重试机制。
此外,如果我将代码作为脚本从命令行运行(在此处描述 - http://symfony.com/doc/current/cookbook/console/console_command.html
,这是否有意义?