$ _FILES未收到提交的文件

时间:2016-02-29 23:45:20

标签: php file-upload

我正在尝试一个表单,其中人们可以提交要上载的文件,然后链接到mySQL数据库。

在html / php文件中:

<form enctype=”multipart/form-data” action="process_file.php"  method="post" >
               <!-- First/Last Name input boxes -->
               <p>
                  <label for="fileUpload" id="fileUploadLabel">Proposal File (5MB Maximum):</label>
                  <input type="file" name="fileUpload[]" id="fileUpload" />
               </p>
               <input type="submit" name="submit" id="submit" />
            </form>

process_file.php文件:

<?php
     require("../../include/utility.php");
     if($_SERVER["REQUEST_METHOD"]=="POST") {
        print_r($_FILES);
              $dbconn = connectToDB();
              // Get and clean the data.
              $fname = cleanInput($_POST["fname"]);
              $lname = cleanInput($_POST["lname"]);
              $new_filename = str_replace(' ','', basename($_FILES['fileupload']['name']));
              $imageFileType = pathinfo($_FILES['fileUpload']['name'],PATHINFO_EXTENSION);

              printf("File name: $new_filename <br />\n");

              $target_dir = "../proposals/2016";
              $target_file = $target_dir . $lname . "_" . $fname . "_proposal" . $imageFileType;
              printf("File Type is: $imageFileType <br />\n");
     }
     /* [REDACTED] */
 ?>

print_r($ files)总是给我&#34; array()&#34;。我周末在网上环顾四周,今天相当多一点无济于事。

我已检查过enctype,我检查了拼写,是否已经检查,添加/删除&#34; []&#34;以及我能想到的任何其他事情。

我知道它适用于服务器的设置,因为同一服务器上的其他人已经能够使用它。

有没有人知道为什么这不起作用? (我可以提供更多[删除]部分,但由于$ _FILES为空,因此代码无法正常工作。

1 个答案:

答案 0 :(得分:0)

完成代码:

”multipart/form-data” - 那些卷曲的引号会扼杀你的剧本。

那些应该是常规"引号:

"multipart/form-data"

然后您的文件输入保留了此名称属性name="fileUpload[]",您还在使用$_FILES['fileupload'],其中数组是完全小写的。

数组是区分大小写的,应该读作$_FILES['fileUpload']

我也注意到,如果2016是一个文件夹,则此$target_file = $target_dir . $lname会转换为2016FILE.xxx,而非可能的2016/FILE.xxx

因此,如果是这种情况,那么您需要向其添加一个尾部斜杠proposals/2016/

  • 确保所有文件夹都具有相应的写入权限。

error reporting添加到文件的顶部,这有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Then the rest of your code

旁注:只应在暂存时进行显示错误,而不是生产。