在php中获取远程图像的图像类型

时间:2010-10-14 09:34:32

标签: php image-processing

使用预先构建的系统来抓取远程图像并将其保存到服务器。

目前没有检查图像是否确实存在于该远程位置,并且它是某种文件类型(jpg,jpeg,gif),我的任务是同时执行这两种操作。

我认为这非常简单,因为我只使用简单的正则表达式和getimagesize($ image):

$remoteImageURL = 'http://www.exampledomain.com/images/image.jpg';

if(@getimagesize($remoteImageURL) && preg_match("/.(jpg|gif|jpeg)$/", $remoteImageURL) )
{
    // insert the image yadda yadda.
}

当我无法控制我正在抓取图像的网址时出现问题,例如:

http://www.exampledomain.com/images/2?num=1

所以当谈到这一点时,正则表达式和getimagesize()都会失败,有没有更好的方法呢?

2 个答案:

答案 0 :(得分:12)

你可以做到

$headers = get_headers( 'http://www.exampledomain.com/images/2?num=1' );

$headers变量将包含类似

的内容
Array
(
    [0] => HTTP/1.1 200 OK
    [1] => Date: Thu, 14 Oct 2010 09:46:18 GMT
    [2] => Server: Apache/2.2
    [3] => Last-Modified: Sat, 07 Feb 2009 16:31:04 GMT
    [4] => ETag: "340011c-3614-46256a9e66200"
    [5] => Accept-Ranges: bytes
    [6] => Content-Length: 13844
    [7] => Vary: User-Agent
    [8] => Expires: Thu, 15 Apr 2020 20:00:00 GMT
    [9] => Connection: close
    [10] => Content-Type: image/png
)

这将告诉您资源是否存在以及它是什么内容类型(不一定也是图像类型)。

编辑根据Pekka的评论,您仍然可能想要在下载后确定它的mime类型。见

某些给定方法也适用于远程文件,因此您可以完全跳过get_headers预检。决定哪一个适合你的需要。

答案 1 :(得分:0)

将远程文件存储在服务器上,然后在本地服务器上运行getimagesize