phpEnv中修改memory_limit需确认并编辑真实生效的php.ini(如C:\phpEnv\php\php.ini),设为memory_limit = 512M等有效值,保存后在控制面板重启Apache;切勿修改CLI配置或忽略单位、注释、disable_functions等限制。

phpEnv 是 Windows 下的轻量级 PHP 本地环境套件,它默认使用 Apache + PHP(模块模式)组合,不带 php-fpm。它的 php.ini 文件位置固定但容易被忽略,直接改错文件或漏重启服务是内存调大后仍报错的最常见原因。
确认 phpEnv 正在用哪个 php.ini
phpEnv 多数版本把 PHP 配置文件放在:C:\phpEnv\php\php.ini(路径可能含版本号,如 php74\php.ini)。别去改 C:\phpEnv\apache\conf\php.ini 或其他目录下的同名文件——那些不会生效。
验证方法:在 phpEnv 启动状态下,新建一个 info.php 放到网站根目录(通常是 C:\phpEnv\www),内容为:
<?php phpinfo(); ?>
浏览器访问 http://localhost/info.php,搜索 “Loaded Configuration File”,看到的路径才是真实生效的 php.ini。
立即学习“PHP免费学习笔记(深入)”;
修改 phpEnv 的 memory_limit 值
用记事本或 VS Code 以管理员身份打开上一步确认的 php.ini 文件,搜索 memory_limit。
- 如果找到类似
memory_limit = 128M的行,直接改成你需要的值,比如memory_limit = 512M - 如果该行被注释(前面有分号
;),删掉分号再改值 - 如果整行不存在,就在文件末尾新增一行:
memory_limit = 512M - 不要写成
memory_limit = 512(缺单位)或memory_limit = 512MB(PHP 只认M,不是MB)
保存后,必须在 phpEnv 控制面板里点击 “Restart Apache” —— 仅重启 Apache 就够,不用关整个 phpEnv 或重开命令行。
为什么改了 php.ini 还报 Allowed memory size exhausted
常见陷阱不止一个:
- 你改的是 CLI 模式下的
php.ini(比如C:\phpEnv\php\php-cli.ini),但 phpEnv 的 Apache 走的是模块模式,读的是另一个php.ini - phpEnv 启用了 OPcache 或 Xdebug,它们本身吃内存;
memory_limit是给脚本用的,不包含 Zend 引擎自身开销,所以实际需要留出余量 - 某些 phpEnv 版本会把 Apache 的
httpd.conf里硬编码了 PHPIniDir,指向错误路径;可搜索PHPIniDir确认是否和phpinfo()显示的一致 - 脚本里调用了
ini_set('memory_limit', ...),但设得比php.ini还小,反而限制更死
临时绕过、快速验证是否生效
如果你只是想立刻跑通某个脚本,不想动配置,可以在脚本开头加:
ini_set('memory_limit', '768M');
但注意三点:
- 这行必须出现在
<?php之后第一行,不能有空格或输出 - 如果 phpEnv 的
php.ini中设置了disable_functions = ini_set,这行就完全无效(查phpinfo()的 “disable_functions” 项确认) - CLI 下运行该脚本(如
php test.php)时,这个设置不生效——CLI 读的是另一份php.ini
真正稳定可靠的方案,永远是改对那个被 Apache 加载的 php.ini 并重启 Apache。其它方式都是补丁,且各自有生效边界。



















