URL重定向的次数上限

很多PHP开启档案的函式包括file() , fopen() , file_get_contents()等等,除了开启本机硬碟中的档案,也可以开启网络上的资源,例如:
$lines = file('http://www.example.com/');
$handle = fopen('http://www.example.com/', "r");
$homepage = file_get_contents('http://www.example.com/');

你是否见过以下的错误呢?

<samp>PHP Warning: file_get_contents(http://example.org/):
failed to open stream: Redirection limit reached, aborting</samp>

Christian Weiske发现原来PHP跟踪URL重定向(URL redirection)有次数限制 ,并提出了解决办法。

以上显示的错误讯息表示你输入的URL送回一个HTTP Location:标头,表示真正的资料放在另一个URL,当PHP追踪到第二个URL的时候,它却告诉PHP需要到第三个URL找寻,如是者继续下去……重复了20 次,这时PHP 举手投降,拒绝再跟踪下去,并送回一个错误讯息给你。

同样会导致URL 重定向的HTTP 标头包括:

  • 301 Moved Permanently
  • 302 Found
  • 303 See Other
  • 307 Temporary Redirect

如果你要开启的档案有机会需要超过20次URL重定向才找得到,可以修改HTTP stream context中的max_redirects选项:
$context = stream_context_create(
array(
'http' => array(
'max_redirects' => 101
)
)
);
$content = file_get_contents('http://example.org/', false, $context);
?>

必须注意假如max_redirects的值为1或以下,表示不追踪URL重定向。

你也可以完全不追踪URL重定向,只要设定follow_location便可以:
$context = stream_context_create(
array(
'http' => array(
'follow_location' => false
)
)
);
$content = file_get_contents('http://example.org/', false, $context);
?>

打赏此文

如果您觉得本站的内容对您有所帮助,您可以扫描下面的二维码小额支付请我喝杯茶,感谢!打赏记录
支付宝
微信
承诺:凡打赏捐助的朋友,留言备注自己的邮箱,在打赏捐助时间点的6个月内,本站会每周邮件推送原创专业技术博文,供大家学习和参考!

留下评论

All fields marked (*) are required