41

致命错误:允许的内存大小为 67108864 字节已用尽(尝试分配 13965430 字节)

PHPInfo 显示我的 memory_limit 为 128M,所以我很困惑为什么错误说我只有 64M。phpinfo有可能报错吗?还是让 PHP 使用两个单独的 php.inis?

该错误是由我的同事在我不知情的情况下添加的主要 php 文件之一中的 ini_set 调用引起的。

4

8 回答 8

38

PHP的配置可以在多个地方设置:

  1. 主系统php.ini(通常在 /etc 某处)
  2. Apache 配置中的某处(httpd.conf 或每个站点的 .conf 文件,通过php_value
  3. CLI & CGI 可以有不同的php.ini(使用命令php -i | grep memory_limit检查 CLI conf)
  4. 本地 .htaccess 文件(也php_value
  5. 脚本内(通过ini_set()

在 PHPinfo 的输出中,“Master”值是编译后的默认值,“Local”值是实际生效的值。它可以与默认值保持一致,也可以在上述任何位置被覆盖。

另请注意,PHP 通常具有用于命令行和基于 Web 服务器的操作的不同 .ini 文件。phpinfo()从命令行检查将报告不同的值,而不是在基于 Web 的脚本中运行它。

于 2010-11-04T12:31:29.680 回答
25
ini_set('memory_limit', '128M'); 

或者

php.ini  =>  memory_limit = 128M

或者

php_value memory_limit 128M
于 2011-03-26T23:14:40.287 回答
18

我有同样的问题。我找到了答案:

ini_set('memory_limit', '-1');

注意:这将占用服务器的无限内存使用。

更新: 请谨慎使用,因为如果 PHP 脚本开始使用过多内存,这可能会降低系统速度,从而导致大量交换空间使用。如果您知道程序不会占用太多内存并且您现在不知道要设置多少内存,则可以使用它。但是您最终会发现该程序需要多少内存。

您应该始终将内存限制为 @ 回答的某个值şarkı dinle

ini_set('memory_limit', '512M');

提供无限内存是不好的做法,我们应该给出一些我们可以承受的最大限制,然后优化我们的代码或添加一些 RAM。

于 2012-04-14T07:21:40.920 回答
6

内存必须在多个位置进行配置。
设置memory_limit为 512M:

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

于 2015-05-08T07:21:55.930 回答
3

如果您确定在配置 php.ini 后重新启动了 Apache,那么您可能正在查看错误的 php.ini 文件

于 2010-11-04T12:27:33.497 回答
2
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
于 2017-11-22T03:56:58.600 回答
1

如果通过增加内存限制您已经摆脱了错误并且您的代码现在可以工作,那么您需要采取措施来减少内存使用量。您可以采取以下措施来减少它:

如果您正在读取文件,请逐行读取它们,而不是将整个文件读入内存。查看 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

于 2015-12-17T15:41:17.220 回答
0

这个问题是因为 php.ini 定义的限制被排除了,但有很多解决方案,但简单的一个是找到你的本地服务器文件夹,然后找到 php 文件夹,在那个文件夹中有 php.ini 文件,其中包含所有声明这些类型的设置。您只需要找到一个并更改该值。但是在这种情况下,一旦您更改了 localhost 文件,就会出现一个大问题,但是当您想将站点放在服务器上时,服务器又会产生同样的问题,并且您再次对服务器遵循相同的问题。但是您也知道 .htaccess 文件,这是在不更改核心文件的情况下做很多事情的最佳且单一的地方之一。就像您更改 www 路由,从 url 中删除 .php 或其他扩展名或添加一个。同样,您还可以定义 php.ini 的默认值。

php_value upload_max_filesize 1000M
php_value post_max_size 99500M
php_value memory_limit 500M
php_value max_execution_time 300

更改后,如果您想检查更改,只需运行 php 代码

<?php phpinfo(); ?> 

它将向您显示 php 配置的所有详细信息。所以你会发现你的变化。

注意:要定义无限制,只需添加 -1 就像 php_value memory_limit -1 这不好,而且大多数时候会减慢您的服务器。但是,如果您想减少限制,那么这个选项也适合您。如果刷新后您的页面更改不会反映您必须重新启动本地服务器一次以进行更改。

祝你好运。希望它会有所帮助。 想要下载 .htaccess 文件点击这里。

于 2019-03-15T11:27:18.437 回答