2015-02-09 61 views
0

這是一個WordPress的博客RSS提要的file_get_contents現在按預期工作 - 外域的作品相同的域不

從域1,使用這個腳本時,它會在網域,但沒有DOMAIN1工作。

從域2,使用該腳本時,它同時適用於域2和域1

我的假設是,它必須是一個權限錯誤,但我不知道是什麼設置不正確(域2可以獲取博客精細兩個域,和域1將獲取的域2中的博客,而不是域1)

的結果相同試圖使用捲曲時,域1可以獲取DOMAIN2,但不DOMAIN1而DOMAIN2可以從兩個域1和域2取料

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>"; 
?> 

URL風格我曾嘗試和結果

/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) 
+0

只是想知道,但爲什麼你需要從同一個域調用一個頁面?不是在同一臺服務器上的頁面?難道你不能只包含它,或者至少只是閱讀源代碼,並找到它是如何生成和重複的? – 2015-02-09 17:43:49

+0

也包含您的cURL請求... – 2015-02-09 18:06:32

+0

'error_reporting(E_ALL); ini_set('display_errors','1');' – AbraCadaver 2015-02-09 18:08:16

回答

1

好吧,這個問題是與服務器相關的...

從服務器管理Added www.domain1.com to the /etc/hosts file so that it looked to itself for the site.

謝謝大家的幫助,希望這將幫助其他人誰在未來有類似的問題

0

我會從這些方面着手:

1. DNS問題? 可能與您的server2上的DNS表問題(無法解析域2)。 從腳本嘗試執行功能 string gethostbyname (string $hostname)

或者爲了快速檢查,您還可以嘗試使用IP而不是域名。如果可行,問題出在DNS表上。嘗試刷新DNS緩存。

2.在服務器上過濾? 如果您使用的是通用主機,請嘗試寫入支持。也許他們可以協助。也許他們正在使用過濾。

如果domain2是您的,或者您有權訪問其日誌。檢查訪問日誌。如果你真的從你的服務器2請求到域2。

3.您是否在server2的黑名單中? 也有可能您的server2 IP位於domain2服務的黑名單中。

+0

使用IP地址代替域名給出相同的超時錯誤...我可以通過在瀏覽器中發佈'$ feedUrl'直接訪問博客XML feed ...對於2&3我已經發送問題給服務器管理員 – Kender 2015-02-09 18:57:22

+0

試試從「http://domain2.com/」獲取內容。至少我們會理解,如果我們在整個域或者只有feed的時候遇到問題。 +嘗試使用php exec time_limit = 0 此外,我會轉儲'$ rawFeed'(但我相信你已經做到了),以確保問題不在解析邏輯(也許你有非Xml響應,等等..)。在cUrl請求中,您還可以設置'CURLOPT_HEADER' = true。查看響應標題。你也可以使用'curl_getinfo()'。如果連接失敗,請使用代碼28,嘗試使用'CURLOPT_NOSIGNAL' = true(有時實際用於連接超時間隔<1000的* nix系統)。 – 2015-02-10 09:58:05

+0

我試圖從域1的索引頁(我有麻煩的域)獲取信息,並沒有得到數據(超時),而當試圖從域2(我的測試案例)獲取數據時,我沒有問題獲取數據...作爲就像'curl_getinfo()'我得到了'header_size'結果0 ...當運行腳本在這裏找到:http://php.net/manual/en/function.curl-getinfo.php#41332我得到了一個'30006毫秒後連接超時'錯誤,並且沒有錯誤代碼報告(0) – Kender 2015-02-10 15:23:49