2015-09-25 67 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類。只要趕上例外情況並對此做任何事情: