遇到“maximum execution time exceeded”错误,说明当前php脚本运行时间超过了允许上限。解决方向分两类:临时放宽限制,或从根本上缩短耗时。具体方法包括:一、修改php.ini中max_execution_time并重启服务;二、用set_time_limit()或ini_set()在代码中动态调整;三、优化循环请求(如设置curl超时、添加sleep、复用句柄);四、排查会话文件堆积、启用opcache等隐性性能瓶颈。

遇到“Maximum execution time exceeded”错误,说明当前PHP脚本运行时间超过了允许上限。这不是代码语法错误,而是执行时长被系统强制中断。解决方向分两类:临时放宽限制,或从根本上缩短耗时。下面说几个实用、可快速落地的方法。
修改php.ini全局配置
这是最彻底的调整方式,影响所有使用该PHP版本的脚本:
- 找到对应PHP版本的php.ini文件(可通过
php --ini或phpinfo()确认路径) - 搜索
max_execution_time,将其值改为需要的秒数,例如:max_execution_time = 300(5分钟) - 同时建议检查
max_input_time和memory_limit,避免因输入解析慢或内存不足间接触发超时 - 保存后重启PHP服务(如PHP-FPM)或Web服务器(Apache/Nginx)
在代码中动态延长超时
适合只对特定脚本或某段逻辑临时放宽限制,无需改服务器配置:
- 用
set_time_limit(300)设置剩余执行时间为300秒(注意:是从调用点开始计时,不是总时长) - 传入
0可取消时间限制:set_time_limit(0)(部分共享主机禁用,需确认权限) -
ini_set('max_execution_time', '300')也可生效,但优先级低于set_time_limit,且受PHP安全模式或disable_functions限制
针对循环请求类场景优化
很多超时其实来自密集的同步操作,比如批量cURL请求。单纯加时间只是掩盖问题:
- 每次cURL必须显式设置
CURLOPT_TIMEOUT(建议≤60)和CURLOPT_CONNECTTIMEOUT(建议≤10),防止单次卡死 - 循环中加入
usleep(100000)或sleep(1),降低目标服务压力,也减少被限流风险 - 复用cURL句柄(
curl_init放在循环外)、关闭curl_close冗余调用,节省开销 - 考虑拆分任务:用分页参数(如
offset/limit)分批处理,配合队列或AJAX轮询
排查隐性性能瓶颈
有时脚本没做复杂计算,却频繁超时,可能是底层机制拖慢:
- 检查是否启用了文件会话(
session.save_handler = files),若/var/lib/php/sessions/下有几十万文件,GC扫描就会卡住几秒甚至更久 - 换成Redis或Memcached存储会话:
session.save_handler = redis,能显著提升并发响应速度 - 开启OPcache并确认启用状态,避免重复编译脚本
- 用
microtime(true)打点日志,定位哪一段实际耗时异常(如DB查询、文件读写、外部API)
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











