PHP 在 simplexml print_r 上返回页面错误
-
22-07-2019 - |
题
当我尝试执行 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);如果(!$ dom){echo“无负载!”;} else {$ 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 等。在某些情况下(小结果)它可以回显结果,但对于大的东西(显示所有跨度),它会以同样的方式失败。
所以,由于最终结果,我认为适合这些参数,我应该没问题(我猜)。
但任何真正的解决方案都是非常受欢迎的。
解决方案
- 打开错误报告:
error_reporting(E_ALL);
在 PHP 代码的第一行。 - 检查 PHP 配置的内存限制:
memory_limit
在各自的 php.ini 中 - test1.html 和 test2.html 有什么区别?也许 test1.html 的格式不正确。
其他提示
DocumentDOM和/或可能的SimpleXML救助如果文档格式错误。尝试是这样的:
$dom = DOMDocument::loadHTMLFile($file);
if (!$dom) {
echo 'Loading file failed';
exit;
}
$xml = simplexml_import_dom($dom);
if (!$xml) {
...
}
如果创建$ DOM工作,转化为$ XML应该工作一样好,但要确保无妨。
编辑:由于格里克说,要确保错误报告是,当过程失败,应该使之明显