我试图在超过最大执行时间限制时捕获错误,并显示有关此的友好通知,然后重定向用户。这是我的代码的样子(这是一个非常简短的代码):
class ProfitAndLossController extends Controller
{
private function shutdownFunction(){
return response()->json(['error_message' => Lang::get('listings.file_too_large')], 403);
}
public function import(ImportListingRequest $request){
$import = new ProfitAndLossImport();
set_time_limit(30);
register_shutdown_function($this->shutdownFunction());
Excel::import($import, request()->file('pl'));
return $import;
}
}
这马上给我一个错误:"register_shutdown_function(): Invalid shutdown callback '' passed"
如果我试图从关机功能dump()
的东西,它立即转储它并给出相同的错误。我还尝试像这样注册它:
register_shutdown_function([$this, 'shutdownFunction']);
但它给了我一个错误:"Maximum execution time of 30 seconds exceeded"
,但函数仍然没有得到执行。我做错了什么?
你和
register_shutdown_function([$this, 'shutdownFunction']);
你的问题是:错误(超过30秒的最大执行时间)是从set_time_limit(30)方法生成的;您放置了register_shutdown_function在超时方法返回致命错误之后。你的代码永远不会到达你的关闭函数。您需要找到另一种方法来捕获错误,或者在达到时间限制时做一些事情。我建议你看看这个帖子。
当超时时运行一些东西PHP