【问题标题】:I can't upload pdf files, all other file extensions are working fine我无法上传 pdf 文件,所有其他文件扩展名都可以正常工作
【发布时间】:2022-01-29 06:00:50
【问题描述】:

我正在尝试将 pdf 文件上传到服务器,但由于某种原因,我尝试过的所有操作都不起作用。我已经更改了文件夹、文件的权限..(读取+写入)我还更改了 php.ini 中的最大文件大小除 pdf 之外所有其他文件都可以正常工作。有人可以帮我解决这个问题吗?提前谢谢你。

   <?php
  $target_dir = "uploads/";
  $target_file = $target_dir . basename($_FILES["archivoSubir"]["name"]);
  $uploadOk = 1;
  $tipoFichero = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

  // Comprobar si el archivo actual es una imagen o no
  if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["archivoSubir"]["tmp_name"]);
    if($check !== false) {
      echo "El archivo es una imagen - " . $check["mime"] . ".";
      $uploadOk = 1;
    } else {
      $uploadOk = 0;
    }
  }
  // Limitar formato de archivos
  if($tipoFichero != "jpg" && $tipoFichero != "png" && $tipoFichero != "jpeg"
  && $tipoFichero != "gif" && $tipoFichero != "application/pdf") {
    echo 'Lo siento, solo archivos JPG, JPEG, PNG, GIF & PDF están permitidos.';
    print_r($_FILES);
    $uploadOk = 0;
  }
  // Limitar tamaño de fichero
  if ($_FILES["archivoSubir"]["size"] > 5000000) {
    echo 'El archivo que intentas subir es demasiado grande.';
    $uploadOk = 0;
  }
  // Comprobamos si el archivo ya existe
  if (file_exists($target_file)) {
    echo 'El archivo ya existe.';
    $uploadOk = 0;
  }

  // Comprobar si ha habido un error en la subida
  if ($uploadOk == 0) {
    echo 'El archivo no se ha podido subir.';
  // Si todo está bien, subimos el archivo
  } else {
    if (move_uploaded_file($_FILES["archivoSubir"]["tmp_name"], $target_file)) {
      echo 'El archivo '. htmlspecialchars( basename( $_FILES["archivoSubir"]["name"])). ' ha sido subido.';
      header( "refresh:2;url=index.php" );
    } else {
      echo 'Ha habido un error al subir el archivo.';
    }
  }
?>

【问题讨论】:

  • 抱歉,您不检查扩展名吗? ...因此,在这种情况下,扩展名将是 $tipoFichero != "pdf") 而不是 application/pdf. 当您尝试上传 pdf 时会发生什么。 $tipoFichero 甚至返回?调试 101 :)
  • 你是对的。但即便如此,文件也不会上传到服务器。它说文件无法上传(echo 'Ha habido un error al subir el archivo.'),当我执行 print_r ($files) 错误[0] 时出现,但又一次,错误 [0] 并不意味着一切都好吗?
  • 上传后的 html 看起来如何。您是否在输入中使用了accept 属性?
  • 我从没听说过accept属性,让我快速查一下

标签: php file


【解决方案1】:
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["archivoSubir"]["name"]);
$uploadOk = 1;
$tipoFichero = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
if(isset($_POST["submit"])) {
  $uploadOk = 1;
}else {
  $uploadOk = 0;
 }
   
// Limitar formato de archivos
 if($tipoFichero != "jpg" && $tipoFichero != "png" && $tipoFichero != "jpeg"
&& $tipoFichero != "gif" && $tipoFichero != "application/pdf" && $tipoFichero != "pdf") {
echo 'Lo siento, solo archivos JPG, JPEG, PNG, GIF & PDF están permitidos.';
print_r($_FILES);
$uploadOk = 0;
} 

// Limitar tamaño de fichero
 if ($_FILES["archivoSubir"]["size"] > 5000000) {
  echo 'El archivo que intentas subir es demasiado grande.';
  $uploadOk = 0;
 }
// Comprobamos si el archivo ya existe
if (file_exists($target_file)) {
  echo 'El archivo ya existe.';
  $uploadOk = 0;
 }

// Comprobar si ha habido un error en la subida
 if ($uploadOk == 0) {
  echo 'El archivo no se ha podido subir.';
  // Si todo está bien, subimos el archivo
  } else {
    if (move_uploaded_file($_FILES["archivoSubir"]["tmp_name"], $target_file)) {
     echo 'El archivo '. htmlspecialchars( basename( $_FILES["archivoSubir"]["name"])). ' ha sido subido.';
     header( "refresh:2;url=test.php" );
   } else {
    echo 'Ha habido un error al subir el archivo.';
   }
 }


your html code should be..

   <form action="test.php" method="post" enctype="multipart/form-data">
   Select image to upload:
    <input type="file" name="archivoSubir" id="archivoSubir">
    <input type="submit" value="Upload Image" name="submit">
   </form> 

您还需要在上传 pdf 时删除图像验证 即

 remove $check = getimagesize($_FILES["archivoSubir"]["tmp_name"]);

i.e
   // Comprobar si el archivo actual es una imagen o no
    if(isset($_POST["submit"])) {      
      $uploadOk = 1;        
    } else {
      $uploadOk = 0;
     }

您需要检查/添加 $tipoFichero != "pdf" 即

   // Limitar formato de archivos
     if($tipoFichero != "jpg" && $tipoFichero != "png" && $tipoFichero != "jpeg" && $tipoFichero != "gif" && $tipoFichero != "application/pdf" && $tipoFichero != "pdf") 
      {
       echo 'Lo siento, solo archivos JPG, JPEG, PNG, GIF & PDF están permitidos.';
       print_r($_FILES);
       $uploadOk = 0;
      }

【讨论】:

    猜你喜欢
    • 2021-07-16
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 2011-07-20
    • 2015-02-15
    相关资源
    最近更新 更多