所以我有一个杀手问题。我无法显示此xml数据。它工作3个月前,现在不是。任何修复这个bugger的建议都可以帮到我!#/ p>
是的 - 我已经检查过链接是否正常工作,并且确实存在。
<?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 :(得分:1)
我注意到主机最近在file_get_contents调用中变得越来越严格。几个月前工作的电话现在无法正常工作。
最好的解决方案是通过curl拨打电话,一旦你设置好就不会太糟糕。
示例代码:
$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;
}
当curl()
的调用返回时,$ htmlFile将拥有该文件的内容。
您可以从主机帐户控制面板获取服务器的绝对托管路径。 用户代理不是太重要,特别是如果它是您的服务器。
棘手的部分是证书文件。您可以从以下方面获得“标准”ca证书: http://curl.haxx.se/docs/caextract.html
如果您打电话给自己的服务器,您应该能够创建自己的自签名证书: http://www.tldp.org/HOWTO/SSL-Certificates-HOWTO/x160.html
根据CURLOPT_CAINFO中的调用将证书复制到/ certs目录并命名(参见上面的代码)。
您还可以将CURLOPT_SSL_VERIFYPEER更改为FALSE而不使用证书,但这将完全关闭验证,这不被认为是安全的(使用风险自负)(有关详细信息,请参阅http://php.net/manual/en/function.curl-setopt.php)。
希望有所帮助!