上传文件格式控制的困惑(application/octet-stream 限制不了BAT等格式上传)问题解决

允许上传类型部分代码
$uptypes=array(  //上传文件类型列表
'image/gif', 'image/jpg', 'image/jpeg', 'image/pjpeg', 'image/png','application/msword','application/vnd.ms-excel',
'image/bmp','text/plain','application/octet-stream','image/x-png','application/x-shockwave-flash','audio/mpeg','audio/x-ms-wma',
'application/x-zip-compressed'
);

判断文件类型部分
if(!in_array($_FILES["upfile"]["type"], $uptypes))
//检查文件类型
{
echo "<font color='red'>不能上传此类型文件!</font>";
exit;
}

      我的本意是想允许RAR这类文件上传,但做测试时,BAT,EXE等格式都可以上传,我测试了一下,这类文件的也是$_FILES["upfile"]["type"]是'application/octet-stream',所以就能上传了。

   目前我要想允许RAR上传,又能禁止BAT其它的格式文件上传怎么办?


解决的代码:
$uptypes=array(  //上传文件类型列表
'gif', 'jpg','jpeg','png','doc','xls',
'bmp','txt','rar','swf','mp3','wma',
'zip'
);
$test=$_FILES["upfile"]["name"];
function getFileExt($file_name)
{
        while($dot = strpos($file_name, "."))
         {
                $file_name = substr($file_name, $dot+1);
         }
        return $file_name;
}
$test1= strtolower(getFileExt($test));
if(!in_array($test1, $uptypes))
//检查文件类型
{
echo "<font color='red'>不能上传此类型文件!</font>";
exit();
}
小结:直接检查文件的扩展名用$_FILES["upfile"]["name"];,而不是用这个$_FILES["upfile"]["type"];文件的类型来限制。

posted on 2015-05-29 06:40  今天又进步了  阅读(39549)  评论(0编辑  收藏  举报

导航