2018年04月6日网站服务器迁移完成……

用PHP精准判断上传文件类型

php 苏 demo 1365℃ 0评论

代码:

/**
 * 读取文件前几个字节 判断文件类型
 *
 * @return String
 */
function checkTitle($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 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' && $strInfo['chars2'] == '-40') {
        return 'jpg';
    }
    if ($strInfo['chars1'] == '-119' && $strInfo['chars2'] == '80') {
        return 'png';
    }
    return $fileType;
}

 

对于上传文件类型的判断,一直没有太好的办法,即使使用上面的代码,也有办法构造假的图片的(如何构造不再传播),有人使用getimagesize来判断,不失为一种好办法:
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);
}
 

 

 

 

 

打赏

转载请注明:苏demo的别样人生 » 用PHP精准判断上传文件类型

   如果本篇文章对您有帮助,欢迎向博主进行赞助,赞助时请写上您的用户名。
支付宝直接捐助帐号oracle_lee@qq.com 感谢支持!
喜欢 (0)or分享 (0)
发表我的评论
取消评论
表情