【问题标题】:wordpress Fatal error: Allowed memory size (weird)wordpress 致命错误:允许的内存大小(奇怪)
【发布时间】:2018-12-15 21:12:38
【问题描述】:

今天,当我尝试在本地编辑我的网站时,出现了这样的奇怪错误:

致命错误:允许的内存大小为 268435456 字节已用尽(已尝试 分配 6874029536211531203 字节) D:\wamp64ario\www\owjgraph\wp-includes\functions.php 在第 5231 行

为什么它试图分配给 6874029536211531203?

有时我在尝试访问登录页面时会收到此信息,有时在仪表板或更新帖子等不同情况下会收到此信息。

我尝试了很多东西但没有成功:

  1. 我在本地的其他网站(没有插件或各种插件)得到同样的错误。
  2. 在 WAMP 中将 memory_limit 增加到 256、512 或 1GB,但没有成功。
  3. 听说版本 4.9.7 有一些内存泄漏错误,所以我降级到旧版本,问题仍然存在。
  4. 卸载并重新安装 WAMP。
  5. 安装其他本地工具,例如 MAMP。
  6. 清除缓存和 cookie 并使用不同的浏览器
  7. 安装新的 WordPress 4.9.7、4.9.5 和 4.9.1

他们都没有解决我的问题,我真的很困惑。

这是我的 Windows 或注册表有问题吗?如何调试或跟踪此问题的来源?

【问题讨论】:

  • 虽然有时解决最大内存大小耗尽错误的方法是增加最大内存,但真正的问题往往是代码有问题。那就是:您实际上分配的内存超出了应有的范围。在您的情况下,这发生在这一行:D:\wamp64ario\www\owjgraph\wp-includes\functions.php on line 5231。你能分享那条线和它周围的相关代码吗?那可能是该行所属的功能。
  • 这里是 5231 行代码: function wp_is_stream( $path ) { $wrappers = stream_get_wrappers(); $wrappers_re = '(' .join('|', $wrappers) .')';

标签: php wordpress wampserver


【解决方案1】:

同样的事情也发生在我身上。如果我 var_dump stream_get_wrappers() 我会得到奇怪的结果,其中包含很长的乱码文本行。我认为这是 WAMP 的错,因为我在普通的 php 中也遇到了这个错误。 WordPress的临时解决方案:

打开 wordpress/wp-includes/functions.php 并修改 wp_is_stream 函数如下所示:

function wp_is_stream( $path ) {
    $wrappers = stream_get_wrappers();

    for ($i=0;$i<count($wrappers);$i++) {

        if (strlen($wrappers[$i])>100) {
            unset($wrappers[$i]);
        }
    }

    $wrappers_re = '(' . join('|', $wrappers) . ')';

    return preg_match( "!^$wrappers_re://!", $path ) === 1;
}

我使用 WampServer 3.0.6 64 位

【讨论】:

  • 我认为你不能因为 WordPress 试图分配 6 Exabyte 的内存而责怪 WAMPServer。这就是 PHP 有内存限制的原因,所以这些编码问题不会把整个服务器都炸飞
  • 这很可能是 WAMP 的错。问题出在 php 内置函数 stream_get_wrappers() 中,它在 WAMP 服务器下返回异常结果。
  • 这是一个坏主意 - 下一次 WP 更新 - 这个文件很可能会被重置,它是一个石膏而不是修复。此外,它不是 WAMP 特定的,因为我偶尔也会在我的 Linux 机器上得到这个
【解决方案2】:

尝试:查看您的错误日志,您可能会得到一个跟踪,可以为您解决问题(如无限循环)。

找到引发错误的行并确定是否可以对其进行重构以避免内存使用。

您可以在 wp-config 中覆盖 php 的内存分配,如下所示: define( 'WP_MAX_MEMORY_LIMIT' , '512M' ); 但在我看来这只是一个创可贴。可能有问题,您需要修复它以确保应用程序的长期健康。

【讨论】:

  • 6874029536211531203 bytes 无法使用内存限制设置,除非此服务器有大量 RAM。
  • define( 'WP_MAX_MEMORY_LIMIT' , '512M' );没有帮助。
  • @user3783243 “除非此服务器有大量 RAM” 在这种情况下准确地说是 6 艾字节。
  • @sanazrahimi 从 Wordpress 错误日志开始,我不熟悉 WAMP 错误报告,但我会查看任何可用的 php 错误日志。
  • @user3783243 - 好点,肯定有某种主要的内存链接正在发生。通过提高 php 的限制不会达到那种分配,你也不应该。
猜你喜欢
  • 1970-01-01
  • 2017-07-07
  • 2015-04-22
  • 2023-03-20
  • 2015-09-18
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多