应修改xampp中apache实际加载的php.ini(如xampp\apache\bin\php.ini),而非php目录下的php.ini;通过phpinfo()确认loaded configuration file路径,改memory_limit后须彻底重启apache服务。

确认 Apache 实际加载的 php.ini 路径
改了 xampp\php\php.ini 却没生效?大概率是 Apache 没读它。XAMPP 的 Apache 默认不从 PHP 目录加载配置,而是用自己 bin 目录下的副本——\xampp\apache\bin\php.ini(Windows)或 /opt/lampp/apache2/bin/php.ini(Linux)。直接在浏览器访问 http://localhost/dashboard/phpinfo.php,搜索 Loaded Configuration File,看到的路径才是真实生效的那个。
修改 memory_limit 值要兼顾场景和风险
开发时设太高反而掩盖问题,设太低又频繁报错。推荐按用途区分:
- Web 请求(Apache 模块):
memory_limit = 256M是较稳妥的起点;处理 Excel 导入、图像批量生成等任务可临时调到512M - CLI 脚本(如 Composer、Artisan):
memory_limit = -1更实用,避免命令中途被杀;但仅限本地开发,切勿写进生产 php.ini - 绝对不要设
memory_limit = 0—— 这不是“无限制”,而是“禁用检查”,PHP 会直接崩溃而不是报错
CLI 和 Web 的 memory_limit 必须分开调
同一个 php.ini 文件无法同时满足 CLI 和 Web 场景。命令行运行 php --ini 查看 CLI 加载的配置路径,通常指向 \xampp\php\php.ini;而 Apache 加载的是另一个。常见错误是只改了 CLI 的配置,结果 phpinfo() 里还是 128M。
临时覆盖 CLI 内存限制的方法更灵活:
- 单次执行:
php -d memory_limit=1G script.php - 脚本开头加:
ini_set('memory_limit', '1G');(但受php_admin_value[memory_limit]限制,若 Apache 配置了该指令则无效) - shebang 行指定(Linux/macOS):
#!/usr/bin/env php -d memory_limit=512M
改完必须完整重启 Apache,不是重载
仅点击 XAMPP 控制面板的 “Restart” 或执行 httpd -k restart 不够——opcache、内存池等模块不会刷新。必须先点 “Stop”,等状态变灰、进程彻底退出,再点 “Start”。Windows 下可任务管理器查 httpd.exe 是否残留;Linux 下用 ps aux | grep httpd 确认。
容易被忽略的一点:如果启用了 opcache,且 opcache.revalidate_freq = 2(默认),即使改了 memory_limit,PHP 仍可能沿用旧编译缓存里的内存策略,直到下次检查文件时间戳。开发时建议设为 0,上线前务必改回。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











