5

RSSフィードを出力するこのスクリプトがあります。私がしたいのは、5秒トップのようなRSS URLに到達しようとすることです。それができない場合は、サーバー上にあるバックアップxmlドキュメントをロードする必要があります. これは私が持っているもので、機能していません:

 <?php

 include '../php/connect.php';
 $metaData = mysql_query("SELECT * FROM `siteinfo`") or die("couln't find table :(");
 $displayData = mysql_fetch_assoc($metaData);
 $url = $displayData['status'];
 $xml = file_get_contents($url);

 stream_set_timeout($xml, 5);

if ($xml == FALSE) {

   $xml = simplexml_load_file('backUpXml.xml');

   foreach ($xml->channel->item as $item) {
      echo '<a href="'.$item->guid.'" alt="'.$item->title.'" target="_blank">',   substr($item->title, 0, 62), '...</a><br /><span>', substr($item->pubDate, 4, 18),'</span><br /><hr /><br />';
   }
}  else {

   $xml = simplexml_load_file($url);

   foreach ($xml->channel->item as $item) {
        echo '<a href="'.$item->guid.'" alt="'.$item->title.'" target="_blank">', substr($item->title, 0, 62), '...</a><br /><span>', substr($item->pubDate, 4, 18),'</span><br /><hr /><br />';
   }
}

 ?>

タイムアウトエラーが発生しています。それだけです。どんな洞察も素晴らしいでしょう!

4

3 に答える 3

4

ここで@AnthonySterlingが指摘したはるかに優れた解決策があります:

function simplexml_load_file_from_url($url, $timeout = 5){
  $opts = array('http' => array('timeout' => (int)$timeout));
  $context  = stream_context_create($opts);
  $data = file_get_contents($url, false, $context);
  if(!$data){
    trigger_error('Cannot load data from url: ' . $url, E_USER_NOTICE);
    return false;
  }
  return simplexml_load_string($data);
}
于 2015-09-15T12:46:06.510 に答える
0

これは私が働いたものです:

    <?php

     include 'php/connect.php' ;
     $metaData = mysql_query("SELECT * FROM `siteinfo`") or die("couln't find table :(");
     $displayData = mysql_fetch_assoc($metaData);
     $url = $displayData['status'];
     $xml = file_get_contents($url);

   if (!$xml) {

       $xml = simplexml_load_file('content/backUpXml.xml');

       foreach ($xml->channel->item as $item) {
          echo '<a href="'.$item->guid.'" alt="'.$item->title.'" target="_blank">',   substr($item->title, 0, 62), '...</a><br /><span>', substr($item->pubDate, 4, 18),'</span><br /><hr /><br />';
       }
    }  else {

       $myFile = "content/backUpXml.xml";
       $fh = fopen($myFile, 'w') or die("can't open file");
       $stringData = $xml;
       fwrite($fh, $stringData);
       fclose($fh);

       $xml = simplexml_load_file($url);



       foreach ($xml->channel->item as $item) {
            echo '<a href="'.$item->guid.'" alt="'.$item->title.'" target="_blank">', substr($item->title, 0, 62), '...</a><br /><span>', substr($item->pubDate, 4, 18),'</span><br /><hr /><br />';
       }
    }

    ?>
于 2012-09-13T15:27:05.357 に答える
0

php.netから:

<?php
$fp = fsockopen("www.example.com", 80);
if (!$fp) {
     echo "Unable to open\n";
} else {

    fwrite($fp, "GET / HTTP/1.0\r\n\r\n");
    stream_set_timeout($fp, 2);
    $res = fread($fp, 2000);

    $info = stream_get_meta_data($fp); //I think this is what you need.
    fclose($fp);

    if ($info['timed_out']) { //So you can check this variable.
        echo 'Connection timed out!';
    } else {
        echo $res;
    }

}
?>
于 2012-09-13T05:09:21.933 に答える