2013-04-18 59 views
1

我走之前回主機(又一次)他們給在下面腳本的唯一錯誤日誌:腳本頭過早結束:PHP,CGI - 當運行一個腳本捲曲

過早結束腳本頭:PHP,CGI

我運行的紙條,其工作在其他的服務器和我的本地機器,但是這個perticualr服務器上給了一個錯誤500:

$ch = curl_init("http://feeds.energydigger.com/headlines.xml"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
$data = curl_exec($ch); 
curl_close($ch); 
$doc = new SimpleXmlElement($data, LIBXML_NOCDATA); 

if(isset($doc->channel)) 
{ 
    parseRSS($doc); 
} 
function parseRSS($xml) 
{ 
    $cnt = 3; 
    for($i=0; $i<$cnt; $i++) 
    { 
     $url = $xml->channel->item[$i]->link; 
     $title = $xml->channel->item[$i]->title; 
     $desc = $xml->channel->item[$i]->description; 
     $date = $xml->channel->item[$i]->pubDate; 

     echo '<p><a href="'.$url.'">'.$title.'</a><br />'.$date.'</p>'; 
    } 
} 

有誰知道什麼可能生成錯誤,我不能說我以前見過這個......我仍然在嘗試着持有PHP日誌。

回答

1

如果引發異常並且未捕獲到異常,並且在PHP設置display_errors = 0中,則可能會出現500錯誤。它很可能是由SimpleXML引發的。嘗試在try .. catch塊中將包含XML操作的部分包裝起來,並查看異常情況。例如:

$ch = curl_init("http://feeds.energydigger.com/headlines.xml"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
$data = curl_exec($ch); 
curl_close($ch); 

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

    if(isset($doc->channel)) 
    { 
     parseRSS($doc); 
    } 
    function parseRSS($xml) 
    { 
     $cnt = 3; 
     for($i=0; $i<$cnt; $i++) 
     { 
      $url = $xml->channel->item[$i]->link; 
      $title = $xml->channel->item[$i]->title; 
      $desc = $xml->channel->item[$i]->description; 
      $date = $xml->channel->item[$i]->pubDate; 

      echo '<p><a href="'.$url.'">'.$title.'</a><br />'.$date.'</p>'; 
     } 
    } 
} 
catch (Exception $e) 
{ 
    echo $e -> getMessage(); 
} 

以防萬一,here's more about PHP exceptions

+0

啊是的,我完全忘了這一點例外,上傳的上方,仍然給我500頁面 [週四4月18日14時37分31秒2013] [提醒] mod_fcgid:在60秒內 讀取數據超時[星期四4月18日14:37:31 2013年] [錯誤] [客戶端194.168.131.146]腳本標題提前結束:php-cgi – odd

+0

在這種情況下,讀取數據超時可能意味着URL的另一端無響應的服務器一個是從中獲取Feed),或者Feed XML可能需要太多時間解析(SimpleXML會將整個文件加載到內存中,然後在實例化時將其解析爲整體)。 您能檢查URL是否可以從那個服務器有問題? – pilsetnieks

+0

對不起,延遲(afk)。所以我嘗試了一個簡單的獲取標題,並在本地和另一臺服務器上,它帶回了一個200響應,在問題服務器上它又帶回了一個錯誤500。我迷失在這裏。現在它不是一個捲曲問題,我創建了另一篇文章,謝謝你的幫助。 http://stackoverflow.com/questions/16200928/server-x-brings-back-200-response-server-y-throws-and-internal-server-error – odd