【问题标题】:Error using PHP Simple HTML DOM parser使用 PHP 简单 HTML DOM 解析器时出错
【发布时间】:2015-06-15 19:35:58
【问题描述】:
    if (!is_null($elements)) {          

        $embeds = array();
        foreach ($elements as $element) {

            if (trim(strip_tags($element->innertext)) == $episode_term) {
                $html2 = file_get_html($element->href);
                $elements2 = $html2->find('#streamlinks .sideleft a');
                if (!is_null($elements2)) {
                    foreach ($elements2 as $element) {
                        $html3 = file_get_html($element->href);
                        $iframe_element = $html3->find('.frame', 0);
                        if (!is_null($iframe_element)) {
                            $embed = $misc->buildEmbed($iframe_element->src);
                            if ($embed) {
                                $embeds[] = array(
                                    "embed" => $embed,
                                    "link" => $iframe_element->src,
                                    "language" => "ENG",
                                );
                            }
                        }
                    }                        
                }
            }
        }
        return $embeds;
    }

Blockquote PHP 致命错误:在非对象中调用成员函数 find()

                $elements2 = $html2->find('#streamlinks .sideleft a');

所以对于导致此错误出现在我的错误日志文件中的原因感到困惑?

【问题讨论】:

  • 你在哪里初始化$html2
  • 用 file_get_contents 试过了吗?
  • 我不太懂编码
  • 你的文件_get_html($element->href);返回 false 我认为在使用之前检查条件 $html2->find('#streamlinks .sideleft a');
  • 我有什么例外或什么

标签: php parsing html-parsing simple-html-dom


【解决方案1】:

在您执行 file_get_html 之前,我会尝试输出 $element->href。 如果 file_get_html 无法获取页面 $html2 保持未初始化状态并且您无法在其上使用 find。

除此之外,您可以检查 $html2 是否设置在 file_get_html 之后,如果没有设置则输出错误。我通常使用这样的东西:

if($html2 == false || $html2 == NULL){
  // no html found
}else{
  // html found
}

【讨论】:

  • if($html2 == false || $html2 == NULL){}}else{$html2 = file_get_html($element->href); $elements2 = $html2->find('#streamlinks .sideleft a');} 像这样? @DocRattie
  • 不,我的意思是这样的:$html2 = file_get_html($element->href);if($html2 == false || $html2 == NULL){echo "your error msg";}else{$elements2 = $html2->find('#streamlinks .sideleft a'); ... }
  • 它解决了错误。我的意思是,就像他在错误发生后向前移动一样,但你能告诉我如何解决这个问题吗? @DocRattie
  • 您的问题接缝是,file_get_html 无法获得准确的 html 文件。因此我会尝试...if($html2 == false || $html2 == NULL){echo $element->href;}... 看看它说了什么。
  • 好的,我会....但是在某些链接上它会收集数据,顺便说一下,现在错误转发到新行,但它不会影响我的脚本if (!is_null($elements2)) {
猜你喜欢
  • 2018-02-23
  • 2012-01-17
  • 1970-01-01
  • 1970-01-01
  • 2016-07-30
  • 2014-01-15
  • 2011-08-27
  • 2018-03-05
相关资源
最近更新 更多