2010-02-13 167 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封装,包括如何设置用户代理字符串信息的链接。

相关问题