trae 启动的 PHP 服务 max_execution_time 默认为30秒,且不读取 php.ini;唯一有效修改方式是启动时用 -d 参数覆盖,如 trae start -d "max_execution_time=300"。

trae 启动的 PHP 服务里 max_execution_time 默认是 30 秒
trae 内置的 PHP 是通过内置 SAPI(类似 CLI 或 embed 模式)启动的,不走 php-fpm 或 Apache,所以修改 php.ini 文件通常无效。它实际读取的是 trae 自己打包时固化或运行时动态覆盖的配置值。你用 phpinfo() 查到的 max_execution_time 值,大概率是 trae 启动时硬编码设的 30,而不是你本地 php.ini 里的设置。
改 max_execution_time 的唯一有效方式:启动时传参
trae 允许在启动命令中通过 --php-config 或环境变量注入 PHP 运行时参数。实测最稳定的方法是用 -d 直接覆盖:
trae start -d "max_execution_time=300"
也可以写成一行多参数形式:
trae start -d "max_execution_time=600" -d "memory_limit=512M"
-
-d参数优先级高于任何php.ini,trae 会把它透传给 PHP 的zend_parse_parameters流程 - 数值单位是秒,支持整数,不支持
0(设为 0 会被 trae 自动重置为 30) - 如果项目含长耗时脚本(如导出、图像批量处理),建议设为
300~600,避免超时中断 - 这个设置只对当前
trae start实例生效,重启后需重新加参数
为什么改 php.ini 没用?
trae 的 PHP 不加载系统级 php.ini,也不扫描 /etc/php/*/cli/php.ini 或项目根目录下的 php.ini。它用的是精简版 embed SAPI,ini 加载逻辑被裁剪了。你执行 trae php --ini 会发现输出是 Configuration File (php.ini) Path: (none)。
立即学习“PHP免费学习笔记(深入)”;
常见误操作包括:
- 在项目里放
.user.ini—— embed SAPI 不支持该机制 - 用
ini_set('max_execution_time', '300')—— 只对当前请求生效,且 trae 在响应头发送前就做了超时拦截 - 改
/usr/local/bin/trae二进制文件里的字符串 —— 会破坏签名,trae 启动直接报错
调试时确认是否生效
别只信 phpinfo() 页面,trae 的 phpinfo() 有时缓存旧值。最可靠的方式是写个测试脚本:
然后用 trae start -d "max_execution_time=120" 启动,访问该脚本。如果看到 Still alive,说明改成功了;如果返回 502 或空白页,大概率还是卡在 30 秒。
trae 对超时的处理很“安静”——不报错、不打日志、不返回 PHP 错误,只静默断连。这是最容易忽略的点。











