我正在阅读RSS订阅源并查看我想知道它需要多长时间才能调用
$homepage = file_get_contents('http://www.forbes.com/news/index.xml');
为此我正在使用
<?php
$start = microtime(true);
$homepage = file_get_contents('http://www.fohgggrbes.com/news/index.xml');
$end = microtime(true);
$dur=$end-$start;
echo $dur;
$xml = simplexml_load_string($homepage,'SimpleXMLElement', LIBXML_NOCDATA);
echo '<pre>';
?>
但我的要求是首先我检查文件是否有效xml,如果是,则显示响应时间
$homepage = file_get_contents('http://www.forbes.com/news/index.xml');
或 如果XML文件无效,则显示错误消息。我想使用try和catch异常。
答案 0 :(得分:1)
检查URL是否有效与检查XML是否有效不同。当您尝试加载无效的URL时,错误通常类似于
无法打开流:php_network_getaddresses:getaddrinfo失败
但是,该错误源于流包装器,而之后的任何XML验证都是由libxml完成的。因此,您需要检查两个不同的东西。以下代码将考虑到这两点:
libxml_use_internal_errors(true);
$start = microtime(true);
$rss = @simplexml_load_file(
'http://www.fohgggrbes.com/news/index.xml',
'SimpleXMLElement',
LIBXML_NOCDATA
);
$end = microtime(true);
$errors = array_filter(
array(error_get_last(), libxml_get_errors()),
function($val) { return !empty($val); }
);
print_r(empty($errors) ? $end - $start : $errors);
libxml_use_internal_errors(false);
如果你想使用try / catch,我可以把它包装成一个类并抛出异常。
答案 1 :(得分:0)
我认为您可以随时使用CURL将检索到的数据提交给W3C Feed验证程序(http://validator.w3.org/feed/),或者将URL发送给验证程序(即可能是更好的方法,因为你移动较少的数据),但处理返回的结果可能是棘手的(结果是一个HTML文档,意味着人类可读而不是机器可读)。