PHP有判断文件类型的函数
<?PHP
/*
函数说明:判断文件是不是在指定的文件类型中
参数:$file 要判断的文件名称
参数:$type 正确的文件类型,多种类型用"|"分开
*/function file_type($file,$type){
return eregi("\.($type)$",$file);
}if(file_type("index.php","htm|html|jpg|gif"))
echo "错误,不被允许的文件类型";
else echo"该文件可以上传";
?>

解决方案 »

  1.   

    我的意思是,不是上传的时候判断啊,而是上传后,怎么判断?数据库表里面有一个"access"字段,是记录附件的文件名的,譬如:
    access
    -------------
    abc.doc
    apple.jpg
    sadasdsa.gif
    polo.123.jpg
    abnn怎样根据扩展名判断啊? 注意,例如上面的polo.123.jpg,如果判断了123就错误了。就是判断最后的小数点之后的扩展名是否jpg或者gif,是就...,否则就...
      

  2.   

    改成
    <?PHP
    $type ="bmp|png|jpg|gif";
    $filename="polo.123.jpg";
    function file_type($file,$type){
    return eregi("\.($type)$",$file);
    }
    if(file_type($filename,$type)){
    echo "是图片";
    }else{echo"不是图片";}
    ?>
      

  3.   

    <?php
    $filename = "D:\\296.mid";
    $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 255216:
            $fileType = 'jpg';
            break;
        case 7173:
            $fileType = 'gif';
            break;
        case 6677:
            $fileType = 'bmp';
            break;
        case 13780:
            $fileType = 'png';
            break;
        default:
            echo 'unknown';
    }
    echo 'this is a(an) '.$fileType.' file:'.$typeCode;
    ?>
      

  4.   

    网上找的 不过不管是php还是.NET 判断真实的文件类型都是读取文件流 然后提取前两个字节 判断文件的真实类型 这样可以避免部分人改后缀名上传,比如把EXE后缀改成JPG上传
      

  5.   

    但现在发现jpg文件识别不了,很多jpg文件头都不是标准那两个字节。
      

  6.   

    前面的判断数值都写错了!两个十进制的字节是不能直接拼在一起的。例如JPG文件的开头是0xFF(255)D8(216),转换成十进制应该是65496,而不是255216,或者也可以直接写成0xFFD8,另外两个字节最大的整数是65535<255216,这也可看出有明显的错误