【问题标题】:The use of the "PHP Simple HTML DOM Parser" when parsing large html files results in an error解析大型html文件时使用“PHP Simple HTML DOM Parser”导致错误
【发布时间】:2018-01-04 15:54:16
【问题描述】:

我正在尝试使用“PHP Simple HTML DOM Parser”解析一个大型 HTML 文件。代码是这样的:

<?php
    include('/lib/simplehtmldom/simple_html_dom.php');

    $data_url = "data/data.html";

    $date_html = file_get_html($data_url);
    foreach($date_html->find('li a') as $element){
        $data = $element->href;
        echo $data;
    }
?>

“data.html”的大小约为 3MB。执行代码导致“致命错误:在第 7 行对 C:\xampp\htdocs\parser\index.php 中的非对象调用成员函数 find()。

我该怎么办?

【问题讨论】:

  • file_get_html() 没有返回您认为的内容。使用var_dump($date_html); 看看你得到了什么。
  • '我该怎么办?' - 你可以试试 DOMDocument 和 loadhtml()
  • 你一定有错误并且$date_url为空(也应该是datA?)
  • file_get_html() 是“PHP Simple HTML DOM”库中的一个函数。实际上我认为错误在于 find() 函数。
  • "我认为该错误与 find() 函数有关" 不。PHP 清楚地告诉您,您正在尝试对不包含一个对象。

标签: php


【解决方案1】:

MAX_FILE_SIZEsimple_html_dom 中定义为 600KB。

您可以在simple_html_dom.php 文件上编辑此代码:define('MAX_FILE_SIZE', 600000);

为我工作

【讨论】:

  • 我把 MAX_FILE_SIZE 改成了 define('MAX_FILE_SIZE', 6000000);它奏效了。谢谢你:)
【解决方案2】:

file_get_html 失败 尝试读取文件 data/data.html

在这种情况下,您存储在$date_html 中的返回值不是对象。 稍后尝试调用 find 方法会引发您得到的错误。


1.

当您尝试解析大文件时,您需要增加 simplehtmldom 允许的最大文件大小,默认设置为 600.000 字节(所以不够)。

你可以用define( 'MAX_FILE_SIZE', 4000000 ); // Max file size 4MB appox.做到这一点

包含库之前:

define( 'MAX_FILE_SIZE', 4000000 ); // Max file size 4MB appox.
include('/lib/simplehtmldom/simple_html_dom.php');

2.

如果调整MAX_FILE_SIZE 不能解决问题,请确保data/data.html 是要解析的文件的正确相对路径。

如果找不到文件,file_get_html 将失败。

在这种情况下,您可以尝试传递绝对路径(以/ 开头的路径),例如:

/var/data/data.html

【讨论】:

  • 我正在尝试解析本地文件。根据“PHP Simple HTML DOM Parser Manual”可以进行本地解析。
  • @AdelAmani 当然。然后找不到data/data.html。传递绝对路径。我编辑了答案
  • 你的意思是:“localhost/parser/data/data.html”?
  • @AdelAmani 您可以在在您的代码中安全地定义它,而无需修改simplehtmldom。您只需要包含该库之前定义它。这样,如果您更新库(覆盖您的编辑),您的代码就不会中断
  • 你是对的。实际上我认为覆盖应该在 include('/lib/simplehtmldom/simple_html_dom.php'); 之后。我错了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-26
  • 1970-01-01
  • 2023-03-15
  • 2016-02-01
  • 2011-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多