2012-07-12 75 views
1

當我嘗試解析谷歌rss提要時,我得到網絡錯誤:在鉻和firefox開發人員工具中的500內部服務器錯誤。下載rss feed的第一部分(使用curl)工作正常。解析rss提要給500內部服務器錯誤

我發現這個例子:http://www.joevasquez.info/development/parsing-xml-feeds-with-php-rss-and-atom/#more-63

有人能說出什麼我做錯了嗎?謝謝。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 
</head> 
<body> 
<?php 
if (function_exists("curl_init")){ 
    $ch=curl_init(); 
    //curl_setopt($ch,CURLOPT_URL,'http://www.joevasquez.info/feed/'); 
    curl_setopt($ch,CURLOPT_URL, 'http://news.google.com/news?hl=en&topic=t&output=rss'); 
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
    //curl_setopt($ch,CURLOPT_HEADER,0); 

    $data=curl_exec($ch); 


    curl_close($ch); 
    //print($data); 

    $doc=new SimpleXmlElement($data,LIBXML_NOCDATA); 

    if (isset($doc->channel)) parseRSS($doc); 

    function parseRSS($xml){ 
     $cnt=count($xml->channel->item); 
     for ($i=0;$i<$cnt;$i++){ 
      $url=$xml->channel->item[$i]->link; 
      $title=$xml->channel->item[$i]->title; 
      $desc=$xml->channel->item[$i]->description; 

     echo '<a href="'.$url.'">'.$title.'</a>'.$desc.'<br>'; 
    } 
} 
?> 
</body> 
</html> 
+2

每次PHP生成500錯誤時,它都伴隨着錯誤日誌中的有用條目。假設你的腳本的開始是直接輸出一個不是'<?php'的標籤,那很可能是一個分析錯誤。查看您的Web服務器錯誤日誌並報告您找到的任何消息。 – DaveRandom 2012-07-12 08:39:21

+0

我試圖在<?php之前刪除dtd,並且仍然收到相同的錯誤。 – vaanipala 2012-07-13 05:42:29

+0

我現在正在檢查錯誤日誌 – vaanipala 2012-07-13 05:50:22

回答

3

忘記關閉for循環後的括號。

for ($i=0;$i<$cnt;$i++){ 
    $url=$xml->channel->item[$i]->link; 
    $title=$xml->channel->item[$i]->title; 
    $desc=$xml->channel->item[$i]->description; 
} 
+0

我仍然收到相同的錯誤。我關閉了for循環,並且在<?php之前刪除了所有的dtd。 – vaanipala 2012-07-13 05:33:01

1

好的,我得到它的工作。來自日誌的錯誤:

Fatal error: Call to undefined function parserss()in /home1/aquinto1/public_html/belibook.com/curl/curl3.php on line 17 

我在調用之前剪切並粘貼了函數解析器RSS,現在它工作正常。

以下是我的修改:

$doc=new SimpleXmlElement($data,LIBXML_NOCDATA); 

function parseRSS($xml){ 
    $cnt=count($xml->channel->item); 
    for ($i=0;$i<$cnt;$i++){ 
     $url=$xml->channel->item[$i]->link; 
     $title=$xml->channel->item[$i]->title; 
     $desc=$xml->channel->item[$i]->description; 
     echo '<a href="'.$url.'">'.$title.'</a>'.$desc.'<br>'; 
    } 
} 

if (isset($doc->channel)) parseRSS($doc); 

謝謝兩位!