应修改 memory_limit 值以解决内存耗尽错误:一、改主 php.ini 文件并重启服务;二、Apache 下用 .htaccess 临时覆盖;三、脚本开头用 ini_set() 动态设置。

如果您在本地运行 PHP 程序时遇到“Allowed memory size exhausted”错误提示,则说明当前 PHP 进程分配的内存已超出限制。以下是调整 memory_limit 值的多种具体方法:
一、修改主 php.ini 文件
该方法适用于所有通过该 PHP 解释器启动的脚本,修改后需重启 Web 服务或 CLI 环境才能生效。
1、定位 php.ini 文件路径:在命令行执行 php --ini,查看 “Loaded Configuration File” 对应的绝对路径。
2、使用文本编辑器以管理员权限打开该 php.ini 文件。
立即学习“PHP免费学习笔记(深入)”;
3、搜索 memory_limit,找到类似 memory_limit = 128M 的行。
4、将数值修改为所需大小,例如改为 memory_limit = 512M 或 memory_limit = -1(表示无限制,仅限开发环境)。
5、保存文件,重启 Apache/Nginx/PHP-FPM 或终端会话使配置生效。
二、通过 .htaccess 文件临时覆盖(仅限 Apache + mod_php)
该方法无需修改全局配置,适用于共享主机或无法访问 php.ini 的场景,但仅对 Apache 模块模式有效。
1、确保网站根目录下存在可写的 .htaccess 文件。
2、在文件中添加一行:php_value memory_limit 384M。
3、若出现 500 错误,请确认服务器已启用 AllowOverride All 且 mod_php 已加载。
4、刷新网页验证是否生效,可通过 phpinfo() 页面确认 memory_limit 值已变更。
三、在 PHP 脚本内动态设置
该方法作用于单个脚本执行周期,优先级高于 php.ini,适合调试特定耗内存脚本。
1、在脚本最开头( 标签后立即)插入:ini_set('memory_limit', '768M');。
2、确保该语句位于任何可能触发内存分配的操作之前,如 require、file_get_contents 或数组初始化。
3、注意:若 php.ini 中设置了 memory_limit = -1,则此设置仍可被覆盖;但若服务器禁用了 ini_set()(通过 disable_functions),该方法将失效。
四、通过命令行参数覆盖(CLI 模式)
该方法专用于 PHP 命令行脚本,不影响 Web 服务配置,每次执行均可独立指定。
1、在终端中运行 PHP 脚本时,直接附加 -d memory_limit=1G 参数。
2、完整示例:php -d memory_limit=2G artisan optimize(Laravel 场景)。
3、也可创建别名简化操作,例如在 shell 配置中添加:alias phplarge='php -d memory_limit=2G'。
4、验证方式:执行 php -d memory_limit=512M -r "echo ini_get('memory_limit');",输出应为 512M。
五、检查实际生效配置来源
因 PHP 可能加载多个配置文件(如额外的 .ini 片段),需确认最终生效值来自哪个位置。
1、创建一个临时 PHP 文件,内容为:,通过浏览器访问。
2、在页面中查找 memory_limit 项,观察其 “Local Value” 和 “Master Value” 是否一致。
3、点击 “Configuration File (php.ini) Path” 和 “Additional .ini files parsed” 对应路径,逐一检查各文件中是否存在重复定义。
4、若发现多个 memory_limit 设置,以最后加载的文件中的值为准,需删除或注释其他冲突行。











