我编写了一个简单的内容用户,使用file_get_contents,但不幸的是,我的IP站点现在给出了一个302错误,转发到图像。对于所有其他用户,正常站点是可见的。如何在PHP中忽略带file_get_contents的移动头?
如何重写get_contents,以便它只下载网站的内容而不是实际遵循重定向?
$html = file_get_contents("http://www.site.net/");
我编写了一个简单的内容用户,使用file_get_contents,但不幸的是,我的IP站点现在给出了一个302错误,转发到图像。对于所有其他用户,正常站点是可见的。如何在PHP中忽略带file_get_contents的移动头?
如何重写get_contents,以便它只下载网站的内容而不是实际遵循重定向?
$html = file_get_contents("http://www.site.net/");
这里没有内容。在发送任何内容之前,重定向发生在HTTP响应中。
服务器决定你看到(或不看)的内容。
你需要创建一个情境:
$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机构,但它绝对是非正统的。
请记住,'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。这是正确的答案。 – nalply 2012-10-14 16:50:28
重定向发生在HTTP响应头部。但是,配置错误的服务器可能会发送输出,即使它正在发送一个新位置以及响应代码302. – AndersTornkvist 2011-05-15 15:30:51
**此答案不正确**(为避免任何疑问)。正如@Oliver所说,假设没有302内容是不安全的。 – John 2017-03-31 06:01:01