如何在PHP中仅上传pdf文件

Abh*_*kur 2 php file-upload

我知道这一定是一个重复的问题但我在这里有不同的要求.我想要的是当用户点击上传按钮时,出现的对话框只允许用户上传PDF文件类型,而不是其他内容.

到目前为止我看到的是,一旦用户上传文件,就会对文件类型进行检查.我不想让用户上传pdf以外的文件.

<?php
$allowedExts = array("pdf");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if (($_FILES["file"]["type"] == "application/pdf") && ($_FILES["file"]["size"] < 200000) && in_array($extension, $allowedExts))
{
   if ($_FILES["file"]["error"] > 0)
   {
      echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
   }
   else
   {
      echo "Upload: " . $_FILES["file"]["name"] . "<br>";
      echo "Type: " . $_FILES["file"]["type"] . "<br>";
      echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
      echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";

      if (file_exists("doc_libraray/" . $_FILES["file"]["name"]))
      {
         echo $_FILES["file"]["name"] . " already exists. ";
         header('Location: '.site_url());
      }
      else
      {
          move_uploaded_file($_FILES["file"]["tmp_name"],
      "doc_libraray/" . $_FILES["file"]["name"]);
          echo "Stored in: " . "doc_libraray/" . $_FILES["file"]["name"];
          header('Location: '.$newURL);
      }
    }
}
else
{
    echo "Invalid file";
}
?>
Run Code Online (Sandbox Code Playgroud)

请建议一种方法来实现它!

Viv*_*ngh 6

$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $_FILES['file']['TMP_NAME']);
switch ($mime) {

   case 'application/pdf':

   default:
       die("Unknown/not permitted file type");
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*tin 6

你想要的是HTML5,它有一个文件类型选择器用于<input type="file" ... >HTML代码中的对话框.

请参阅MDN文档.

例:

<input type="file" name="pdf" id="pdf" accept="application/pdf" >
Run Code Online (Sandbox Code Playgroud)

来自/sf/answers/530287341/请注意,由于这个答案的年龄,他们声明"这并未被广泛接受",但事实并非如此,input accept现在HTML5标记中已被广泛接受.

这不是PHP问题,因为PHP只能在文件上传后才能播放.PHP也应该在上传后检查文件类型,因为HTML接受可以被欺骗.

为了进一步说明 - PHP 无法在上传之前检查要上载的文件,因为PHP仅在服务器端工作.因此,我建议使用HTML5标记仅选择(看起来像)PDF文件,然后一旦上传您的PHP脚本就可以检查文件类型的有效性,然后处理结果.

PHP在上传之前没有选择文件,完全取决于最终用户浏览器和HTML.