XAMPP 中应直接修改 php.ini 文件的 memory_limit 值(如设为 256M 或 512M),路径为 C:\xampp\php\php.ini(Windows)或 /opt/lampp/etc/php.ini(Linux/macOS),修改后必须通过 XAMPP 控制面板完全停止再启动 Apache 才生效,且需分别验证 Web(test.php)和 CLI(php -i | grep memory_limit)环境。

直接改 php.ini 里的 memory_limit
XAMPP 的 PHP 内存限制默认是 128M,多数中等规模脚本够用,但跑 Composer、大数组处理、图像批量生成或 Laravel php artisan 命令时容易触发 Fatal error: Allowed memory size of ... bytes exhausted。最稳妥的改法就是编辑 XAMPP 自带的 php.ini 文件。
路径固定:C:\xampp\php\php.ini(Windows)或 /opt/lampp/etc/php.ini(Linux/macOS)。别去动 Apache 或 CLI 单独的配置目录——XAMPP 默认所有 PHP 模块共用这一个文件。
- 用记事本(Windows)或 VS Code(推荐)打开该文件,搜索
memory_limit = - 它通常出现在
[Resource Limits]小节下,可能被注释掉(前面有分号),删掉分号再改值 - 常见合法写法:
memory_limit = 256M、memory_limit = 512M、memory_limit = -1(无限制,慎用) - 单位必须大写:
M表示 MB,G表示 GB;小写m或g会被忽略,仍按默认值生效
改完不重启 Apache,设置就白改
很多人改完 php.ini 就去浏览器刷页面,发现 phpinfo() 里 memory_limit 还是旧值——因为 Apache 进程没重载配置。XAMPP 控制面板里点一次「Stop」再点「Start」Apache 才算真正重载。
- 不要只点「Restart」:某些旧版 XAMPP 的「Restart」按钮实际只 reload,不 full restart,配置可能未刷新
- CLI 和 Web 环境共享同一份
php.ini,但 CLI 下执行php -v不反映改动,得用php -i | grep memory_limit验证 - 验证是否生效最简单的方法:建个
test.php,内容为<?php echo ini_get('memory_limit'); ?>,浏览器访问它
为什么 .htaccess 里加 php_value memory_limit 失败?
在 XAMPP 默认配置下,.htaccess 方式基本无效。原因很实在:memory_limit 属于 PHP_INI_SYSTEM 级别指令,Apache 的 AllowOverride 默认没开放这个权限,且 XAMPP 的 httpd.conf 里通常把 AllowOverride 设为 None 或仅允许 FileInfo 类指令。
立即学习“PHP免费学习笔记(深入)”;
- 强行开启要改两处:
httpd.conf中对应<Directory ".../htdocs">块内设AllowOverride All,再在.htaccess里写php_value memory_limit 256M - 但这样改风险高:一旦 .htaccess 出错,整个目录 500;而且 CLI 环境完全不认 .htaccess
- 结论:XAMPP 场景下,优先走
php.ini,别绕路
脚本里用 ini_set("memory_limit", ...) 的边界在哪?
这个函数能在运行时临时提内存,适合单个耗内存脚本(比如导出 Excel),但它受制于 php.ini 里原始 memory_limit 的“天花板”——如果 ini 里设的是 128M,你用 ini_set 设成 256M 是允许的;但如果 ini 里是 128M,你设 -1,PHP 会静默失败,仍卡在 128M。
- 必须放在脚本最开头,在任何
require或循环前调用,否则可能已超限报错 -
ini_set("memory_limit", "-1")只在memory_limit原值不是-1时才有效;若 ini 里已是-1,再调用也没副作用 - CLI 脚本常用:比如跑
php artisan migrate前加一行ini_set('memory_limit', '512M');,比改全局配置更轻量
memory_limit 看似就一行,但实际生效依赖配置加载顺序、服务重启动作、以及指令作用域层级。最容易被忽略的是:XAMPP 的 Apache 和 CLI 共享同一个 php.ini,但修改后必须分别验证 Web 和命令行环境——很多人只测了浏览器,结果在终端跑 Composer 还是爆内存。



















