find()中Simple Html Dom中的致命错误

时间:2016-05-06 11:14:15

标签: php wordpress simple-html-dom

我收到以下错误

  

致命错误:在第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文件中的方法)。那是为什么?

编辑2

好的,所以这很奇怪,但是当我这样做时

$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()中使用此网页,这样就可以了。

不确定原因,但我想这样做。

0 个答案:

没有答案