我正在做一个直接的.php调用(ajax)。由于我的类,加载系统,我需要稍后加载wp-load,而不是在开始时加载。
所以,如果我的文件只有这个:
var query = (from t1 in lst
join t2 in (from b in lst
group b by b.REQUEST_ID into grp
select new
{
EndTime = (from g1 in grp select g1.EXECUTION_DTTM).Max(),
REQUEST_ID = grp.Key,
Transactions = grp.Count(),
Success = ((from g2 in grp select g2.ITEM_STATUS_CD).Count(x => x == 0)) * 100 / grp.Count(),
Warning = ((from g3 in grp select g3.ITEM_STATUS_CD).Count(x => x == 1)) * 100 / grp.Count(),
Error = ((from g4 in grp select g4.ITEM_STATUS_CD).Count(x => x > 1)) * 100 / grp.Count(),
}).OrderByDescending(x => x.REQUEST_ID).Take(100)
on new { RID = t1.REQUEST_ID, EXDT = t1.EXECUTION_DTTM } equals new { RID = t2.REQUEST_ID, EXDT = t2.EndTime }
select new
{
t1.REQUEST_ID,
t2.Transactions,
t2.EndTime,
t2.Success,
t2.Warning,
t2.Error
}).Distinct().ToList();
它运行正常。但如果它包含在一个类中:
include $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php';
它因致命错误而死:
PHP致命错误:在第11行的/var/www/wp-content/sunrise.php中调用未定义的方法stdClass :: escape()
我看不出任何理由!
答案 0 :(得分:1)
您似乎正在尝试在正常参数之外加载WordPress多站点(在sunrise.php
判断是这里的问题)。请尝试加载此文件:
include $_SERVER['DOCUMENT_ROOT'] . '/wp-blog-header.php';
这会跳过定义index.php
常量的WP_USE_THEMES
,并假设你没有加载网站的前端(至少不是传统的,你不是)。
现在应该为你加载一切正确的顺序。
答案 1 :(得分:1)
我也看不出你的代码有什么问题。所以我测试了一次只是为了确认它确实有用。
<?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; sunrise.php&#39;我最初认为是你的代码的名称。它实际上可能是感染(或不感染),请参阅https://premium.wpmudev.org/blog/removing-backdoor-exploits/。我认为它的名称被配置为作为预执行处理程序运行。一些插件合法地安装预执行处理程序,例如, WordFence。不幸的是,这次我没有安装WordFence,我也不记得它的执行前处理程序的名称。
我刚刚阅读了WordFence的源代码。它确实安装了一个预执行处理程序,但它的名字是ABSPATH。 &#39; wordfence-waf.php&#39 ;.但是,WordFence还引用了&#39; ... / wp-content / sunrise.php&#39;显然是在多站点加载之前执行的。你在使用WordFence吗?您的网站是多站点吗?
重点是:问题不在您的代码中,而在于预执行处理程序。预执行处理程序可以是大量的PHP代码,可以显着改变PHP执行环境,这就是WordFence等插件使用它来监视代码执行的原因。