php上传图像和文档,如pdf、doc、ppt

php上传图像和文档,如pdf、doc、ppt,php,Php,大家好,我一直在一个网页上工作,用户可以上传图像和应用程序,如word文件、ppt、pdf、excel文件等。。但是我不确定我的代码是否有人可以建议我一个更好更安全的方法来处理这个问题。我不想从客户端而是从服务器端进行mime检查。而且我希望上传的最大文件大小为7MB。 这是我的代码,有人能给我提些建议吗 $allowedExts = array("pdf", "doc", "docx","png","jpg","jpeg","gif"); $extension = end(explode("

大家好,我一直在一个网页上工作,用户可以上传图像和应用程序,如word文件、ppt、pdf、excel文件等。。但是我不确定我的代码是否有人可以建议我一个更好更安全的方法来处理这个问题。我不想从客户端而是从服务器端进行mime检查。而且我希望上传的最大文件大小为7MB。 这是我的代码,有人能给我提些建议吗

 $allowedExts = array("pdf", "doc", "docx","png","jpg","jpeg","gif");
$extension = end(explode(".", $_FILES["uploadpic"]["name"]));
if (($_FILES["uploadpic"]["type"] == "application/pdf") ||
($_FILES["uploadpic"]["type"] == "application/msword") || 
 ($_FILES["uploadpic"]["type"] 
 == "application/vnd.openxmlformats-officedocument.wordprocessingml.document") ||  
 ($_FILES["uploadpic"]["type"] == "image/png") ||
   ($_FILES["uploadpic"]["type"]=="image/jpeg") || 
   ($_FILES["uploadpic"]["type"] == "image/jpg") 
    && ($_FILES["uploadpic"]    ["size"] < 7340032) && 
   in_array($extension,  $allowedExts))
{
  if ($_FILES["uploadpic"]["error"] > 0)
  {
echo 'error';
exit;
  }
  else
  {
   $filetname=$_FILES ['uploadpic']['tmp_name'];
    $filename=$_FILES ['uploadpic']['name'];
   $insert=move_uploaded_file($filetname,"folder/$filename"); 
   $insertpostsandpic=mysql_query("insert into `database` (`id`,`name`,`date`) 
    values   ('$id','$filename','$time')");
     echo 'sucess'; exit;
     }
      } else{
   echo 'fail';
   exit;
      }
$allowedExts=数组(“pdf”、“doc”、“docx”、“png”、“jpg”、“jpeg”、“gif”);
$extension=end(分解(“.”,$_文件[“uploadpic”][“name”]);
如果($_文件[“uploadpic”][“type”]=“application/pdf”)||
($_文件[“uploadpic”][“type”]=“application/msword”)||
($_文件[“uploadpic”][“type”]
==“application/vnd.openxmlformats of cedocument.wordprocessingml.document”)||
($_文件[“uploadpic”][“type”]=“image/png”)||
($_文件[“uploadpic”][“type”]=“image/jpeg”)||
($_文件[“uploadpic”][“type”]=“image/jpg”)
&&($_文件[“uploadpic”][“大小”]<7340032)和
in_数组($extension$allowedExts))
{
如果($_文件[“uploadpic”][“错误”]>0)
{
回声“错误”;
出口
}
其他的
{
$filetname=$\u文件['uploadpic']['tmp\u名称'];
$filename=$_文件['uploadpic']['name'];
$insert=移动上传的文件($filetname,“folder/$filename”);
$insertpostsandpic=mysql\u查询(“插入到数据库中”(`id`、`name`、`date`)
值(“$id”、“$filename”、“$time”);
呼应“成功”;退出;
}
}否则{
回声“失败”;
出口
}

创建两个数组:一个具有可接受的扩展名,另一个具有可接受的mime类型。使用
SplFileInfo::getExtension()
获取文件扩展名

我建议使用以下代码:

$accepted_mimes = array(
    'image/png',
    'application/pdf',
    'addyourown'
);
$accepted_extensions = array(
    'png',
    'pdf',
    'addyourown'
);
$max_file_size = 7*1000*1000;
$file = $_FILES['filename']['tmp_name'];

$obj = new SplFileInfo($file);
$extension = $obj->getExtension();
$mime = $obj->getType();
$size = $obj->getSize();

if(!in_array($extension, $accepted_extensions))
{
    echo 'Extension '. $extension .' not accepted';
}
if(!in_array($mime, $accepted_mimes))
{
    echo 'Extension '. $mime .' not accepted';
}
if($size > $max_file_size)
{
    echo 'File size exceeded maximum file size limit';
}

这工作正常吗?是的,它工作正常,但不适用于ppt文件,而且这里的mime检查是用户端的。用户可以通过将其扩展名更改为PNG来上载php文件。在脚本中看不到任何对
ppt
文件的检查。。