允许的内存大小33554432字节用尽(试图分配43148176字节)在PHP中
这个错误信息正在呈现,有什么build议吗?
允许的内存大小33554432字节用尽(试图分配43148176字节)在PHP中
最后我find了答案:
只要将下面这行添加到您的文件中出现错误的行之前
ini_set('memory_limit', '-1');
它会占用无限的内存使用服务器,它工作正常。
感谢您给build议的朋友。
这里有两个简单的方法来增加共享主机的限制:
-
如果您有权访问您的PHP.ini文件,请在PHP.ini中更改该行。如果您的行显示32M,请尝试64M:
memory_limit = 64M ; Maximum amount of memory a script may consume (64MB)
memory_limit = 64M ; Maximum amount of memory a script may consume (64MB)
-
如果您没有访问PHP.ini,请尝试将其添加到.htaccess文件中:
php_value memory_limit 64M
你的脚本使用了太多的内存。 如果您的循环已经失控,并且您正在创build对象或在循环的每个循环中添加数组,那么这经常会发生在PHP中。
检查无限循环。
如果这不是问题,请尝试通过将其设置为null来销毁完成的对象来帮助PHP。 例如。 $OldVar = null;
检查错误实际发生的代码。 你会期望该行分配大量的内存? 如果不是的话,试着弄清楚出了什么问题
做:
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;
不幸的是,在PHP中以一种比你意识到的消耗内存更快的方式很容易。 复制string,数组和对象而不是使用引用可以做到这一点,尽pipePHP 5应该比PHP 4更自动地执行此操作。但是,与处理最小的逻辑单元相比,在几个步骤中处理整个数据集也是浪费的一次。 经典的例子是使用数据库中的大型结果集:大多数程序员将整个结果集读入一个数组,然后用foreach()
循环一次或多次。 使用while()
循环一次获取和处理一行的内存效率要高得多。 同样的事情适用于处理文件。
如果你想阅读大文件,你应该阅读一点点,而不是一次阅读。
这很简单:如果您一次读取1 MB的大文件,则至less需要1 MB的内存才能保存数据。
所以你应该使用fopen
和fread
一点一点地阅读它们。
您可以通过在脚本的所有代码之上执行以下行来增加允许执行php脚本的内存:
ini_set('memory_limit','-1'); // enabled the full memory available.
还要在脚本中分配不需要的variables。
检查这个PHP库: 释放与PHP的内存
我也有同样的问题,寻找phpinfo.ini,php.ini或.htaccess文件无济于事。 最后,我看了一些php文件,打开它们并检查内存中的代码。 最后,这个解决scheme是我出来,它为我工作。 我使用wordpress,所以这个解决scheme可能只适用于wordpress内存大小限制的问题。 我的解决scheme,在/ public_html / wp-includes文件夹中打开default-constants.php文件。 使用代码编辑器打开该文件,并在wp_initial_constants
范围内find内存设置,或者只需按Ctrl + F即可find单词“memory”。 在那里您将通过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');
我们有类似的情况,我们试着在回答的顶部给出ini_set('memory_limit','-1'); 和一切工作正常,压缩的图像文件大于1MB的KB。
wordpress用户添加行:
@ini_set('memory_limit', '-1');
在wp-settings.php中,你可以在wordpress安装的根文件夹中find它
如果您正在尝试读取文件,则会占用PHP中的内存。 例如,如果你想打开并读取一个MP3文件(比如说,$ data = file(“ http://mydomain.com/path/sample.mp3 ”),它将把它全部放到内存中。
正如纳尔逊所说,如果你真的需要使用这么多的内存,你可以努力增加你的最大内存限制。
写
ini_set('memory_limit', '-1');
在你的index.php在php标签打开后的顶部
我没有更新我的主机,数据库是只读的。 Joomla需要写会议,不能这样做。