2015-09-25 96 views
1

我有一个控制器的动作如下:Yii2无法注册关机功能控制器动作

public function actionTest() 
{ 
    set_time_limit(1); 
    register_shutdown_function(function() 
    { 
     var_dump('shutdown'); 
    }); 

    while(true){} //infinite loop 
} 

,我仍然得到了致命错误“1秒的最长执行时间超过了”

如果我不”睡眠或使执行时间超过时,将调用关闭功能。 根据http://php.net/manual/en/function.register-shutdown-function.php#33575和几个来自互联网的例子,即使超过执行时间,也应该调用关机。

我该如何处理执行时间错误?

回答

0

我打赌PHP在之前会抛出一个致命错误运行你的关机功能。类似“致命错误:超过最大执行时间”。 Yii的error handler捕获所有的PHP错误,显示错误消息,并在PHP有机会运行你的功能之前死亡。这样你的函数永远不会被执行。

这个问题有几种解决方案。首先,您可以通过将此行添加到index.php来禁用Yii完全处理PHP错误。

define(YII_ENABLE_ERROR_HANDLER, false); 

其次,你可以尝试使用error_reportingdisplay_errors指令php.ini中禁用错误​​消息。

第三,您可以使用try-catch块捕获PHP错误并捕获ErrorException类。只要赶上例外情况并对此做任何事情: