此行会在我的Web主机上崩溃页面,但不会在我的localhost上崩溃

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了此行会在我的Web主机上崩溃页面,但不会在我的localhost上崩溃相关的知识,希望对你有一定的参考价值。

$title = $xpath->query("span[@class='item_list']",$item)[0];

我无法弄清楚为什么它只在我在我的网络主机上省略这一行时才有效。 localhost似乎正常且功能正常。这用于Wordpress 4.9.4中的模板。我不知道主机的php版本是什么。此行位于另一个xpath查询的循环内,如果上面的行被删除,它将与页面一起使用:

foreach( $xpath->query("//div[@class='product_list']") as $item) {    }

我的网络主机上的php有限制设置阻止我做多个查询吗?或者是嵌套查询?

答案

在较旧的PHP版本(<5.6.3)中,节点列表不能被视为数组。

以下是避免此问题的几种方法。

使用->item()方法

$titleNode = $xpath->query("span[@class='item_list']",$item)->item(0);

在Xpath中使用限制

foreach ($xpath->query("span[@class='item_list'][1]",$item) as $titleNode) {
  //...
}

这将节点列表中的节点限制为第一个节点。如果Xpath表达式与节点不匹配,则可以对第一个节点执行一次foreach()。验证这是否是要处理的标题节点是一个很好的快捷方式。

直接获取文本内容

$titleString = $xpath->evaluate("string(span[@class='item_list'])",$item);

Xpath表达式可以返回标量变量(字符串,数字,布尔值)的结果。这只适用于DOMxpath::evaluate()string()将第一个匹配的节点强制转换为字符串(返回其文本内容)。如果没有匹配节点,则返回空字符串。

另一答案

This answer解决了我的问题。当我打开脚本上的错误报告时,罪魁祸首出现了,并告诉我:

Fatal error: Cannot use object of type DOMNodeList as array

我引用了错误,并了解到它是由我最初怀疑的本地主机和Web主机之间的不同PHP版本引起的。

以上是关于此行会在我的Web主机上崩溃页面,但不会在我的localhost上崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Heroku 当我在线部署我的应用程序时它崩溃但在我的本地机器上它可以正常工作

在我的本地主机 Rails 上查看我的 404 页面

为啥我的推文按钮不会出现在我的页面上?

c#WPF带有Highchart的Web浏览器,来自外部源的Javascript无法正常工作“此页面上的脚本出现错误”

在我的应用程序上按主页按钮时 iOS backboardd 崩溃

新的崩溃日志不会出现在特定 iOS 设备的管理器中