330

正在显示此错误消息,有什么建议吗?

php中允许的内存大小为33554432字节耗尽(尝试分配43148176字节)

4

25 回答 25

375

最后我找到了答案:

只需在 php 文件中出现错误的行之前添加此行

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

它需要无限的服务器内存使用,它工作正常。

考虑'44M'而不是'-1'安全的内存使用。

于 2009-01-10T03:38:18.773 回答
69

以下是增加共享主机限制的两种简单方法:

  1. 如果您有权访问您的 PHP.ini 文件,请更改 PHP.ini 中的行 如果您的行显示 32M,请尝试 64M: memory_limit = 64M ; Maximum amount of memory a script may consume (64MB)

  2. 如果您无权访问 PHP.ini,请尝试将其添加到 .htaccess 文件中: php_value memory_limit 64M

于 2011-03-10T01:52:12.460 回答
52

您的脚本使用了太多内存。如果您有一个失控的循环并且您在循环的每次通过时创建对象或添加到数组中,这通常会在 PHP 中发生。

检查无限循环。

如果这不是问题,请尝试通过将已完成的对象设置为 null 来销毁对象来帮助 PHP。例如。$OldVar = null;

检查错误实际发生的代码。您是否希望该行分配大量内存?如果没有,请尝试找出问题所在...

于 2009-01-06T08:27:52.100 回答
45

正在做 :

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

从来都不是好事。如果你想读取一个非常大的文件,最好一点一点地复制它。尝试以下代码以获得最佳实践。

$path = 'path_to_file_.txt';

$file = fopen($path, 'r');
$len = 1024; // 1MB is reasonable for me. You can choose anything though, but do not make it too big
$output = fread( $file, $len );

while (!feof($file)) {
    $output .= fread( $file, $len );
}

fclose($file);

echo 'Output is: ' . $output;
于 2015-03-07T12:55:53.290 回答
21

不幸的是,在 PHP 中以一种比你想象的更快消耗内存的方式编程是很容易的。复制字符串、数组和对象而不是使用引用就可以了,尽管 PHP 5 应该比 PHP 4 更自动地做到这一点。但是与处理最小的逻辑单元相比,通过几个步骤处理完整的数据集也很浪费一次。典型的例子是使用数据库中的大型结果集:大多数程序员将整个结果集提取到一个数组中,然后使用foreach(). while()使用循环一次获取和处理一行的内存效率要高得多。同样的事情也适用于处理文件。

于 2009-01-06T22:22:24.787 回答
21

我在使用 laravel 5.6 的 php7.2 中遇到了同样的问题。我只是memory_limit = 128M根据应用程序的需要增加 php.ini 中的变量数量。它可能是 256M/512M/1048M .....现在它工作正常。

于 2018-07-08T09:56:26.767 回答
15

如果你想读取大文件,你应该一点一点地读取它们,而不是一次读取它们。
这很简单:如果您一次读取一个 1 MB 的大文件,那么同时至少需要 1 MB 的内存来保存数据。

fopen因此,您应该使用&一点一点地阅读它们fread

于 2009-01-22T10:00:01.683 回答
7

我也遇到了同样的问题,查找 phpinfo.ini、php.ini 或 .htaccess 文件无济于事。最后,我查看了一些 php 文件,打开它们并检查了里面的代码以获取内存。最后,这个解决方案是我提出的,它对我有用。我使用的是 wordpress,所以这个解决方案可能只适用于 wordpress 内存大小限制问题。我的解决方案是在/public_html/wp-includes文件夹中打开default-constants.php文件。使用代码编辑器打开该文件,并在作用域下找到内存设置,或者只需 Ctrl+F 即可找到“内存”一词。在那里你会过来。只是增加它,在我的情况下它是 64 MB,我将它增加到 128 MB,然后增加到 200 MB。wp_initial_constantsWP_MEMORY_LIMITWP_MAX_MEMORY_LIMIT

// Define memory limits.
if ( ! defined( 'WP_MEMORY_LIMIT' ) ) {
    if ( false === wp_is_ini_value_changeable( 'memory_limit' ) ) {
        define( 'WP_MEMORY_LIMIT', $current_limit );
    } elseif ( is_multisite() ) {
        define( 'WP_MEMORY_LIMIT', '200M' );
    } else {
        define( 'WP_MEMORY_LIMIT', '128M' );
    }
}

if ( ! defined( 'WP_MAX_MEMORY_LIMIT' ) ) {
    if ( false === wp_is_ini_value_changeable( 'memory_limit' ) ) {
        define( 'WP_MAX_MEMORY_LIMIT', $current_limit );
    } elseif ( -1 === $current_limit_int || $current_limit_int > 268435456 /* = 256M */ ) {
        define( 'WP_MAX_MEMORY_LIMIT', $current_limit );
    } else {
        define( 'WP_MAX_MEMORY_LIMIT', '256M' );
    }
}

顺便说一句,请不要执行以下代码,因为这是不好的做法:

ini_set('memory_limit', '-1');
于 2017-01-04T21:17:58.543 回答
6

