php多少字节等于1m,在php中允许的内存大小为33554432字节(试图分配43148176字节)...

在php中允许的内存大小为33554432字节(试图分配43148176字节)

正在显示此错误消息,有任何建议吗?

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

19个解决方案

278 votes

最后我找到了答案:

只需将以下行添加到您在文件中收到错误的行之前

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

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

感谢您提供建议的朋友。

panidarapu answered 2019-03-02T02:14:35Z

54 votes

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

如果您有权访问PHP.ini文件,请更改PHP.ini中的行如果您的行显示32M,请尝试64M:php_value memory_limit 64M

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

Haider Abbas answered 2019-03-02T02:15:29Z

39 votes

您的脚本使用了太多内存。 如果您的循环已经失控并且您正在创建对象或在循环的每次传递中添加到数组,这通常可以在PHP中发生。

检查无限循环。

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

检查错误实际发生的代码。 您是否希望该线路分配大量内存? 如果没有,试着弄清楚出了什么问题......

Rik Heywood answered 2019-03-02T02:16:21Z

29 votes

做:

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;

assetCorp answered 2019-03-02T02:17:01Z

16 votes

不幸的是,很容易在PHP中编程,以比你意识到的更快地消耗内存。 复制字符串,数组和对象而不是使用引用会做到这一点,尽管PHP 5应该比PHP 4更自动地执行此操作。但与处理最小的逻辑单元相比,在几个步骤中完整地处理数据集也是浪费 一次。 经典的例子是使用来自数据库的大型结果集:大多数程序员将整个结果集提取到一个数组中,然后使用foreach()将其循环一次或多次。使用while()循环来获取和处理一行,可以节省更多内存 一次。 同样的事情适用于处理文件。

staticsan answered 2019-03-02T02:17:29Z

13 votes

如果你想读取大文件,你应该一点一点地阅读它们,而不是一次读取它们。

这是一个简单的数学:如果你一次读取1 MB大文件,那么同时需要至少1 MB的内存来保存数据。

所以你应该使用fopen&amp ;;fread。

Gumbo answered 2019-03-02T02:18:11Z

7 votes

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

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

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

检查这个php库:用PHP释放内存

Sanjay Kumar N S answered 2019-03-02T02:18:51Z

4 votes

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

// 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');

garakchy answered 2019-03-02T02:19:29Z

3 votes

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

dynamicflow answered 2019-03-02T02:19:57Z

3 votes

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

Định Nguyễn Thế answered 2019-03-02T02:20:17Z

2 votes

如果您正在尝试读取文件,那将占用PHP中的内存。 例如,如果您正在尝试打开并读取MP3文件(例如,$ data = file(“[http://mydomain.com/path/sample.mp3”]),那么它将全部拉出来 进入记忆。

正如尼尔森建议的那样,如果你真的需要使用这么多内存,你可以努力增加你的最大内存限制。

Beau Simensen answered 2019-03-02T02:20:59Z

2 votes

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

在打开php标签后的index.php中

Prafull answered 2019-03-02T02:21:41Z

2 votes

wordpress用户添加行:

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

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

Praveesh P answered 2019-03-02T02:22:24Z

1 votes

我没有更新我的托管,数据库是只读的。 Joomla需要编写会话而无法完成。

Alberto M answered 2019-03-02T02:22:54Z

1 votes

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

DavGarcia answered 2019-03-02T02:23:31Z

1 votes

我注意到许多答案只是试图增加给予一个有其位置的脚本的内存量,但更多时候这意味着由于数量不大的音量或大小,某些内容过于宽松。 显然,如果你的作者不是你的作者,那么除非你感到雄心勃勃,否则你的作者会怜悯:) PHP文档甚至说内存问题是由于“写得不好的脚本”

应该提到的是,xdebug.profiler_enable = 1(无限制)可能导致服务器不稳定,如xdebug.profiler_output_dir = /where/ever/.而是通过脚本尝试执行的操作和计算机上的可用内存量找到合理的平衡。

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

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

安装它 - 可通过xdebug.profiler_enable = 1和xdebug.profiler_output_dir = /where/ever/等获得

配置它 - xdebug.ini:xdebug.profiler_enable = 1,xdebug.profiler_output_dir = /where/ever/

在QCacheGrind,KCacheGrind等工具中查看配置文件

SeanDowney answered 2019-03-02T02:24:57Z

0 votes

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

这是为php7.0

我犯错误的php.ini路径:memory_limit = 256

我订了memory_limit = 256(意思是256 bytes)

而不是memory_limit = 256M(意思是memory_limit = 128M)。

; 脚本可能消耗的最大内存量(128MB)

;[http://php.net/memory-limit]

memory_limit = 128M

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

theBuzzyCoder answered 2019-03-02T02:26:23Z

0 votes

将服务器切换到php 7.x解决了我的问题

Tech Nomad answered 2019-03-02T02:26:52Z

0 votes

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

Ziaur Rahman answered 2019-03-02T02:27:22Z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值