【问题标题】:getting image type of remote image in php在php中获取远程图像的图像类型
【发布时间】:2011-04-25 07:33:07
【问题描述】:

在一个预构建的系统上工作,该系统抓取远程图像并将它们保存到服务器。

目前没有检查该图像是否确实存在于该远程位置,并且它是某种文件类型(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.
}

当我无法控制从中获取图像的 url 时,就会出现问题,例如:

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

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

【问题讨论】:

    标签: php image-processing


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      你可以的

      $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
      )
      

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

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

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

      【讨论】:

      • +1 这对于第一次检查来说已经足够了。 getimagesize()(实际解析文件的头字节)可以是下载后的第二次检查
      • 这太好了,谢谢。意味着我现在也可以摆脱正则表达式并检查 200 OK 以确保图像存在,然后再继续。
      猜你喜欢
      • 2013-10-04
      • 2012-08-11
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-24
      • 2019-09-10
      • 1970-01-01
      相关资源
      最近更新 更多