您可以通过在脚本中的所有代码上方执行以下行来增加允许 php 脚本的内存:

ini_set('memory_limit','-1'); // enabled the full memory available.

并且还取消分配脚本中不需要的变量。

于 2015-11-19T07:26:32.877 回答
6

我注意到许多答案只是试图增加分配给有其位置的脚本的内存量,但通常这意味着由于不可预见的体积或大小,某些东西在内存方面过于宽松。显然,如果您不是脚本的作者,除非您雄心勃勃,否则您将受到作者的摆布:) PHP 文档甚至说内存问题是由于“脚本编写不当”造成的

需要说明的是ini_set('memory_limit', '-1');(无限制)可能会导致服务器不稳定,因为0 bytes free = bad things. 相反,请通过脚本尝试执行的操作和机器上的可用内存量找到合理的平衡点。

更好的方法:如果您是脚本的作者(或雄心勃勃),您可以使用xdebug调试此类内存问题。最新版本(2.6.0 - 2018-01-29 发布)带回了内存分析,显示哪些函数调用正在消耗大量内存。它暴露了脚本中很难找到的问题。通常,效率低下是在一个不期望接收量的循环中,但每个案例都将作为练习留给读者:)

xdebug 文档很有帮助,但它归结为 3 个步骤:

  1. 安装它-可通过apt-getyum
  2. 配置它- xdebug.ini: xdebug.profiler_enable = 1,xdebug.profiler_output_dir = /where/ever/
  3. 在QCacheGrindKCacheGrind等工具中查看配置文件
于 2018-02-22T23:34:58.387 回答
5
ini_set('memory_limit', '-1');
于 2018-01-12T03:08:12.303 回答
3

如果你试图读取一个文件,那将占用 PHP 的内存。例如,如果您尝试打开并读取 MP3 文件(例如 $data = file(" http://mydomain.com/path/sample.mp3 " ),它将把它全部拉入内存.

正如 Nelson 建议的那样,如果您确实需要使用这么多内存,则可以努力增加最大内存限制。

于 2009-01-06T08:32:11.107 回答
1

我们有类似的情况,我们尝试在答案的顶部给出 ini_set('memory_limit', '-1'); 一切正常,压缩图像文件大于 1MB 到 KB。

于 2010-12-23T06:43:06.493 回答
0

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

打开 php 标签后,在顶部的 index.php 中

于 2014-10-14T13:23:10.000 回答
0

在 Wordpress 中切换到新主题后,我收到了相同的错误消息。PHP 运行的是 5.3 版,所以我切换到 7.2。这解决了这个问题。

于 2018-02-13T18:03:23.433 回答
0

如果您使用的是共享主机,您将无法强制增加 php 大小限制。

只需转到您的 cpanel 并将您的 php 版本升级到 7.1 及更高版本即可。

于 2019-08-05T14:30:48.960 回答
0

我想分享我在这个问题上的经验!

假设你有 A 类和 B 类。

class A {
    protected $userB;

    public function __construct() {
        $this->userB = new B();
    }
}

class B {
    protected $userA;

    public function __construct() {
        $this->userA = new A();
    }
}

这将启动可能会产生此类问题的对象链形成!

于 2021-01-18T09:10:07.863 回答
0

我运行了以下命令composer update,现在正在工作。如果它不能解决您的问题,请增加文件memory_limit中的内存限制php.ini

于 2022-01-20T20:29:50.973 回答
-1

wordpress 用户添加行:

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

在 wp-settings.php 中,您可以在 wordpress 安装的根文件夹中找到

于 2015-01-21T19:05:19.740 回答
-1

我没有更新我的主机并且数据库是只读的。Joomla 需要编写会话并且无法做到。

于 2017-06-06T08:51:29.057 回答
-1

我遇到了在命令行中运行 php 的相同问题。最近,我更改了php.ini文件并在更改php.ini时出错了

这是针对 php7.0

我犯错的 php.ini 的路径:/etc/php/7.0/cli/php.ini

我已经设置memory_limit = 256(这意味着256 bytes
而不是memory_limit = 256M(这意味着256 Mega bytes)。

; 脚本可能消耗的最大内存量(128MB)
http://php.net/memory-limit
memory_limit = 128M

一旦我纠正了它,我的过程就开始运行良好。

于 2018-02-07T05:56:48.530 回答
-1

如果您使用的是 laravel,请使用这种方式

public function getClientsListApi(Request $request){ print_r($request->all()); //for all request print_r($request->name); //for all name }

代替

public function getClientsListApi(Request $request){ print_r($request); // it show error as above mention }

于 2019-04-20T13:12:04.553 回答
-1

在您的 Magento 根目录中运行此命令php -d memory_limit=4G bin/magento

于 2019-07-23T10:30:32.067 回答
-1
COMPOSER_MEMORY_LIMIT=-1 composer require mageplaza/module-core
于 2021-06-04T06:34:36.267 回答
-1

wordpress 用户添加行:

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

或者

在 cpanel 中将 memory_limit 设置为 -1

在此处输入图像描述

于 2021-08-22T07:02:15.923 回答