根本原因是apache模块模式下win7系统加载php.ini路径错误或未加载,导致max_execution_time仍为默认30秒;需通过phpinfo()确认loaded configuration file路径,修正phpinidir并重启apache服务,且set_time_limit(0)在该环境下受apache timeout限制仍可能失效。

Win7 下 PHP 脚本执行超时(如 max_execution_time 不生效、set_time_limit 失效、CLI 与 Web 行为不一致)根本原因不是配置写错,而是 Apache 模块模式 + Windows 服务进程固化导致的 PHP 配置加载异常或被覆盖。
为什么 php.ini 里改了 max_execution_time 还是 30 秒超时
Apache 加载 PHP 模块(如 php7apache2_4.dll)后,会从注册表或硬编码路径读取 php.ini,而非你编辑的那个文件;尤其 Win7 上常见以下情况:
- Apache 启动时读的是
C:\Windows\php.ini(系统目录),而你改的是C:\php\php.ini -
PHPIniDir指向错误目录(比如少了个反斜杠、路径含空格未加引号),Apache 直接忽略,退回到默认位置找 - 多个
php.ini文件共存(如php.ini-development和php.ini-production),Apache 加载了未修改的那个 - 使用 CGI/FastCGI 模式时,
php-cgi.exe会读自身所在目录下的php.ini,和 Apache 的PHPIniDir无关
如何确认当前生效的 php.ini 路径
在网页中运行 phpinfo(),搜索 Loaded Configuration File —— 这个路径才是 Apache 实际加载的。注意:php -v 或 CLI 下的 php --ini 显示的路径可能完全不同。
若该行显示 none 或空白,说明 Apache 根本没加载到任何 php.ini,所有配置都走默认值(max_execution_time=30 就是其中之一)。
验证方法:
- 临时在
httpd.conf中加一行:PHPIniDir "C:/php"(路径用正斜杠、无尾随斜杠、无空格) - 确保
C:/php/php.ini存在且权限允许 Apache 进程读取(Win7 默认 IIS_IUSRS 或 Users 组需有读取权) - 重启 Apache 服务(不是重载配置),再刷
phpinfo()
set_time_limit(0) 在 Apache 模块模式下无效
Win7 + Apache + PHP 模块模式(TS 版)中,set_time_limit 受限于 Apache 自身的 TimeOut 指令和 Windows 服务看门狗机制,即使设为 0,实际仍可能在 120–300 秒被强制终止。
真正可控的方式只有两种:
-
改 Apache 配置:在
httpd.conf中设置TimeOut 600(单位秒),并确保KeepAliveTimeout不干扰长请求 -
换 CGI 模式:禁用
LoadModule phpX_module,改用Action+ScriptAlias调用php-cgi.exe,此时set_time_limit和php.ini生效更可靠
注意:CGI 模式下必须确认 php-cgi.exe 所在目录已加入 Apache 的 ScriptAlias,且 mod_cgi 和 mod_actions 已启用。
CLI 脚本超时与 Web 完全无关,别混着调
你在 CMD 里运行 php script.php,走的是 CLI SAPI,读的是 CLI 专属的 php.ini(可通过 php --ini 查看),和 Apache 加载的完全不是同一个文件。
常见误操作:
- 改了 Web 用的
php.ini,却用 CLI 测试超时逻辑 → 结果当然不一致 - IDE(如 PhpStorm)终端插件缓存了旧 PATH,启动的仍是旧版 PHP →
php -v看似对,实则调用错二进制 - 任务计划程序调用
php.exe时没指定完整路径,系统 PATH 优先找到其他版本 → 超时设置对不上
建议:所有自动化场景(如定时备份脚本)务必用绝对路径调用 PHP,例如 C:\php81\php.exe C:\scripts\backup.php,并确认该 PHP 对应的 php.ini 已正确配置 max_execution_time。
最易被忽略的一点:Win7 下 Apache 服务一旦启动,其子进程(包括所有 php 模块)就不再响应外部环境变量或新 php.ini 修改,除非彻底停止服务再启动。改配置后只 reload 是不够的。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











