0

当我尝试执行 DocumentDOM/SimpleXML 方法时,问题仅发生在一个文件上,因此问题似乎出在该文件上。不知道它可能是什么。

如果我执行以下操作:

$file = "test1.html";
$dom = DOMDocument::loadHTMLFile($file);
$xml = simplexml_import_dom($dom);

print_r($xml);

在 Chrome 中,我收到“页面不可用”错误。在 Firefox 中,我什么也得不到。

如果我对“test2.html”做同样的事情,我会按预期打印出来。

如果我尝试同样的事情但这样做:

$file = "test1.html";
$data = file_get_contents($file)
$dom = DOMDocument::loadHTML($data);
$xml = simplexml_import_dom($dom);

print_r($xml);

我得到同样的问题。

如果我注释掉 print_r 行,Chrome 会从“页面不可用”变为空白。

我将权限更改为 777,以防出现问题,无法修复。

我尝试简单地回显 html 的内容,完全没有问题。

关于为什么 a) Chrome 会这样做,以及 b) 为什么我没有得到任何可用结果的任何线索?


更新:

如果我输入: $file = "test1.html"; $dom = DOMDocument::loadHTMLFile($file); if(!$dom) { echo "空载!"; } 其他 { $xml = simplexml_import_dom($dom); print_r($xml); }

我得到同样的问题。如果我输入:

$file = "test1.html";
$dom = DOMDocument::loadHTMLFile($file);
if(!$dom) {
    echo "No Load!";
}
else {
    echo "Load!";
}

我得到“加载!” 输出,这意味着 dom 方法不应该是问题(?)

我将尝试使用 simplexml 进行相同的测试。


更新2:

如果我这样做:

我得到同样的问题。如果我输入:

$file = "test1.html";
$dom = DOMDocument::loadHTMLFile($file);
$xml = simplexml_import_dom($dom);
if(!$xml) {
    echo "No Load!";
}
else {
    echo "Load!";
}

我得到“加载!” 但如果我这样做:

$file = "test1.html";
$dom = DOMDocument::loadHTMLFile($file);
$xml = simplexml_import_dom($dom);
if(!$xml) {
    echo "No Load!";
}
else {
    echo "Load!";
    print_r($xml);
}

我得到了错误。我终于注意到我可以选择在 Chrome 中查看错误:

 Error 324 (net::ERR_EMPTY_RESPONSE): Unknown error.

麻烦的html文件是288Kb。这可能是问题吗?如果是这样,我将如何调整?


最后更新:

很奇怪。我可以在对象上使用方法和函数(如 simplexml 或 domdocument),所以我可以执行 xpath 之类的操作来删除或解析 html 等。在某些情况下(小结果)它可以回显结果,但对于大的东西(显示所有跨度),它以同样的方式失败。

因此,由于最终结果,我认为将适合这些参数,我应该没问题(我猜)。

但是任何真正的解决方案都非常受欢迎。

4

2 回答 2

1
  • 打开错误报告:error_reporting(E_ALL);在 PHP 代码的第一行。
  • 检查您的 PHP 配置的内存限制:memory_limit在相应的 php.ini 中
  • test1.html 和 test2.html 有什么区别?也许 test1.html 格式不正确。
于 2009-06-25T06:34:29.970 回答
0

如果文档格式错误,DocumentDOM 和/或 SimpleXML 可能会退出。尝试类似:

$dom = DOMDocument::loadHTMLFile($file);
if (!$dom) {
    echo 'Loading file failed';
    exit;
}

$xml = simplexml_import_dom($dom);
if (!$xml) {
    ...
}

如果创建 $dom 有效,则转换为 $xml 也应该有效,但无论如何都要确保。

编辑:正如 Gehrig 所说,确保错误报告已打开,这应该使过程失败的地方很明显。

于 2009-06-25T06:38:02.550 回答