【问题标题】:Check file type?检查文件类型?
【发布时间】:2011-07-18 05:48:06
【问题描述】:

我需要在上传时检查文件的类型以确保它是图片。我想做的是检查 MIME 文件类型(来自$_FILE),然后检查扩展名。比如:

function checkType($file){

    $ext = pathinfo($_FILES[$file]['name'], PATHINFO_EXTENSION);
    $mime = $_FILES[$file]['type'];

    if($mime == "image/jpg" || $mime == "image/jpeg"){

        if($ext == "jpg" || $ext == "jpeg"){
            return true;
        } else{
            return false;
        }

    }

    if($mime == "image/gif"){

        if($ext == "gif"){
            return true;
        } else{
            return false;
        }

    }

    if($mime == "image/png"){

        if($ext == "png"){
            return true;
        } else{
            return false;
        }

    }

}

这是一个好方法吗?有什么建议吗?

另外,在图像最终上传到服务器之前,我将如何获取图像的宽度?

【问题讨论】:

    标签: php file-upload


    【解决方案1】:

    您永远不应依赖$_FILE 提供的内容类型,因为它是由浏览器设置的,而不是由您的服务器设置的。

    如果您需要图片,您应该使用getimagesize() 来获取图片的类型。

    示例:

    $imagedata = getimagesize($_FILES['image']['tmp_name']);
    $mime = $imagedata['mime'];
    

    然后,您应该确保 $mime 不为空,并且它包含您想要的 MIME 类型。

    以下是使用 Google 徽标的示例:http://codepad.viper-7.com/9GBDf9

    【讨论】:

    • 非常感谢。图片的宽度也可以使用getimagesize吗?
    • @user811348 - 当然可以!看看文档。上面$imagedata 数组的第一个和第二个成员包含高度和宽度。 :)
    • 太棒了。不过有一件事。它不工作。即使我只是将其简化为仅回显 mime 类型,它也不会返回任何内容。
    • 在我可以在其上运行getimagesize() 之前,是否必须将图像上传到永久位置的服务器?
    • @user811348 - 不。您也应该可以从临时位置执行此操作。只要 PHP 可以读取它。如果mime 键为空,则该文件无效。您应该尝试使用var_dump($imagedata) 来查看数组包含的内容。
    【解决方案2】:

    不,很糟糕。 Mime 类型与实际文件内容不匹配。要确定您收到的上传文件类型(或者如果它实际上是图像),您需要检查文件内容。

    例如尝试getimagesize 之类的函数。如果它将返回有效数据,那么您就有了图像。

    【讨论】:

      猜你喜欢
      • 2011-08-02
      • 2013-08-26
      • 2014-07-24
      • 2011-12-27
      • 1970-01-01
      • 2011-04-03
      • 2012-01-29
      • 2013-03-06
      • 2016-11-17
      相关资源
      最近更新 更多