特定文件类型的PHP上载;无效的文件类型";?

特定文件类型的PHP上载;无效的文件类型";?,php,file-upload,Php,File Upload,因此,我尝试向联系人页面添加一个上传功能,该功能只允许某些文件类型。文件应存储在根目录中的“上载”文件夹中。然而,这些文件没有被上传,我在PDF和docx文件上收到了一个“无效文件”错误(按编程),但我不知道为什么。有人能提供一些见解吗 <?php if($_POST) { if($_POST["token"]==true){ $allowedExts = array("pdf","docx", "doc"); $temp = exp

因此,我尝试向联系人页面添加一个上传功能,该功能只允许某些文件类型。文件应存储在根目录中的“上载”文件夹中。然而,这些文件没有被上传,我在PDF和docx文件上收到了一个“无效文件”错误(按编程),但我不知道为什么。有人能提供一些见解吗

<?php

    if($_POST) {

      if($_POST["token"]==true){
        $allowedExts = array("pdf","docx", "doc");
        $temp = explode(".", $_FILES["file"]["name"]);
        $extension = end($temp);
        if ((($_FILES["file"]["type"] == "application/pdf")
        || ($_FILES["file"]["type"] == "application/docx")
        || ($_FILES["file"]["type"] == "application/doc"))
        && ($_FILES["file"]["size"] < 20000)
        && 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"] / 6144) . " kB<br>";
            echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";

            if (file_exists("upload/" . $_FILES["file"]["name"]))
              {
              echo $_FILES["file"]["name"] . " already exists. ";
              }
            else
              {
              move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . rand().$extension);
              echo "Stored in: " . "upload/" . "rand().$extension)";
              }
            }
          }
        else
          {
          echo "Invalid file";
          }
?>


docx文件的文件类型不是
application/docx
,而是
application/vnd.openxmlformats of icedocument.wordprocessingml.document
,不过您也可以将其视为
application/zip
;文档文件的mime类型是
application/msword

,而不是
应用程序/doc

是否应该
docx
在允许的扩展数组中?目前还没有。您是否已尝试调试此文件以确定从何处获取不期望的值?以及
echo$\u FILES[“file”][“type”]
以确保它是您认为的值。现在,这些大括号不匹配。这显然不是错误的来源,但它让我感到困扰,它是如何编译的?很好的捕获,我已经调整了,在这之上,
docx
甚至不在
$allowedExts
数组中。@kba-也是;许多图像格式都在允许的扩展列表中,但是没有对它们的类型进行测试