检查文件类型?

时间:2011-07-18 05:48:06

标签: php file-upload

我需要在上传时检查文件的类型,以确保它是图像。我正在考虑的是检查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;
        }

    }

}

这是一个好方法吗?建议?

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

2 个答案:

答案 0 :(得分:3)

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

如果您期待图片,则应使用getimagesize()来获取图片类型。

示例:

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

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

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

答案 1 :(得分:2)

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

尝试像getimagesize这样的功能。如果它将返回有效数据,那么你有一个图像。