使用php脚本上传多个文件

时间:2016-06-08 12:33:36

标签: php upload

我一直在修改这个PHP脚本,但它不会工作,它总是失败。它设法创建了文件夹,但是无法将文件从临时文件夹移动到右边的文件夹,函数move_uploaded_file总是返回false。这是代码:

<?php
include 'connection.php';
include '../empty.html'; 
session_start();

if(isset($_FILES['filearray'])){
    $name_array = $_FILES['filearray']['name'];
    $tmp_name_array = $_FILES['filearray']['tmp_name'];
    $type_array = $_FILES['filearray']['type'];
    $size_array = $_FILES['filearray']['size'];
    $error_array = $_FILES['filearray']['error'];

    $titlealbum=$_POST['titoloalbum']; 
    $username=$_SESSION['username']; 
    $path="../users/".$username."/".$titlealbum."/"; 
    echo $path;
    mkdir($path,0777);    

    $total=count($tmp_name_array);
    for($i=0; $i<$total; $i++){
        $rightpath=$path.$name_array[$i];
        if(move_uploaded_file($tmp_name_array[$i], $rightpath)){
                echo $name_array[$i]." upload is complete<br>";
                echo "upload completato"; 
        } else {
            echo "move_uploaded_file function failed for ".$name_array[$i]." into".$path."<br>";
        }
    }
}
else
echo "Files not found";
?>

这是html表单:

  <form id="albumform" style="display:none"  enctype="multipart/form-data" action="scripts/albumupload.php" multiple="multiple"  method="POST">
      <input type="hidden" name="MAX_FILE_SIZE" value="30000000">
      Name: <input name="titoloalbum" type="text" required><br><br>
      Cover: <input name="userfile" type="file">
     <br><br>Select your songs:<br />
     <input name="filearray[]" type="file" value="10000000" /><br />
     <input name="filearray[]" type="file" value="10000000"/><br />
     <input name="filearray[]" type="file" value="10000000"/><br />
     <input name="filearray[]" type="file" value="10000000"/><br />
     <input type="submit" value="Send files" />
    </form>

我知道这种形式有点糟糕,但我不喜欢带有信号的多重选择&#34;输入&#34;。谢谢你的建议

2 个答案:

答案 0 :(得分:0)

您的代码中有错误:

$total=count($tmp_name_array);

将此更改为

$total=count($name_array);

你正在使用带有错误变量的计数功能 ble。

同时从表单中删除具有相同名称的文件类型。要么将它们命名为不同。

<input name="filearray[]" type="file" value="10000000"/><br />

答案 1 :(得分:0)

您可以使用以下注释算法进行多文件上传:

<强> PHP

    <?php
        // FILENAME: albumupload.php
        include 'connection.php';
        include '../empty.html';
        session_start();


        $filesArray     = isset( $_FILES['filesArray'] ) ? $_FILES['filesArray']        : null;
        $titleAlbum     = isset($_POST['titoloalbum'])   ? isset($_POST['titoloalbum']) : null;
        $arrFilesData   = array();

        if( $filesArray && !empty($filesArray) ){
            $arrFilesKeys       = array_keys($filesArray['name']);
            $arrFilesNames      = $filesArray['name'];
            $arrFilesTypes      = $filesArray['type'];
            $arrFilesTmpNames   = $filesArray['tmp_name'];
            $arrFilesErrors     = $filesArray['error'];
            $arrFilesSizes      = $filesArray['size'];

            foreach($arrFilesKeys as $intKey=>$strKeyName){
                $tempFileData               = new stdClass();
                $tempFileData->key          = $strKeyName;
                $tempFileData->name         = $arrFilesNames[$strKeyName];
                $tempFileData->type         = $arrFilesTypes[$strKeyName];
                $tempFileData->tmp_name     = $arrFilesTmpNames[$strKeyName];
                $tempFileData->error        = $arrFilesErrors[$strKeyName];
                $tempFileData->error        = $arrFilesSizes[$strKeyName];
                $arrFilesData[$strKeyName]  = $tempFileData;
            }

            // UPLOAD THE FILES:
            if($titleAlbum){
                $username   = trim($_SESSION['username']);
                $path       =  __DIR__ . "/../users/" . $username . "/" . $titleAlbum;

                //CREATE UPLOAD DIRECTORY IF IT DOESN'T ALREADY EXIST...
                if(!file_exists($path)){
                    mkdir($path,    0777, TRUE);
                }

                // LOOP THROUGH THE FILES OBJECT ARRAY AND PERFORM FILE-UPLOAD
                foreach($arrFilesData as $fileKey=>$objFileData){
                    $rightPath      = $path . DIRECTORY_SEPARATOR . $objFileData->name;
                    if(move_uploaded_file($objFileData->tmp_name, $rightPath)){
                        echo $objFileData->name . " upload is complete<br>";
                        echo "upload completato";
                    } else {
                        echo "move_uploaded_file function failed for ". $objFileData->name ." into". $path . "<br>";
                    }

                }
            }

        }

在这种情况下,您的HTML表单应如下所示:

<强> HTML

        <form id="albumform" style=""  enctype="multipart/form-data" action="scripts/albumupload.php" method="POST">
            <input type="hidden" name="MAX_FILE_SIZE" value="30000000">
            Name: <input    name = "titoloalbum" type="text" required><br><br>
            Cover: <input   name = "filesArray[userfile]" type="file">
            <br><br>Select your songs:<br />
            <input name="filesArray[file_1]" type="file" value="" /><br />
            <input name="filesArray[file_2]" type="file" value=""/><br />
            <input name="filesArray[file_3]" type="file" value=""/><br />
            <input name="filesArray[file_4]" type="file" value=""/><br />
            <input type="submit" value="Send files" />
        </form>