Laravel 8 执行php artisan serve启动开发服务器5分钟后停止如何解决?
问题原因
这个问题是Laravel 8.x早期版本的ServeCommand设计缺陷导致,具体原因如下:
- PHP默认配置的
max_execution_time(最大执行时间)为300秒,artisan命令默认继承php.ini中的该配置 ServeCommand第59行的while循环是用于监控PHP内置开发服务器运行状态、检测.env文件变更的常驻逻辑,官方没有在该循环中主动重置执行时间计数,进程运行满300秒后就会触发PHP的最大执行时间报错- 报错后项目仍可正常访问,是因为实际处理HTTP请求的是
ServeCommand启动的PHP内置开发服务器子进程,主监控进程崩溃不影响已经启动的web服务子进程运行
修复方案
按照优先级推荐以下4种解决方案:
- 方案1:升级Laravel到8.x最新小版本
Laravel官方已在后续的8.x补丁版本中修复了该问题,修复逻辑是在ServeCommand的循环中主动调用set_time_limit(0)取消执行时间限制,升级后问题可直接解决。 - 方案2:启动命令临时修改配置(无需改代码,适合临时救急)
运行服务时添加参数临时取消当前命令的最大执行时间限制,命令如下:php -d max_execution_time=0 artisan serve - 方案3:手动修改
ServeCommand代码(仅临时测试用,不推荐修改vendor目录文件)
打开vendor/laravel/framework/src/Illuminate/Foundation/Console/ServeCommand.php文件,在第59行的while循环开头添加一行set_time_limit(0);,即可取消当前监控进程的最大执行时间限制。 - 方案4:更换本地开发服务栈
本地开发可改用Laragon、XAMPP、Docker等集成环境运行项目,无需依赖php artisan serve自带的开发服务器,可完全避免该问题。
内容的提问来源于stack exchange,提问作者MMD
相关产品推荐
相关产品推荐

