2011-05-15 50 views
3

我编写了一个简单的内容用户,使用file_get_contents,但不幸的是,我的IP站点现在给出了一个302错误,转发到图像。对于所有其他用户,正常站点是可见的。如何在PHP中忽略带file_get_contents的移动头?

如何重写get_contents,以便它只下载网站的内容而不是实际遵循重定向?

$html = file_get_contents("http://www.site.net/"); 

回答

-1

这里没有内容。在发送任何内容之前,重定向发生在HTTP响应中。

服务器决定你看到(或不看)的内容。

+0

重定向发生在HTTP响应头部。但是,配置错误的服务器可能会发送输出,即使它正在发送一个新位置以及响应代码302. – AndersTornkvist 2011-05-15 15:30:51

+1

**此答案不正确**(为避免任何疑问)。正如@Oliver所说,假设没有302内容是不安全的。 – John 2017-03-31 06:01:01

20

你需要创建一个情境:

$context = stream_context_create(
    array (
     'http' => array (
      'follow_location' => false // don't follow redirects 
     ) 
    ) 
); 
$html = file_get_contents('http://www.site.net/', false, $context); 

参见手册:

随着中说,这是极有可能不存在内容留在页面上。服务一个302头并不是不可能的,并且也可以服务于一个HTTP机构,但它绝对是非正统的。

+1

请记住,'follow_location'仅适用于PHP 5.3.4(每个人都应该运行比这更新的东西)。还有一个“ max_redirects => 0“内部数组是必要的(请参阅http://php.net/manual/en/context.http.php上的示例#2) – 2012-08-01 20:17:03

+1

+1。这是正确的答案。 – nalply 2012-10-14 16:50:28