【问题标题】:Php upload docx and pdf filesphp上传docx和pdf文件
【发布时间】:2017-05-24 08:58:38
【问题描述】:

我已经使用此代码上传图像并且它有效,但现在我尝试将其更改为上传 docx 和 pdf,但它总是只给出 docx 和 pdf 文件的错误,它无法检查 docx 和 pdf 的扩展名像jpg,png等...? 对不起我的英语。

<?php   
extract($_POST);

$UploadedFileName=$_FILES['UploadImage']['name']['nome'];
if($UploadedFileName!='') {
  $upload_directory = "../../../documentos/formularios/"; 
  $nome=$_POST['nome'];
  $TargetPath=time().$UploadedFileName;
  $imageFileType = pathinfo($TargetPath,PATHINFO_EXTENSION);
  $ficheirogrande='<div class="alert alert-danger">O Ficheiro ultrapassa <strong>2 Megas</strong></div>';   
  $preenchimentoobrigadorio='<div class="alert alert-danger">Campo <strong>nome</strong> de preenchimento obrigatório</div>';   
  $apenasficheiros='<div class="alert alert-danger">Apenas Ficheiros <strong>PDF e DOCX</strong> podem ser inseridos</div>';

  if(empty($_POST['nome']) || false === filter_var($_POST['nome'])){
    echo $preenchimentoobrigadorio; 
  } else {
    if ($_FILES["UploadImage"]["size"] > 2200000){ //2.09808
      echo $ficheirogrande;
    } else {
      if($imageFileType != "application/msword" && $imageFileType != "docx" && $imageFileType != "pdf" ){
        echo $apenasficheiros;
      } else {
        if(move_uploaded_file($_FILES['UploadImage']['tmp_name'], $upload_directory.$TargetPath)){
          $caminho="documentos/formularios/$TargetPath"; 
          $queryinserir="INSERT INTO DOCUMENTOS(LINK_DOCUMENTOS,NOME,FORMULARIOS) VALUES ('$caminho','$nome','1')";

          mysqli_query($conn,$queryinserir); 

          $enviado='<div class="alert alert-success">Documento Inserido com <strong>Sucesso</strong></div>';
          echo $enviado;    
        } else {    
          $naoenviado='<div class="alert alert-danger">Documento <strong>Nao Inserido</strong></div>';
          echo $naoenviado;
        }
      }
    }
  }
}
?>

【问题讨论】:

  • $_FILES['UploadImage']['name']['nome'] 是什么?!你不会在这一行得到错误吗?!而PATHINFO_EXTENSION 只会返回文件扩展名,所以你可能永远不会有application/msword 作为文件扩展名。同样在这一行if($imageFileType != "application/msword" &amp;&amp; $imageFileType != "docx" &amp;&amp; $imageFileType != "pdf" ){ 你应该使用|| 而不是&amp;&amp; 否则它将总是返回false,这就是你总是得到错误的原因......

标签: php sql file upload directory


【解决方案1】:

您没有将新文件保存在$targetPath,因此该文件不存在且无法获取扩展名

另外,使用扩展也不是一种安全的方法。您应该使用 MIME 类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多