【问题标题】:How to upload only pdf files in PHP如何在 PHP 中只上传 pdf 文件
【发布时间】:2018-07-07 14:27:18
【问题描述】:

我知道这一定是一个重复的问题,但我在这里有不同的要求。我想要的是当用户单击“上传”按钮时,出现的对话框只允许用户上传 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";
}
?>

请提出一个实现它的方法!

【问题讨论】:

  • 那么,你在这里使用的有什么问题?
  • 没什么错@Fred-ii-,只是要求只上传pdf文件,我只希望用户允许上传pdf。 :)
  • 据我所见,您的代码看起来像是已检出。我认为您可以上传 PDF 以外的文件?
  • 看到这个答案stackoverflow.com/a/7322742

标签: php file-upload


【解决方案1】:

您想要的是 HTML5,它有一个用于&lt;input type="file" ... &gt; HTML 代码中的对话框的文件类型选择器。

请看MDN documentation

例子:

<input type="file" name="pdf" id="pdf" accept="application/pdf" >

来自https://stackoverflow.com/a/7575533/3536236 请注意,由于这个答案的年代久远,他们声明“这未被广泛接受” 但事实并非如此,input accept 现在已被广泛接受在 HTML5 标记中。

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

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

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

【讨论】:

  • 谢谢马丁,帮助了 :)
【解决方案2】:
$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");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 2021-08-03
    • 1970-01-01
    • 2013-07-18
    • 2014-04-19
    • 2014-08-22
    • 2016-08-23
    相关资源
    最近更新 更多