2

所以我有一个致命的问题。我无法显示此 xml 数据。它在 3 个月前可以工作,现在不行了。任何修复这个虫子的建议都会帮助我很多!

是的 - 我已经检查了链接是否有效,并且有效。

<?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 } ?>
4

1 回答 1

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了解更多信息)。

希望有帮助!

于 2013-05-16T00:42:34.753 回答