Laravel设置max_execution_time为300仍报60秒超时如何解决?
确认修改了正确的php.ini文件
XAMPP下存在多个php.ini配置文件,比如Apache服务使用的和CLI模式使用的。可以在项目根目录创建info.php文件,内容如下:<?php phpinfo(); ?>访问该文件,找到
Loaded Configuration File项,确认你修改的是这个路径下的php.ini。同时检查页面中max_execution_time的值是否确实为300,顺便确认max_input_time、memory_limit等相关参数设置合理。检查Laravel框架层面的超时限制
如果你是通过Artisan命令执行任务,Laravel默认有超时限制,需要在对应命令类中调整:protected $timeout = 300; // 单位:秒若使用队列任务,打开
config/queue.php,检查对应驱动的timeout参数,确保设置足够长的时间。调整Web服务器的超时设置
如果你用的是Apache,打开httpd.conf或extra/httpd-default.conf,找到Timeout指令,设置为大于300的值:Timeout 300修改后重启Apache服务。如果是Nginx,检查站点配置文件中的
proxy_read_timeout、fastcgi_read_timeout参数,同样设置为300秒以上。排查慢查询或耗时操作
超时问题往往不是单纯调大时间就能根治的,建议开启Laravel查询日志定位慢SQL:
在.env文件中添加:DB_LOG_QUERIES=true或者在代码中临时启用:
\DB::enableQueryLog(); // 执行你的业务代码 dd(\DB::getQueryLog());找到执行时间过长的查询,优化SQL语句、添加必要索引,或者将这类耗时操作改为异步处理(比如用Laravel队列)。
检查PHP-FPM配置(若使用)
如果XAMPP启用了PHP-FPM,找到php-fpm.conf或对应池的配置文件,检查request_terminate_timeout参数,设置为300秒以上,修改后重启PHP-FPM服务。临时代码层面调整测试
可以在具体的控制器或脚本中临时设置超时,验证是否生效:ini_set('max_execution_time', 300); set_time_limit(300);注意:
set_time_limit(0)表示无限制,但不建议在生产环境使用。
内容的提问来源于stack exchange,提问作者Alexandre Santos Gomes

