使用PHP Simple HTML DOM解析器的奇怪错误

Tsu*_*oku 9 php html-parsing

我正在使用这个库(PHP Simple HTML DOM解析器)来解析链接,这里是代码:

function getSemanticRelevantKeywords($keyword){
    $results = array();
    $html = file_get_html("http://www.semager.de/api/keyword.php?q=". urlencode($keyword) ."&lang=de&out=html&count=2&threshold=");
    foreach($html->find('span') as $e){
            $results[] = $e->plaintext;
    }
    return $results;
}
Run Code Online (Sandbox Code Playgroud)

但是当我输出结果时,我收到此错误:

致命错误:在第25行的/var/www/vhosts/efamous.de/subdomains/sandbox/httpdocs/getNewTrusts.php中调用非对象上的成员函数find()

(第25行是foreach循环),奇怪的是它输出所有内容(至少看似)但是我仍然得到了这个错误并且无法弄清楚原因.

小智 22

出现此错误的原因是:如果来自url的响应大小大于600000,则简单的HTML DOM不会返回该对象.
您可以通过更改simple_html_dom.php文件来使其无效.strlen($contents) > MAX_FILE_SIZE从功能的if条件中删除file_get_html.
这将解决您的问题.


小智 7

你只需要增加CONSTANT MAX_FILE_SIZE文件simple_html_dom.php.

例如:

define('MAX_FILE_SIZE', 999999999999999);
Run Code Online (Sandbox Code Playgroud)


Jim*_*Jim 3

此错误通常意味着 $html 不是对象。

奇怪的是你说这似乎有效。如果输出 $html 会发生什么?我想该 url 不可用并且 $html 为空。

编辑:看起来这可能是解析器中的错误。有人提交了一个错误,并在他的代码中添加了一个检查作为解决方法。

  • 嗨,路易斯,你如何解决这个问题?当我使用 PHP Simple HTML DOM 解析器时出现同样的错误 (2认同)