php判断上传文件类型的代码一例

发布时间:2020-06-22编辑:脚本学堂
介绍一个判断上传文件类型的php代码,通过读取文件头信息的方式判断,有需要的朋友,可以参考下。

在php判断上传文件类型的各种方法中,读文件头是最常见的方法,但是读文件头是不能真实判断文件类型的。
判断文件类型,并不容易,本文为大家介绍一个php通过读文件头判断文件类型的代码,仅供参考。
除了office文件之外,对于其它文件类型的判断还是很准的。

代码如下:
 

复制代码 代码示例:
<?php
/**
 * 判断上传文件类型
 * Edit www.jb200.com
*/
    function file_type($filename) 
    { 
        $file = fopen($filename, "rb"); 
        $bin = fread($file, 2); //只读2字节 
        fclose($file); 
        $strInfo = @unpack("C2chars", $bin); 
        $typeCode = intval($strInfo['chars1'].$strInfo['chars2']); 
        $fileType = ''; 
        switch ($typeCode) 
        { 
            case 7790: 
                $fileType = 'exe'; 
                break
            case 7784: 
                $fileType = 'midi'; 
                break; 
            case 8297: 
                $fileType = 'rar'; 
                break;         
            case 8075: 
                $fileType = 'zip'; 
                break; 
            case 255216: 
                $fileType = 'jpg'; 
                break; 
            case 7173: 
                $fileType = 'gif'; 
                break; 
            case 6677: 
                $fileType = 'bmp'; 
                break; 
            case 13780: 
                $fileType = 'png'; 
                break; 
            default: 
                $fileType = 'unknown: '.$typeCode; 
        } 
     
        //Fix 
        if ($strInfo['chars1']=='-1' AND $strInfo['chars2']=='-40' ) return 'jpg'; 
        if ($strInfo['chars1']=='-119' AND $strInfo['chars2']=='80' ) return 'png'; 
     
        return $fileType; 
    } 
   
    //调用
    echo file_type('start.php');   // 6063 or 6033
?>
 

不知道反过来定义 6063或者6033 就是指php的话 是不是不够严谨啊。

上面的代码,对于构造假的图片的文件类型判断,不是很好使。
此时可以考虑使用getimagesize来判断,参考代码如下:
 

复制代码 代码示例:
<?php
/**
 * getimagesize判断文件类型
 * Edit www.jb200.com
*/
if(in_array($attach['ext'], array('jpg', 'jpeg', 'gif', 'png', 'swf', 'bmp')) && function_exists('getimagesize') && !@getimagesize($target))  

  unlink($target); 
  upload_error('post_attachment_ext_notallowed', $attacharray); 
}
?>