如果脱机,PHP XML会禁用Feed

时间:2013-01-15 14:44:36

标签: php xml feed

     <?php
     define(feed,'http://www.example.com/feed/');
     $xml_feed = file_get_contents(feed);
     $xml_parser = xml_parser_create();
     xml_parse_into_struct($xml_parser,$xml_feed,$xml_keys,$xml_index);
     xml_parser_free($xml_parser);
     for($i = 0;!empty($xml_index['TITLE'][$i]);$i++){
     if ($counter < 10)
     {
     echo '<span class="nieuwsfeed">
            <a href="'.$xml_keys[$xml_index['LINK'][$i]]['value'].'" target="blank_">' . date('d-m-Y', strtotime($xml_keys[$xml_index['PUBDATE'][$i]]['value'])) . ' ' . substr($xml_keys[$xml_index['TITLE'][$i]]['value'], 0, 45).'</a></span>';
     $counter++;
     }}
     ?>

。                                 

 $doc = new DOMDocument();
 $doc->load('http://feeds.example.com/example');
 $arrFeeds = array();
 foreach ($doc->getElementsByTagName('item') as $node) {
  $itemRSS = array ( 
   'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,
  'desc' => $node->getElementsByTagName('description')->item(0)->nodeValue,
  'link' => $node->getElementsByTagName('link')->item(0)->nodeValue,
  'date' => $node->getElementsByTagName('pubDate')->item(0)->nodeValue
  );
array_push($arrFeeds, $itemRSS);
 }
 foreach ($arrFeeds as $row)
{
     if ($counter2 < 10)
{
?>

Feed停机时会显示此错误。

      Warning: DOMDocument::load(http://feeds.example.com/example)   
      [domdocument.load]: failed to open stream: Connection timed out in

我正在使用此脚本让我的Feed在我的网页中运行,但如果Feed处于离线状态,搜索Feed大约需要30秒直到60秒,是否有人知道我应该如何禁用x后的加载量几秒钟然后只显示一个标准图像,表示Feed目前处于离线状态。

每周约有2/3次XML Feed中有一个是离线的,所以如果你的网页不断加载,那就非常烦人了。

1 个答案:

答案 0 :(得分:0)

您可以使用file_get_contents()并使用流上下文定义超时,如下所述: Does file_get_contents() have a timeout setting?

从答案中修改代码:

<?php
$ctx=stream_context_create(array('http'=>
    array(
        'timeout' => 5 // 5 seconds
    )
));

echo file_get_contents('http://example.com/',false,$ctx);
?>