【问题标题】:PHP Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate XX bytes)PHP 致命错误:允许的内存大小为 268435456 字节已用尽(试图分配 XX 字节)
【发布时间】:2013-12-10 04:51:25
【问题描述】:

一开始是设置为128MB,后来出现这个错误,以为可能是内存不够,后来增加到256MB,但错误依旧。

出现此错误的代码中的字符串:

function clean($str) {
$clean_str = stripslashes (trim($str));
return $clean_str;
}

// clean slashes
foreach($result[$i] as $key=>$value) {
 if($key=="currency") continue;
 $result[$i][$key] = clean($result[$i][$key]);
}

为什么会这样?

【问题讨论】:

  • $str 究竟包含什么?
  • 我在其他文件中添加了问题代码,其中调用了函数 clean。变量 $key = 带有值的数据库中的字段名称。

标签: php memory-limit


【解决方案1】:

修改您的 php.ini 以将您的 memory_limit 增加到高于您当前配置的值 - 512MB 对于现代应用程序来说并不罕见。

【讨论】:

  • 你试过了吗?提高memory_limit 有效吗?
  • 不,我删除了这段代码。这不是我的 CMS,我认为是多余的代码。
  • 不...什么?首先,你试过了吗?其次,如果你试过了,有效果吗?
  • 好吧,那就随心所欲吧。
  • 有时,我在 stackoverflow 上比网络上大多数幽默网站更有趣。
【解决方案2】:

256MB(现在的默认值,以及 268435456 字节的数量)对于脚本来说是很大的内存,所以如果超过它,首先要检查的情况是:

无限循环会耗尽内存限制:

var $storage = null;
while(true){
  $storage += 'infinity!'; // Or something even more resource requiring.
}

另外,如果您从数据库中提取数据,并且不小心从包含大量数据且 sql 语句没有限制的表中提取了太多数据,则可能会耗尽您的 php 脚本内存:

select * from users where true; // On a million-row table, this could do it.

因此,一般而言,此消息是关于脚本耗尽其内存的,但通常不是调用提高限制,而是调用找出脚本行为异常的原因。

【讨论】:

  • 递归也会出现这个错误:function foo() { foo(); }; foo();.
【解决方案3】:

大约一天半前,当我尝试激活插件时,我的错误日志中突然出现这些错误。这导致了空白/白屏。

"mod_fcgid: stderr: PHP 致命错误:wp-content/plugins/w3-total-cache/lib/W3/ConfigKeys.php 中允许的内存大小为 268435456 字节已用尽(尝试分配 491520 字节)第 1329 行"

"mod_fcgid: stderr: PHP 致命错误:wp-content/plugins/w3-total-cache/lib/W3/ConfigKeys.php 中允许的内存大小为 268435456 字节已用尽(尝试分配 491520 字节)第 1329 行"

增加 php.ini 或 .htaccess 中的 memory_limit 并没有解决我的问题。我必须进入域的 php 设置并使用 Plesk 将安全模式选项从“默认”或“关闭”设置为“打开”。

【讨论】:

  • 嘿,你的意思是打开安全模式,解决了原来的问题?
猜你喜欢
  • 1970-01-01
  • 2020-04-10
  • 2014-03-07
  • 2014-02-07
  • 2014-09-27
  • 2020-07-13
  • 2017-11-06
  • 1970-01-01
相关资源
最近更新 更多