【问题标题】:How can I check whether or not a file is an image?如何检查文件是否为图像?
【发布时间】:2017-02-13 14:54:02
【问题描述】:

我可以检查某个文件是否是图像吗?如何在 PHP 中做到这一点?

如果文件不是图片,我想给出警告信息。

【问题讨论】:

  • 很多类似的问题已经在 SO...请尝试搜索
  • @MitchWheat:我搜索但我无法正确找到如何检查和实施。
  • 您是浏览和导入文件还是直接从特定来源读取文件?
  • @sree: 是的,当点击提交按钮时我想检查。

标签: php image


【解决方案1】:

除了getimagesize(),还可以使用exif_imagetype()

exif_imagetype() 读取图像的第一个字节并检查其签名。

当找到正确的签名时,将返回适当的常量值,否则返回值为 FALSE。返回值与 getimagesize() 在索引 2 中返回的值相同,但 exif_imagetype() 更快。

对于这两个函数,如果文件未被确定为图像,则返回 FALSE。

【讨论】:

  • -1 - 这两个函数都会引发读取错误,至少在 5.3 中是这样。
  • @MikeSchinkel 请澄清。
  • 例如herehere。在我的情况下,我得到了'.''..''.DS_Store',这对我来说是合理的过滤掉。但是您无法捕获读取错误,因此您必须通过检查可能导致问题的所有内容(文件是否存在,权限正确,其他?),确保它永远不会发生。
  • 好吧,你应该先使用is_file() @MikeSchinkel,这不是替代品。
【解决方案2】:

在 PHP 中,您可以按照以下方式进行操作

if ((($_FILES['profile_picture']['type'] == 'image/gif') || ($_FILES['profile_picture']['type'] == 'image/jpeg') || ($_FILES['profile_picture']['type'] == 'image/png')))

在 Javascript 中你可以按照以下方式进行操作

function checkFile() {
   var filename = document.getElementById("upload_file").value;
   var ext = getExt(filename);
 //  alert(filename.files[0].filesize);
  // alert(ext);
   if(ext == "gif" || ext == "jpg" || ext=="png")
      return true;
   alert("Please upload .gif, .jpg and .png files only.");
   document.getElementById("upload_file").value='';
   return false;
}

function getExt(filename) {
   var dot_pos = filename.lastIndexOf(".");
   if(dot_pos == -1)
      return "";
   return filename.substr(dot_pos+1).toLowerCase();
}

【讨论】:

  • 我确信他需要检查文件是否只是将 sheet.pdf 重命名为 sheet.jpg。你明白我的意思。
  • 不用说抱歉,您将 sheet.pdf 重命名为 sheet.jpg 做得很好,我将不得不在这部分工作,谢谢您的想法
【解决方案3】:

php 我们可以使用filetype ( string $filename )mime_content_type ( string $filename )

但是mime_content_type ( string $filename )deprecated

http://php.net/manual/en/function.filetype.php

javascript我们可以使用自定义函数

http://my-sliit.blogspot.in/2009/04/how-to-check-upload-file-extension.html

【讨论】:

    【解决方案4】:

    我会这样做以找出...

    $type =array('jpg','gif');
    
    foreach($type as $val){
    
    if($_FILES['filename']['type'] == 'image/$val')
    {
    echo "its an image file";
    }
    else{
    echo "invalid image file"
    }
    

    【讨论】:

    • 我没有投反对票。我很少投反对票。如果我对你的答案有任何疑问,我会问你,而不是投反对票。
    • 它是为曾经投反对票的人准备的。但是,尽管你认为,我也这样做...
    【解决方案5】:

    更好更快的方法是使用exif_imagetype()。像这样的东西应该可以完成工作:

    $valid_formats = array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG);
    $file_format = exif_imagetype($filename);
    
    if(!in_array($file_format, $valid_formats))
        echo("File format is not valid");
    

    【讨论】:

      猜你喜欢
      • 2011-01-12
      • 2013-08-15
      • 2014-11-15
      • 2019-02-16
      • 2012-11-25
      • 2014-03-11
      • 2014-11-25
      • 2010-10-27
      相关资源
      最近更新 更多