PHP在simplexml print_r上返回页面错误

时间:2009-06-25 06:14:10

标签: php html dom http-status-code-404 simplexml

当我尝试使用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){         回声“无负载!”;     }     其他{     $ 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尝试完全相同的测试。


UPDATE2:

如果我这样做:

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

$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等。在某些情况下(小结果)它可以回显结果,但是对于大的东西(显示所有跨度),它以同样的方式失败。

所以,既然最终结果,我认为适合这些参数,我应该没问题(我猜)。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

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

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

编辑:正如Gehrig所说,确保错误报告已开启,这应该会明确过程失败的位置。