2013-05-15 95 views
1

所以我有一個殺手問題。我無法得到這個XML數據顯示。它在3個月前工作,現在不是。任何解決這個問題的建議都會幫助我解決問題!WordPress的simplexml_load_file()解析錯誤

是的 - 我已檢查鏈接是否正常工作,並且存在。

<?php 
if(file_exists('http://blog.millcitychurch.org/blog/rss.xml')){ ?> 
     <h1>// THE LATEST FROM MILL city</h1> 

    <div class="feed"> 


      <?php 
      $xml = file_get_contents('http://blog.millcitychurch.org/blog/rss.xml'); 

      $url = 'http://blog.millcitychurch.org/blog/rss.xml'; 
      $rss = simplexml_load_file($xml); 


      if($rss) { 


        $items = $rss->channel->item; 
        $i = 0; 

        foreach($items as $item) { 


         if (++$i > 4) { 
          // stop after 5 loops 
          break; 
         } 



         $title = $item->title; 
         $link = $item->link; 


         $published_on = $item->pubDate; 
         $description = strip_tags($item->description); 


         $position=215; // Define how many character you want to display. 
         $message = $description; 
         $post_content = substr($message, $position, 1); 


         $post_content = substr($message,0,$position); // Display your message 


         echo '<div class="feed-desc">' ; 
         echo '<h2>'.$title.'</h2><p>'; 
         echo $post_content; 
         echo '</p><div class="readmore"><a href="'.$link.'">... read more</a></div>'; 
         echo '<div class="date">'.$published_on.'</div>'; 
         echo '</div>'; 

        } 


       } ?> 



     </div><! -- end .feed --> 
     <?php } ?> 

回答

0

我注意到主機在最近的file_get_contents調用中變得更加嚴格。幾個月前工作的電話現在不工作。

最好的解決方案是通過捲曲進行呼叫,一旦設置好就不會太糟糕。

示例代碼:

$htmlFile = curl('http://blog.millcitychurch.org/blog/rss.xml'); 


function curl($url) 
{  
    //Absolute Hosting Path 
    $absHostingPath = '/home/content/your_server_path/html'; 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 

    curl_setopt($ch, CURLOPT_TIMEOUT, 20); 
    curl_setopt($ch, CURLOPT_USERAGENT, array('User-Agent' => 'My User Agent')); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE); 
    curl_setopt($ch, CURLOPT_CAINFO, $absHostingPath."/certs/cacert.pem"); 

    $data = curl_exec($ch); 

    $curlError = curl_error($ch); 
    if(strlen($curlError) > 0) 
    print(' Curl error: ' .$curlError.' '); 

    curl_close($ch); 
    return $data; 
} 

$ HTMLFILE將文件的內容時調用curl()回報。

您可以從主機帳戶控制面板獲取服務器的絕對主機路徑。 用戶代理不是太重要,特別是如果它是您的服務器。

棘手的部分是證書文件。你可以得到的「標準」 CA的證書: http://curl.haxx.se/docs/caextract.html

如果你打電話給自己的服務器,你應該能夠創建自己的自簽名的證書: http://www.tldp.org/HOWTO/SSL-Certificates-HOWTO/x160.html

複製證書到你的/根據CURLOPT_CAINFO中的調用來驗證目錄和名稱(請參閱上面的代碼)。

您也可以將CURLOPT_SSL_VERIFYPEER更改爲FALSE而不使用證書,但這樣會關閉驗證,但這並不認爲是安全的(請自行承擔風險)(有關更多信息,請參閱http://php.net/manual/en/function.curl-setopt.php)。

希望有幫助!

+0

謝謝!我會盡力回覆你,看看它是否有效!再次感謝 –

相關問題