致命错误:允许的内存大小为67108864字节耗尽(尝试分配13965430字节)
PHPInfo显示我有一个128M的memory_limit,所以我很困惑为什么错误说我只有64M . phpinfo是否可能报错?或者为PHP使用两个单独的php.inis?
这个错误是由我的一个同事在我不知情的情况下添加的一个主要php文件中的ini_set调用引起的 .
ini_set('memory_limit', '128M');
要么
php.ini => memory_limit = 128M
php_value memory_limit 128M
必须在多个位置配置内存 .将 memory_limit 设置为512M:
memory_limit
sudo vi /etc/php5/cgi/php.ini sudo vi /etc/php5/cli/php.ini sudo vi /etc/php5/apache2/php.ini Or /etc/php5/fpm/php.ini
重启服务:
sudo service service php5-fpm restart sudo service service nginx restart
sudo service apache2 restart
最后它应该解决 memory_limit 的问题
1 check current limit: (in my os)php -i | grep limit => memory_limit => 256M => 256M 2 locate php.ini php --ini => Configuration File (php.ini) Path: /etc Loaded Configuration File: /etc/php.ini Scan for additional .ini files in: /etc/php.d Additional .ini files parsed: /etc/php.d/curl.ini ... 3 change memory_limit in php.ini vi /etc/php.ini memory_limit = 512M 4 restart nginx and (php-fpm if being used) service php-fpm restart service nginx restart
我有同样的问题 . 我找到了答案:
ini_set('memory_limit', '-1');
Update: 请谨慎使用,因为如果PHP脚本开始使用过多的内存,这可能会降低系统速度,从而导致大量的交换空间使用 . 你可以使用它,如果你知道程序不会占用太多内存,你也不知道现在设置多少 . 但是你最终会发现它需要多少内存才能用于该程序 .
您应该始终将内存限制视为@ şarkı dinle 所回答的某个值 .
şarkı dinle
ini_set('memory_limit', '512M');
PHP的配置可以在多个地方设置:
主系统 php.ini (通常在/ etc某处)
php.ini
在Apache的配置中某处(httpd.conf或每站点.conf文件,通过 php_value )
php_value
CLI和CGI可以有不同的 php.ini (使用命令 php -i | grep memory_limit 来检查CLI配置文件)
php -i | grep memory_limit
本地.htaccess文件(也是 php_value )
in-script(通过 ini_set() )
ini_set()
在PHPinfo的输出中,“Master”值是已编译的默认值,“Local”值是实际生效的值 . 它可以与默认值保持不变,也可以在上述任何位置覆盖 .
另请注意,PHP通常具有不同的.ini文件,用于命令行和基于Web服务器的操作 . 从命令行检查 phpinfo() 将报告与在基于Web的脚本中运行它时不同的值 .
phpinfo()
如果您确定在配置php.ini后重新启动了Apache,那么您可能会查看错误的php.ini文件
如果通过增加内存限制,您已经摆脱了错误并且您的代码现在可以正常工作,那么您将需要采取措施来减少内存使用量 . 以下是一些可以减少它的方法:
如果您正在阅读文件,请逐行阅读,而不是将整个文件读入内存 . 看看fgets和SplFileObject :: fgets . 如果您使用的是PHP 5.3,请升级到新版本的PHP . PHP 5.4和5.5使用更少的内存 .
避免将大型数据集加载到数组中 . 相反,请处理较大数据集的较小子集,并在必要时将数据保存到数据库中以减少内存使用 .
尝试使用第三方库的最新版本或次要版本(例如1.9.3与1.8.2相比),并使用更稳定的版本 . 有时,新版本的库会更有效地编写 .
如果您有一个不常见或不稳定的PHP扩展,请尝试升级它 . 它可能有内存泄漏 .
如果您正在处理大型文件而您无法逐行阅读,请尝试将文件分成许多较小的文件并单独处理 . 禁用您不需要的PHP扩展 .
在问题区域中,取消设置包含大量数据的变量,以后的代码中不需要这些变量 .
来自:https://www.airpair.com/php/fatal-error-allowed-memory-size
7 回答
要么
要么
必须在多个位置配置内存 .
将
memory_limit
设置为512M:重启服务:
要么
最后它应该解决
memory_limit
的问题我有同样的问题 . 我找到了答案:
注意:服务器的内存使用量不受限制 .
Update: 请谨慎使用,因为如果PHP脚本开始使用过多的内存,这可能会降低系统速度,从而导致大量的交换空间使用 . 你可以使用它,如果你知道程序不会占用太多内存,你也不知道现在设置多少 . 但是你最终会发现它需要多少内存才能用于该程序 .
您应该始终将内存限制视为@
şarkı dinle
所回答的某个值 .给予无限的内存是不好的做法,而是我们应该给出一些我们可以承受的最大限制,然后优化我们的代码或添加一些RAM .
PHP的配置可以在多个地方设置:
主系统
php.ini
(通常在/ etc某处)在Apache的配置中某处(httpd.conf或每站点.conf文件,通过
php_value
)CLI和CGI可以有不同的
php.ini
(使用命令php -i | grep memory_limit
来检查CLI配置文件)本地.htaccess文件(也是
php_value
)in-script(通过
ini_set()
)在PHPinfo的输出中,“Master”值是已编译的默认值,“Local”值是实际生效的值 . 它可以与默认值保持不变,也可以在上述任何位置覆盖 .
另请注意,PHP通常具有不同的.ini文件,用于命令行和基于Web服务器的操作 . 从命令行检查
phpinfo()
将报告与在基于Web的脚本中运行它时不同的值 .如果您确定在配置php.ini后重新启动了Apache,那么您可能会查看错误的php.ini文件
如果通过增加内存限制,您已经摆脱了错误并且您的代码现在可以正常工作,那么您将需要采取措施来减少内存使用量 . 以下是一些可以减少它的方法:
如果您正在阅读文件,请逐行阅读,而不是将整个文件读入内存 . 看看fgets和SplFileObject :: fgets . 如果您使用的是PHP 5.3,请升级到新版本的PHP . PHP 5.4和5.5使用更少的内存 .
避免将大型数据集加载到数组中 . 相反,请处理较大数据集的较小子集,并在必要时将数据保存到数据库中以减少内存使用 .
尝试使用第三方库的最新版本或次要版本(例如1.9.3与1.8.2相比),并使用更稳定的版本 . 有时,新版本的库会更有效地编写 .
如果您有一个不常见或不稳定的PHP扩展,请尝试升级它 . 它可能有内存泄漏 .
如果您正在处理大型文件而您无法逐行阅读,请尝试将文件分成许多较小的文件并单独处理 . 禁用您不需要的PHP扩展 .
在问题区域中,取消设置包含大量数据的变量,以后的代码中不需要这些变量 .
来自:https://www.airpair.com/php/fatal-error-allowed-memory-size