file_get_contents()的问题

时间:2014-03-11 21:13:59

标签: php file-get-contents

我正在用PHP编写代码,该代码从大约20个网站获取特定格式的内容。

除了一个以外的所有网站都正常工作。现在,问题在于此 我正在使用file_get_contents()从网站上获取图像并将其保存在我的服务器上。该图像存在于远程服务器上,可通过浏览器访问,但我通过代码执行404响应。

我无法理解这背后的问题,因为这种方法适用于其他网站。

是否与正在发送的标头有关?任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

答案可能是:是的......

我想,他们正在检查用户代理。

这些是在你的标题中发送的。你可以伪造你的用户代理。不要使用file_get_contents(),因为这不允许伪造您的用户代理。 查看curl

修改1

Barmar的链接显示了同时使用file_get_contents()和其他用户代理的可能性。在研究......时,这是值得的。

修改2

但也可以检查引荐来源 ...如果是这种情况,您确实需要使用curl才能设置引荐来源

编辑3

现在看到了网址,并查看了你得到的错误404(不是50x),我建议你检查网址是否被转义并解析好了。我看到URL包含空格,域名后面有两个斜杠。检查空格是否转义为%20,以及是否不应将双斜线剥离为仅一个斜杠。

所以

http://celebslam.celebuzz.com//bfm_gallery/2014/03/Lindsay Lohan 2 Broke Girls/gallery_enlarged/gallery_enlarged-lindsay-lohan-2-broke-girls-01.jpg

应该成为

http://celebslam.celebuzz.com/bfm_gallery/2014/03/Lindsay%20Lohan%202%20Broke%20Girls/gallery_enlarged/gallery_enlarged-lindsay-lohan-2-broke-girls-01.jpg

请注意,服务器是CaSe-SeNsItIvE!

答案 1 :(得分:1)

是的,首先 - 检查,如果该网站检查参与者的图像访问。例如,尝试直接在浏览器中获取图像

它还可以检查用户代理字段和其他内容

可能有助于通过curl获取文件(代码示例很容易找到,或者我会给你简单的类)

P.S>很有意思你能举一些图片的网址示例吗?

答案 2 :(得分:0)

可能是推荐人或用户代理人。这包括:

function file_get_contents_custom($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_REFERER, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION , 1);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux; i686; en-US; rv:1.6) Gecko Debian/1.6-7'); 
    $data = curl_exec($ch); 
    curl_close($ch);
    return $data;
}

更新:

使用file_get_contents,您链接的图片对我来说很好。可能是服务器具有某种DDOS保护。您平均有多少次请求?