我在阅读一些网址时遇到了问题。网址没有任何问题,因为我可以在我的浏览器中查看它们(下面给出了一个这样的URL的示例):
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 doc,似乎我正在使用该函数。有没有人理解递归警告以及如何解决它?
答案 0 :(得分:2)
这意味着您的目标网页会将更多重定向返回到不同的地址(可能使用Location:
标头),而不是max_redirects
设置指定的地址。
这看起来像very good article关于如何使用fopen包装器获取网页。它包含有关如何更改max_redirects
设置的示例。
但很可能彭博正在故意关闭你,因为它检测到自动数据抓取,这可能违反了他们的条款和条件。
答案 1 :(得分:2)
“已达到重定向限制”表示远程站点正在发送一个Location标头,该位置已被跟踪,然后重定向的位置再次给出了Location标头。此过程一直持续到达到预定义数量的重定向(位置标题)。
该网站可能是故意尝试将客户端重定向到其他地方,但是有一个导致循环的错误。
您应该考虑尝试其他方式来获取URL - 允许您指定用户代理字符串之类的URL。试试curl,这很丑,但效果很好。尝试伪装成IE6或Firefox而不是PHP或curl。
编辑:Pekka的评论包含一个链接,其中包含有关使用fopen包装器的信息,包括如何设置用户代理字符串。