【问题标题】:Including wp-load.php causes fatal error inside a class method在类方法中包含 wp-load.php 会导致致命错误
【发布时间】:2018-05-23 09:27:47
【问题描述】:

我正在做一个直接的 .php 调用 (ajax)。由于我的课程,加载系统,我需要稍后加载 wp-load,而不是一开始。

所以,如果我的文件只有这个:

include $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php';

运行正常。但如果它包裹在一个类中:

class Paff
{
    public function x()
    {
        include $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php'; 
    }
}

(new Paff())->x();

它死于致命错误:

PHP 致命错误:在第 11 行的 /var/www/wp-content/sunrise.php 中调用未定义的方法 stdClass::escape()

我看不出任何原因!

【问题讨论】:

  • 一开始就将其包含在课堂中是没有意义的。把它放在课堂之外。
  • 其实可以的,比如我有时候不需要包含它,以节省时间
  • 仅仅因为你有一个原因,并不意味着你尝试的方式实际上技术上是有意义的。问自己一个简单的问题:如果我自己编写的话,我会直接把所有这些东西放在那里吗?这个功能首先“属于”我的类吗……?

标签: php wordpress


【解决方案1】:

您似乎正在尝试在正常参数之外加载 WordPress 多站点(从sunrise.php 判断是这里的问题)。尝试加载此文件:

include $_SERVER['DOCUMENT_ROOT'] . '/wp-blog-header.php';

这会跳过定义WP_USE_THEMES 常量的index.php,并假设您没有加载网站的前端(至少传统上没有,但您没有)。

现在应该会以正确的顺序加载所有内容。

【讨论】:

    【解决方案2】:

    我也看不出你的代码有什么问题。所以我对它进行了一次更改测试,只是为了确认它确实有效。

    <?php
    
    class Paff
    {
        public function x()
        {
            include $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php';
            echo 'wp-load.php included. ABSPATH=' . ABSPATH;
        }
    }
    
    (new Paff())->x();
    
    ?>
    

    它运行没有错误!并在浏览器中显示以下内容。

    wp-load.php included. ABSPATH=D:\bronce/ 
    

    我显示 ABSPATH 只是为了确认 wp-load.php 在定义 ABSPATH 时已包含在内。

    所以这在我的安装中应该可以正常工作,这是非常标准的,因为我几周前刚刚安装了 PHP,而且我知道我并没有对默认值进行太多更改。那么为什么它不能在您的系统上运行呢?它必须配置不同。您的系统是否运行任何预执行处理程序?

    我刚刚搜索了“sunrise.php”,我最初认为它是您的代码名称。它实际上可能是感染(或不是),请参阅https://premium.wpmudev.org/blog/removing-backdoor-exploits/。我认为鉴于它的名称,它被配置为作为预执行处理程序运行。一些插件合法地安装了预执行处理程序,例如字栅栏。不幸的是,这次我没有安装 WordFence,我不记得它的预执行处理程序的名称。

    我刚刚阅读了 WordFence 的源代码。它确实安装了一个预执行处理程序,但它的名称是 ABSPATH 。 'wordfence-waf.php'。但是,WordFence 还引用了显然在多站点加载之前执行的“.../wp-content/sunrise.php”。您在使用 WordFence 吗?您的网站是多站点吗?

    重点是:问题不在于您的代码,而在于预执行处理程序。预执行处理程序可以是大量 PHP 代码,可以显着改变 PHP 执行环境,这就是 WordFence 等插件使用它来监控代码执行的原因。

    【讨论】:

      猜你喜欢
      • 2018-09-03
      • 2018-03-14
      • 1970-01-01
      • 2016-04-26
      • 2017-04-29
      • 2020-10-16
      • 1970-01-01
      • 2014-09-14
      • 2015-12-22
      相关资源
      最近更新 更多