2012-12-17 172 views
0

我有一個PHP腳本讀取RSS源,並顯示在頁面上的項目:PHP的XML解析失敗

<?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字節大小的文件時,它不顯示任何內容。有沒有辦法檢查文件是否存在並且不是空的,並且在服務器超時之前使這個腳本正常失敗?

回答

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 
} 
0

你可以檢查你在$內容中得到了什麼。就好像它是空的或者不是以xml頭部開始,你就停下來。

1

如果失敗file_get_contents返回false,你可以檢查錯誤發生並退出。

$content = file_get_contents($feed_url); 
if (content === false) return; 
$x = new SimpleXmlElement($content);