PHP内存耗尽报错时,可通过五种方式解决:一、用ini_set临时调高单脚本限制;二、修改php.ini全局设置并重启服务;三、通过.htaccess局部调整(仅Apache模块);四、优化代码减少内存占用;五、调整OPcache与垃圾回收策略。

如果PHP脚本在执行过程中因内存耗尽而报错“Allowed memory size exhausted”,则说明当前PHP配置的内存限制低于脚本实际所需。以下是多种直接有效的解决路径:
一、临时提高单个脚本内存限制
此方法适用于仅需运行特定脚本时突破默认限制,不改变全局配置,操作即时生效。
1、在PHP文件最顶部(必须在任何输出或执行逻辑之前)添加以下代码:
2、使用ini_set函数设置内存上限,例如设定为256MB:
ini_set('memory_limit', '256M');
立即学习“PHP免费学习笔记(深入)”;
3、若需无限制(仅限可信环境且调试阶段),可设为-1:
ini_set('memory_limit', '-1');
二、修改php.ini全局配置
该方式影响所有通过此PHP环境执行的脚本,需重启Web服务器或PHP-FPM服务才能生效,适合长期稳定运行场景。
1、定位当前生效的php.ini文件路径:创建一个PHP文件,写入并访问,查找Loaded Configuration File项的值。
2、用文本编辑器打开该php.ini文件,搜索memory_limit字段。
3、将原值如memory_limit = 128M修改为更大值,例如:
memory_limit = 512M
4、保存文件后,重启Apache:
sudo systemctl restart apache2
5、若使用Nginx + PHP-FPM,则重启PHP-FPM:
sudo systemctl restart php-fpm
三、通过.htaccess文件局部调整(仅限Apache模块模式)
适用于共享主机或无法修改php.ini的环境,作用范围限定于当前目录及子目录下的PHP脚本。
1、确认服务器启用AllowOverride Options=All或AllowOverride All指令。
2、在网站根目录或目标子目录下创建或编辑.htaccess文件。
3、添加以下行:
php_value memory_limit 384M
4、注意:此方式在PHP以FastCGI或FPM模式运行时无效。
四、优化脚本减少内存占用
单纯扩容治标不治本;对大数据处理、循环加载、未释放资源等典型高内存场景,应从代码层面削减峰值消耗。
1、避免一次性读取大文件到内存,改用fopen + fgets逐行处理。
2、数据库查询时禁用fetchAll(),改用fetch()或PDO::FETCH_ASSOC配合while循环。
3、及时调用unset()释放不再使用的大型数组或对象引用。
4、检查是否存在递归调用未设终止条件,或无限循环导致内存持续增长。
5、使用memory_get_usage(true)监控各阶段内存变化,定位泄漏点:
echo '当前内存:' . memory_get_usage(true) . ' bytes';
五、调整OPcache与垃圾回收策略
PHP内部机制配置不当可能加剧内存压力,合理启用缓存与自动回收可缓解突发峰值。
1、确保opcache.enable=1且opcache.memory_consumption足够(建议≥128)。
2、开启垃圾回收机制:
zend.enable_gc = 1
3、在脚本中主动触发GC(尤其在长循环内):
gc_collect_cycles();
4、若使用PHP 7.3+,可启用opcache.preload预加载常用类,降低重复解析开销。











