如何验证$ _FILES ['userfile'] ['type']提供的mime类型

时间:2012-10-27 03:07:07

标签: php image file-upload mime-types

我正在阅读php.net link上的文档,并出现在以下行中:

  

$ _ FILES [ 'userfile的'] [ '类型']

The mime type of the file, if the browser provided this information. An example 
would be "image/gif". This mime type is however NOT checked on the PHP side 
and therefore don't take its value for granted.

那么如何验证文件是否具有适当的mime类型以防止用户将可能有害的文件上传到服务器;或者在代码执行服务器端导致错误(因为我可能会尝试在不是jpeg图像的文件上使用仅jpeg函数)?

提前致谢

2 个答案:

答案 0 :(得分:1)

    function getMimeType()
        {

                $finfo = new finfo(FILEINFO_MIME);
                $type = $finfo->file($_FILES['field_name']['tmp_name']);//change the field_name
                $mime = substr($type, 0, strpos($type, ';'));
                return $mime;

        }

        function isValidImage()
        {

            $mime = getMimeType();
            if(stristr($mime,'image'))
                return true;
            else 
                return false;

        }
        $res=isValidImage();

试试这个,它也会检查mime。

答案 1 :(得分:0)

您可以使用finfo_file找出PHP认为该文件的类型。但是,我认为这也不能依赖。我相信它使用启发式扫描,它不会扫描整个文件以确保它完全有效。例如。如果它以<html>开头,它会说它是text/html,它不会解析整个事情以确保它是正确的。