【问题标题】:Best way to check image type [duplicate]检查图像类型的最佳方法[重复]
【发布时间】:2014-02-17 10:03:26
【问题描述】:

我的问题很简单:

检查图像类型的最佳(和安全)方法是什么?

我的网站需要它,我想上传照片。 (允许扩展 jpeg、png、gif?)

谢谢你...

【问题讨论】:

  • 文件扩展名与文件类型不同
  • 我不认为它是重复的。扩展名可以由用户更改...

标签: php


【解决方案1】:
<?php
if (exif_imagetype('image.gif') != IMAGETYPE_GIF) {
    echo 'The picture is not a gif';
}
?> 

See here 获取可能类型的列表

根据您的要求,您将不得不使用以下内容

IMAGETYPE_GIF
IMAGETYPE_JPEG
IMAGETYPE_PNG


它的安全性如何?

因为它不仅检查扩展名以声明无辜。它实际上是这样做的

exif_imagetype() 读取图像的第一个字节并检查其签名。 当找到正确的签名时,将返回适当的常量值,否则返回值为 FALSE。

【讨论】:

  • 这正是我想要的!谢谢! :)
  • getimagesize 和 exif_image 类型一样吗?
  • 根据 PHP 手册:The return value is the same value that getimagesize() returns in index 2 but exif_imagetype() is much faster.
  • 有了 14k 分,你应该知道比回答之前已经回答过的问题更好......
  • 你为什么不拿我的 14k 分然后发布你认为这个问题重复的相同答案?你链接到的那个问题,太可怕了。那里没有 1 个像样的答案可以称为此答案的副本。如果扩展匹配,并非所有编程都是字符串操作和检查正则表达式。
【解决方案2】:

你也可以像这样使用正则表达式:

if( preg_match('/\.(jpg|jpeg|png|gif)(?:[\?\#].*)?$/i', $image, $matches) ) {
    //Your code here
}

【讨论】:

    【解决方案3】:
    $filetype = pathinfo('yourimage.png', PATHINFO_EXTENSION);
    if($filetype == "jpeg" || $filetype == "jpg" || $filetype == "png" || $filetype == "gif"){ 
      echo "Yay, correct filetype!";
    }
    

    【讨论】:

      猜你喜欢
      • 2022-12-15
      • 2020-07-01
      • 1970-01-01
      • 2018-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-12
      • 2010-09-27
      相关资源
      最近更新 更多