file_get_contents现在按预期工作 - 外部域工作相同的域没有

时间:2015-02-09 17:41:48

标签: php xml-parsing file-get-contents

这是一个wordpress博客rss feed

从domain1开始,当使用此脚本时,它将适用于domain2但不适用于domain1。

从domain2开始,使用此脚本时,它适用于domain2和domain1

我的假设是它必须是权限错误,但我不知道未正确设置的内容(domain2可以为两个域获取博客,而domain1将获取domain2的博客,但不是domain1 )

尝试使用cURL时结果相同,domain1可以获取domain2,但不能获取domain1,而domain2可以从domain1和domain2获取feed

的file_get_contents

    $feedUrl = 'http://domain1.com/blog/feed/'; 
    $feedUrl = 'http://domain2.com/blog/feed/';

    $rawFeed = file_get_contents($feedUrl);

    $xml = new SimpleXmlElement($rawFeed);
    $i = 0;

    foreach($xml->channel->item as $post)
    {
        $post->link = str_replace('&', '&', $post->link);
        $date = new DateTime($post->pubDate);

        if($i == 5) break;      // number of feed items
        $title = '<a href="' . $post->link . '" title="' . $post->title . '" class="feed-link">' . $post->title . '</a>';
?>
        <p><?php echo $title; ?></p>
        <?php
        $i++;
    }

?>

卷曲

<?php 
    $feedUrl = 'http://domain1.com/blog/feed/'; 
    $feedUrl = 'http://domain2.com/blog/feed/';

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $feedUrl);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-type: text/xml'
    ));
    $rawFeed = curl_exec($ch);
    $error   = curl_error($ch);
    curl_close($ch);
    $xml = new SimpleXMLElement($rawFeed);
    echo "<pre>";
    var_dump($obj);
    echo "</pre>";
?>

我尝试过的网址格式和结果

/www/domain1/blog/feed/ (file or folder does not exist, which is accurate)
http://domain1.com/blog/feed/ (timeout)
http://555.555.555.555/blog/feed (ip address) (timeout)

2 个答案:

答案 0 :(得分:1)

好的,问题与服务器有关......

来自服务器管理员Added www.domain1.com to the /etc/hosts file so that it looked to itself for the site.

感谢大家的帮助,希望这将有助于将来遇到类似问题的其他人

答案 1 :(得分:0)

我会从这些观点开始:

<强> 1。 DNS问题? 也许你的服务器2上的DNS表问题(无法解析domain2)。 从脚本尝试执行功能  string gethostbyname ( string $hostname )

要快速检查,您也可以尝试使用IP而不是域名。如果它可以工作,问题是DNS表。尝试刷新DNS缓存。

<强> 2。在服务器上过滤? 如果您使用的是通用主机,请尝试写支持。也许他们可以提供帮助也许他们正在使用过滤。

如果domain2是您的,或者您可以访问其日志。检查访问日志。如果您确实收到了从server2到domain2的请求。

第3。你是服务器2的黑名单吗? 也可能是domain2服务的黑名单中的server2 IP。