Answers:
最后我找到了答案:
只需将以下行添加到文件中出现错误的行之前
ini_set('memory_limit', '-1');
它将无限使用服务器的内存,工作正常。
感谢您提出建议的朋友。
UNLIMITED
。
您的脚本占用了太多内存。如果您的循环失控,并且每次循环创建对象或将其添加到数组中,通常会在PHP中发生这种情况。
检查无限循环。
如果这不是问题,请通过将设置为null的对象销毁完成的对象,以尝试提供帮助。例如。$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;
while
循环后关闭文件处理程序:fclose($file)
我在Laravel 5.6的php7.2中遇到了同样的问题。我只是memory_limit = 128M
根据应用程序的需求增加了php.ini中的变量数量。可能是256M / 512M / 1048M .....现在工作正常。
我也遇到了同样的问题,寻找phpinfo.ini,php.ini或.htaccess文件无济于事。最后,我查看了一些php文件,打开了它们,并检查了内部的代码以获取内存。最终,这个解决方案是我想到的,并且对我有用。我使用的是wordpress,因此此解决方案可能仅适用于wordpress内存大小限制问题。我的解决方案是,在/ public_html / wp-includes文件夹中打开default-constants.php文件。使用代码编辑器打开该文件,然后在作用域下找到内存设置,或者按住Ctrl + F组合键以找到单词“ memory”。在那里,你会过来和。只是增加它,在我的情况下是64 MB,我将其增加到128 MB,然后又增加到200 MB。wp_initial_constants
WP_MEMORY_LIMIT
WP_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');
wp-config.php
,以免将来的WordPress更新覆盖这些限制。此外,如果更改了“核心” WordPress文件,一些安全插件(例如WordFence)将抱怨…
wp-config.php
并添加两行(即define( 'WP_MEMORY_LIMIT', '200M' );
和)define( 'WP_MAX_MEMORY_LIMIT', '256M' );
,与“核心” WP上的文件(即下方的所有内容wp-includes
)不同,这些文件会被WP升级所覆盖,wp-config.php
不会-在那儿正是覆盖WP常数的确切目的!
-1
适用于短期运行的流程。例如,用于运行单元测试或作曲家installs / etc的php构建器容器。只是不要运行带有这样的设置的生产站点。
您可以通过在脚本中所有代码上方执行以下行来增加php脚本所允许的内存:
ini_set('memory_limit','-1'); // enabled the full memory available.
并在脚本中取消分配不需要的变量。
检查此php库:使用PHP释放内存
我注意到有很多答案,只是试图增加分配给有其位置的脚本的内存量,但更多的是,这意味着由于无法预料的数量或大小,某些东西的内存过于宽松。显然,如果您不是脚本的作者,那么您会受到作者的摆布,除非您感到野心勃勃:) PHP文档甚至说内存问题是由于“ 脚本编写不当 ”造成的。
应该提到的是 ini_set('memory_limit', '-1');
(无限制)会导致服务器不稳定,因为0 bytes free = bad things
。相反,应根据脚本尝试执行的操作以及计算机上的可用内存量来找到合理的平衡点。
更好的方法:如果您是脚本的创建者(或雄心勃勃的),则可以使用xdebug调试此类内存问题。最新版本(2.6.0-发布于2018-01-29)带回了内存配置文件,可向您显示哪些函数调用正在消耗大量内存。它暴露了脚本中很难找到的问题。通常,效率低下是在一个循环中,它并不期望接收到的容量大,但是每种情况都将留给读者练习:)
该Xdebug的文档是有帮助的,但它归结为3个步骤:
apt-get
与yum
等xdebug.profiler_enable = 1
、xdebug.profiler_output_dir = /where/ever/
如果您尝试读取文件,则会占用PHP的内存。例如,如果您尝试打开并读取MP3文件(例如$ data = file(“ http://mydomain.com/path/sample.mp3 ”),它将把所有内容都拉入内存。
正如Nelson所建议的,如果您确实需要使用这么多的内存,则可以增加最大内存限制。
WordPress用户添加行:
@ini_set('memory_limit', '-1');
在wp-settings.php中,您可以在wordpress安装的根文件夹中找到
我在命令行中运行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
一旦纠正它,我的过程就会开始正常运行。
在您的Magento根目录中运行此命令 php -d memory_limit=4G bin/magento