PHP基于多个变量ID上传单个文件

时间:2014-09-24 13:14:19

标签: php arrays file loops upload

我正在尝试允许我的系统上传单个文件,具体取决于从列表中选择的多个作业。

系统将主要选择作业,允许用户上传与所有这些作业相关的文件,这些文件存储在具有唯一ID的数据库中。

到目前为止,似乎只上传了数组中第一个id的文件。如何多次上传文件,使用文件名中的每个作业ID分别定义每个文件?

这是迄今为止的循环:

if ($_FILES["file"]["type"] != "") {

                    $count++;
                    $uploadComplete = 0;

                    $newFileName = date("YmdHis");
                    $newFileName = $newFileName . "-TEST".$multiId[$i]."-";
                    $newFileName2 = $newFileName . "-";

                    $newFileName2 = $_FILES["file"]["name"];
                    $newFileName2 = str_replace(" ", "-", $newFileName2);


                    $ext = strrchr($_FILES["file"]["name"], ".");

                    if (($ext == ".png")
                    || ($ext == ".jpeg")
                    || ($ext == ".pjpeg")
                    || ($ext == ".jpg")
                    || ($ext == ".PNG")
                    || ($ext == ".JPEG")
                    || ($ext == ".PJPEG")
                    || ($ext == ".JPG")) {
                        $fileType = "image";    
                    }

                    if (($ext == ".pdf")
                    || ($ext == ".doc")
                    || ($ext == ".docx")
                    || ($ext == ".zip")
                    || ($ext == ".PDF")
                    || ($ext == ".DOC")
                    || ($ext == ".DOCX")
                    || ($ext == ".ZIP")) {
                        $fileType = "file";
                    }



                    if (($ext == ".png")
                    || ($ext == ".jpeg")
                    || ($ext == ".pjpeg")
                    || ($ext == ".jpg")
                    || ($ext == ".pdf")
                    || ($ext == ".doc")
                    || ($ext == ".docx")
                    || ($ext == ".zip")
                    || ($ext == ".PNG")
                    || ($ext == ".JPEG")
                    || ($ext == ".PJPEG")
                    || ($ext == ".JPG")
                    || ($ext == ".PDF")
                    || ($ext == ".DOC")
                    || ($ext == ".DOCX")
                    || ($ext == ".ZIP")
                    && ($_FILES["file"]["size"] < 10000000)){

                      if ($_FILES["file"]["error"] > 0) {

                            echo "Return Code: " . $_FILES["file"]["error"] . "<br />";

                       } else {


                        if (file_exists("../../uploads/logdocs/".$newFileName . $_FILES["file"]["name"])) {

                            //nothing

                        } else {

                            move_uploaded_file($_FILES["file"]["tmp_name"],"../../uploads/logdocs/" .$newFileName . $newFileName2);

                            $fileLocation =  "/uploads/logdocs/" .$newFileName . $newFileName2;

                            if (empty($fileLocation)) {
                                $uploadComplete = 0;
                            } else {  
                                $uploadComplete = 1;
                            }
                         }
                      }
                    }
                } else {

                    $uploadComplete = 1;
                }

                if ($uploadComplete == 1) {

                    mysql_query("UPDATE system_modificationsLogs 
                        SET 
                        modificationLogUpload = '$fileLocation'
                        WHERE modificationsLogId = '$modificationsLogId'");
                }

1 个答案:

答案 0 :(得分:0)

我假设你在循环中这样做。 在第一次迭代中,这行代码正确&#34;上传&#34;,或更准确地移动位于tmp位置的文件。

move_uploaded_file($_FILES["file"]["tmp_name"],"../../uploads/logdocs/" .$newFileName . $newFileName2);

在第二次及以后的迭代中,您将返回,并尝试移动相同的文件,但文件不再存在,因为您在第一次尝试中移动了它。

您可以使用copy而不是move_uploaded_file。

copy($_FILES["file"]["tmp_name"], "../../uploads/logdocs/" .$newFileName . $newFileName2);

这将复制文件并保留原始tmp文件以便以后复制。

在脚本执行结束时,tmp文件将被销毁。