日期:2014-05-17  浏览次数:20502 次

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 项吗?根据后缀判别一下

再就是查看文件的前几个字节,来判定文件类型