我收到以下错误
致命错误:在第1114行的/var/www/html/mysite/wp-content/themes/mytheme/simple_html_dom.php中调用非对象上的成员函数find()
我已经在网上和网上完成了所有主题,无法解决问题。
我已将file_get_html()
存储在$_SESSION
中,以便我可以在不调用网站内容的情况下使用它(因此在开发过程中不要使用我的请求超载它们。)
$_SESSION['DOMcontent'] = file_get_html('http://example.com');
$html = $_SESSION['DOMcontent'];
我还提取了文件内容,看看我是否做对了
$_SESSION['DOMcontent2'] = file_get_contents('http://example.com');
$html2 = $_SESSION['DOMcontent2'];
执行print_r()
查看我在每种情况下得到的内容,对于$html
,我得到类似的内容:
simple_html_dom Object(
[root] =>
[nodes] => Array(
[0] => simple_html_dom_node Object(
[nodetype] => 5
[tag] => root
[attr]
=> Array()
[children] =>
[nodes] =>
[parent] =>
[_] => Array(
[0] => -1
[1] => 841
)
[tag_start] => 0
[dom : simple_html_dom_node : private] =>
)
[1] => simple_html_dom_node Object(
[nodetype] => 6
[tag] => unknown
[attr] => Array()
[children] =>
[nodes] =>
[parent] =>
[_] => Array(
[0] => 1
[4] =>
)
[tag_start] => 0
[dom : simple_html_dom_node : private]
=>
)...
当我执行print_r()
$html2
时,我会获得数据的html,如下所示>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Random title</title>
<link rel="stylesheet" type="text/css" href="http://www.example.com/c/bla1.css" media="all">
<link rel="stylesheet" type="text/css" href="http://www.example.com/c/bla2.css" media="all">
<link rel="stylesheet" type="text/css" href="c/bla2.css" media="all">
<link rel="stylesheet" type="text/css" href="c/something.css" media="all">
<option value="63059">Some option</option>
option
元素重复(其中267个是精确的)。
现在我提出以下内容:
if (!empty($html) && is_object($html)) {
$option = $html->find('option');
foreach ( $option as $element) {
echo $element->value.'<br>';
}
}
出现错误。我已删除MAX_FILE_SIZE
个检查,也尝试了this fix,但没有成功。
我不明白。是因为我将结果存储在$_SESSION
中吗?我得到一个非空对象,应该工作。
简单的html dom版本为1.5 ($Rev: 196 $)
。我把它放在我的主题中,并将该文件包含在我的functions.php
文件
/********* HTML DOM parser ***********/
require_once( get_template_directory(). '/simple_html_dom.php' );
由于我收到了内容,因此必须正常工作。任何帮助表示赞赏。
当我取消注释$_SESSION['DOMcontent'] = file_get_html('http://example.com');
部分时,错误消失了。
我不明白。一旦我在会话中存储了某些东西,我应该能够以任何我喜欢的方式使用它,不是吗?没有它了。当我评论该行时,我仍然有简单的html dom对象,但我不能在其上预先形成任何内容(使用simple_html_dom
文件中的方法)。那是为什么?
好的,所以这很奇怪,但是当我这样做时
$html = new simple_html_dom();
$html->load($_SESSION['DOMcontent2']);
echo '<div class="info_container">';
if (!empty($html) && is_object($html)) {
$options = $html->find('option');
foreach ( $options as $element) {
$value = $element->value;
$name = $element->innertext;
echo '<div>ID: '.$value.'; Name: '.$name.'</div>';
}
}
echo '</div>';
我没有错误。因此,我首先使用file_get_contents()
抓取网页,将其放入会话中,然后在我的simple_html_dom()
中使用此网页,这样就可以了。
不确定原因,但我想这样做。