php – 在DOMDocument-> load()上捕获404错误
发布时间:2020-12-13 17:41:22 所属栏目:PHP教程 来源:网络整理
导读:我正在使用DOM加载一堆rss feed,有时会有404而不是生成文件.问题是web服务器发出一个html 404页面来代替预期的xml文件,所以使用这个代码: $rssDom = new DOMDocument();$rssDom-load($url);$channel = $rssDom-getElementsByTagName('channel');$channel =
我正在使用DOM加载一堆rss feed,有时会有404而不是生成文件.问题是web服务器发出一个html 404页面来代替预期的xml文件,所以使用这个代码:
$rssDom = new DOMDocument(); $rssDom->load($url); $channel = $rssDom->getElementsByTagName('channel'); $channel = $channel->item(0); $items = $channel->getElementsByTagName('item'); 我收到这个警告: Warning: DOMDocument::load() [domdocument.load]: Entity 'nbsp' not defined 接下来是这个错误: Fatal error: Call to a member function getElementsByTagName() on a non-object 通常,这段代码工作正常,但是在我得到404的情况下它没有做任何事情.我在load语句周围尝试了一个标准的try-catch,但它似乎没有抓住它. 解决方法
你可以
suppress the output of parsing errors
libxml_use_internal_errors(true); 要检查返回的响应是否为404,可以在调用DOMDocument :: load()之后检查 例: libxml_use_internal_errors(true); $rssDom = new DOMDocument(); $rssDom->load($url); if (strpos($http_response_header[0],'404')) { die('file not found. exiting.'); } 另一种方法是使用file_get_contents,然后检查响应头,如果不是404,则使用DOMDocument :: loadXml加载标记.这将阻止DOMDocument解析无效的XML. 请注意,所有这些都假定服务器在响应中正确返回404标头. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |