1

我正在阅读 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 异常。

4

2 回答 2

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,我让你把它包装到一个类中并抛出异常。

于 2011-11-07T10:32:35.227 回答
0

我想您总是可以在获取数据后使用 CURL 将检索到的数据提交给 W3C 提要验证器 (http://validator.w3.org/feed/),或者将 URL 发送到验证器(这可能更好方法,因为您移动的数据较少),但处理返回的结果可能很棘手(结果是一个 HTML 文档,旨在人类可读而不是机器可读)。

于 2011-11-07T08:38:10.140 回答