0

RSSフィードを読み取り、ページにアイテムを表示するphpスクリプトがあります。

 <?php
    function getFeed($feed_url) {

         $content = file_get_contents($feed_url);
         $x = new SimpleXmlElement($content);
         $j=0;

         foreach($x->channel->item as $entry) {
              if ($i <5){
                   echo "<li>
                   <a href='$entry->link' title='$entry->title'>" .
                   $entry->title . "</a><br/>
                   <span style='color: 444444;'>".$entry->description."
                   </span>..<a href='$entry->link' title='$entry->title'>
                   <b>more</b></a>
                   </li>";      
              }$i +=1;
         }
    }
    getFeed("http://example.org/feed/");    

    ?>

これはうまく機能し、リンクを含むRSSアイテムを表示します。問題は、RSSフィードがダウンしているか、0バイトサイズのファイルになり、何も表示されない場合です。ファイルが存在し、空ではないかどうかを確認し、サーバーがタイムアウトする前にこのスクリプトを正常に失敗させる方法はありますか?

4

3 に答える 3

2

curl関数を使用します。

function getFeed($feed_url) {

    // GET request
    $handle = curl_init($feed_url);
    curl_setopt($handle,  CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($handle);
    $httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);

    if($httpCode != 200 || empty($response)) {
        echo "feed url not found or missed";
        exit;
    }
    curl_close($handle);

    // also catch error in xml
    try {
        $x = new SimpleXmlElement($response);
    catch (Exception $e){ 
         echo 'XML not valid'; 
         exit; 
    } 
    // rest of function
 }
于 2012-12-17T22:27:28.153 に答える
1

失敗file_get_contentsがfalseを返した場合、エラーが発生したかどうかを確認して終了できます。

$content = file_get_contents($feed_url);
if (content === false) return;
$x = new SimpleXmlElement($content);
于 2012-12-17T22:34:49.417 に答える
0

$contentで何が得られるかを確認できます。空であるか、xmlヘッダーで始まらない場合のように、停止するだけです。

于 2012-12-17T22:21:45.390 に答える