来自url src的PHP图像返回403错误和application / octet-stream

时间:2014-12-01 22:23:21

标签: php html image

当我遇到以前从未有过的东西时,从网址中提取图像。标头检查返回403错误,虽然图像扩展名列为.jpg,但它们作为应用程序/八位字节流返回,并检查内容类型返回text / html。

我已经阅读了403"通常"是为了防止屏幕报废,但这只是在图像上。

我发现很奇怪,我可以查看网页的来源,查看图像src,然后单击它并将图像返回到浏览器,但不是通过代码。

有没有办法将图片网址转换为实际图片?我最终想从图像中提取高度,宽度,大小信息,并将它们保存到我服务器上的文件夹中。

$html = file_get_contents($url);
$doc = new DOMDocument();
$doc->loadHTML($html);

$tags = $doc->getElementsByTagName('img');
foreach ($tags as $tag){

$image_src = $tag->getAttribute('src');

echo get_headers($image_src, 1); //returns a 403 Forbidden Error

echo image_type_to_mime_type(exif_imagetype($image_src)); //returns application/octet-stream

$i = getimagesize($image_src);
var_dump($i); //returns bool(false)

$c = curl_init();
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_CUSTOMREQUEST, 'HEAD');
curl_setopt($c, CURLOPT_HEADER, 1);
curl_setopt($c, CURLOPT_NOBODY, true);
curl_setopt($c, CURLOPT_URL, $image_src);
curl_exec($c);
echo $content_type = curl_getinfo($c, CURLINFO_CONTENT_TYPE); //returns text/html

}

1 个答案:

答案 0 :(得分:0)

根据我的经验,在处理图像获取应用程序/八位字节流时​​,如果您希望使用mime类型的图像/ jpeg,图像/ png等,则是由于脚本无法正确处理图像,错误的PHP配置。 (例如,图像大于最大文件上传或帖子大小会给出八位字节流的mime)

在url上使用file_get_contents(),您需要确保启用了allow_url_fopen,以便允许fopen获取URL的内容,就好像它是本地文件一样。 (PHP INI allow_url_fopen

或者看一下使用cURL下载网址并从那里开始(看看这个answer以获得这样做的方法)。尝试配置更改和cURL过程,看看它们是否会产生相同的结果。

然而,您收到403错误的事实听起来像是远程端的东西,不允许您通过您的特定请求检索图像。正确识别出这可能是一种阻止抓取的安全尝试。您是否尝试使用其他网站从您手中获取图像或服务器?

希望这里有所帮助:)