PHP上传问题
在IE里不加case "application/octet-stream":这句能正常上传.zip文件,但是在谷歌浏览器里不行,然后加了这句话后,IE上传其他类型的文件时都会弄成.zip的,也不报错,谷歌倒是正常了,请问是哪里有问题呢??
一下是代码:
<?php
if(!empty($_POST['sub'])){
$ym=$_FILES['up']['name'];
$size=$_FILES['up']['size'];
$tmpname=$_FILES['up']['tmp_name'];
$error=$_FILES['up']['error'];
echo $lx=$_FILES['up']['type'];
if($size<=2000000){
switch ($lx){
case "image/jpg":
case "image/pjpeg":
case "image/jpeg":
$lujing=".jpg";
break;
case "image/gif":
$lujing=".gif";
break;
case "image/x-png":
case "image/png":
$lujing=".png";
break;
case "application/x-zip-compressed":
case "application/octet-stream":
$lujing=".zip";
break;
case "application/pdf":
$lujing=".pdf";
break;
default:$lujing=false;
}
if($lujing==".jpg" || $lujing==".gif" || $lujing==".png"){
if(!file_exists('img')){
mkdir("img");
}
move_uploaded_file($tmpname, "img/".time().$lujing);
switch($error){
case 0:
Echo "上传成功"; break;
}
}elseif($lujing==".zip"){
if(!file_exists('zip')){
mkdir("zip");
}
move_uploaded_file($tmpname, "zip/".time().$lujing);
switch($error){
case 0:
Echo "上传成功"; break;
}
}elseif($lujing==".pdf"){
if(!file_exists('pdf')){
mkdir("pdf");
}
move_uploaded_file($tmpname, "pdf/".time().$lujing);
switch($error){
case 0:
Echo "上传成功"; break;
}
}
else{
echo "文件超出类型!";
}
}else{
echo "你传的文件太大啦!";
}
}
?>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="up">
<input type="submit" name="sub" value="上传">
</form>
[解决办法]
$_FILES['file']['type'] 中的值是浏览器产生的
也就是说浏览器说他是什么就是什么
如果你需要根据这个来判定上传文件的类型,就需要了解各种浏览器都可能识别成什么
[解决办法]
浏览器识别不了的都是这个类型,这个是看浏览器能力的。
Content-Type: application/octet-stream
[解决办法]
不可能,你没办法去修改浏览器
即使你有能力修改浏览器,也不可能让用户去使用你修改后的浏览器
不是还有个 name 项吗?根据后缀判别一下
再就是查看文件的前几个字节,来判定文件类型