2010-02-13 125 views
1

我在閱讀某些網址時遇到問題。沒有什麼不對的網址,因爲我可以在瀏覽器中查看它們(這樣一個URL的示例如下):fopen不適用於某些網址?

http://www.bloomberg.com/apps/news?pid=20601087&sid=a2BhXFMpbb5M

我使用的fopen像這樣在我的代碼:

public static function grokPage($path) 
{ 
    $data = ''; 
    $file = fopen($path, "r"); 

    if ($file) 
    { 
     while (!feof($file)) 
      $data .= fgets($file, 1024); 
    } 
    return $data; 
} 

我得到的錯誤是:

警告:FOPEN(http://www.bloomberg.com/apps/news?pid=20601087&sid=a2BhXFMpbb5M)[0function.fopen0]:未能打開流:重定向達到上限,在xxx_filename.php中止

從PHP fopen文檔看來,我正在正確使用該功能。有沒有人瞭解遞歸警告和如何解決它?

回答

2

這意味着您的目標頁面將返回更多重定向到不同的地址(可能使用Location:標題),而不是您指定的max_redirects設置。

這看起來像一個very good article關於如何使用fopen包裝獲取網頁。它包含一個關於如何更改max_redirects設置的示例。

它很可能是,不過,彭博有意關閉你了,因爲它檢測自動數據拼搶,這可能違反其條款和條件。

+0

請閱讀已發佈的使用條款 - 這可能只是一個錯誤。 IIRC URL封裝器不提供有效的用戶代理 - 但是,使用捲曲函數時可以指定一個。 – symcbean 2010-02-13 21:23:42

+0

謝謝。我終於搞定了。順便說一句,我給的網址只是我測試鏈接的一個例子。 – 2010-02-14 01:16:25

2

「達到極限重定向」意味着遠程網站發回一個Location頭,該位置之後,然後重定向的位置再次給了一個Location頭。這個過程一直持續到達到預定數量的重定向(位置標題)。

這可能是該網站有意嘗試將客戶端重定向到其他地方,但有一個導致循環的錯誤。

你應該考慮嘗試另一種獲取URL的方式 - 一種讓你指定諸如用戶代理字符串之類的東西的方法。嘗試curl,它很醜,但效果很好。嘗試僞裝成IE6或Firefox而不是PHP或curl。

編輯:佩卡的評論包含使用fopen封裝,包括如何設置用戶代理字符串信息的鏈接。

相關問題