唯一有效且长期可用的方式是修改 php.ini 并重启 Apache;需编辑 XAMPP 对应路径下的 php.ini(Windows 为 C:\xampp\php\php.ini,macOS 为 /Applications/XAMPP/xamppfiles/etc/php.ini),以管理员权限打开,修改 max_execution_time、max_input_time、memory_limit、post_max_size 和 upload_max_filesize 等参数后,必须在 XAMPP 控制面板中先 Stop 再 Start Apache 才能生效。

唯一有效且长期可用的方式是修改 php.ini 并重启 Apache;其他方法要么只对单个请求临时生效,要么在 XAMPP 中根本不起作用。
改哪个 php.ini 文件?路径和权限必须对
XAMPP 的 PHP 配置文件路径固定:C:\xampp\php\php.ini(Windows)或 /Applications/XAMPP/xamppfiles/etc/php.ini(macOS)。不要去控制面板点“Config → PHP”——那只是快捷入口,最终编辑的还是这个文件。
- 用记事本、Notepad++ 或 VS Code 打开时,必须以管理员权限运行编辑器,否则保存会失败
- 搜索
max_execution_time = 30,改成你需要的值,例如导出大数据库可设为max_execution_time = 600 - 别设成
0:XAMPP 默认使用 Apache 模块(mod_php),设为 0 容易导致脚本卡死、无法响应、也无法被正常终止 - 改完后务必检查是否误改了
php.ini-development或php.ini-production这类备份文件——它们不会被加载
为什么改完必须重启 Apache,而不是点 Restart?
XAMPP 的 Apache 是把 PHP 编译进模块加载的,php.ini 只在 Apache 启动时读取一次。Restart 按钮有时不完全重载模块,导致配置未更新。
XAMPP 8.0.30 是一款免费、开源的跨平台 Web 服务器集成包,专为快速搭建本地 PHP 开发环境而设计。该版本核心组件包括:Apache 2.4.56、MySQL 8.0.33、PHP 8.0.30、phpMyAdmin 5.2.1 等。它支持 Windows、Linux 和 macOS 系统,可让开发者在个人电脑上轻松模拟服务器环境,无需复杂配置即可运行 WordPress、Thin
- 在 XAMPP 控制面板中,先点 Stop Apache,等状态变灰后再点 Start Apache
- 验证是否生效:建一个
test.php,内容为<?php echo ini_get('max_execution_time'); ?>,访问它看输出是否是你设的值 - 如果仍是 30,说明没改对文件,或者没保存成功(权限问题最常见)
ini_set() 和 set_time_limit() 在 XAMPP 里能用吗?
能用,但仅限调试,且有硬性限制:
-
ini_set('max_execution_time', '600')必须放在脚本最开头,且只对当前请求有效;若php_admin_flag[disable_functions]禁用了ini_set(XAMPP 默认未禁用),它就直接失效 -
set_time_limit(600)会从调用位置起重新计时,但多次调用可能被 Apache 自身的Timeout指令覆盖(XAMPP 默认是 300 秒) - 这两个函数都无法突破 Apache 的底层超时机制——而 XAMPP 的 Apache 配置里没有暴露
Timeout修改入口,所以它们本质是“打补丁”,不是正解
别漏掉 max_input_time 和内存限制
很多看似“执行超时”的问题,其实是卡在接收阶段:比如 phpMyAdmin 导出时勾选几十张表,POST 请求体很大,但 max_input_time 没同步改,30 秒就断连了,根本到不了脚本执行。
-
max_input_time默认是-1,会继承max_execution_time的值;但如果你手动设过它,就必须同步改 -
memory_limit也要调大,尤其导出或安装 Drupal 类应用:memory_limit = 512M比默认128M更稳妥 -
post_max_size和upload_max_filesize也得一起调(如都设为64M),否则 phpMyAdmin 提交导出选项时就会被截断
真正复杂的地方在于:你看到的“超时”,可能是 PHP 层、Apache 层、甚至浏览器代理层叠加的结果。XAMPP 不提供 Apache 的 Timeout 配置入口,也没暴露 PHP-FPM 的 request_terminate_timeout(它压根没启用 PHP-FPM),所以唯一可控、可验证、可复现的出口,就是老老实实改 php.ini 并重启 Apache。

















