2016-06-08 101 views
0

我一直在修改这个php脚本,但它不会工作,它总是失败。它设法创建文件夹,但无法将文件从临时文件夹移动到正确的文件夹,函数move_uploaded_file始终返回false。这是代码:用php脚本上传多个文件

<?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> 

我知道,这种形式有点太烂了,但我不喜欢一个劲儿地“输入”的多重选择。谢谢咨询

+0

echo'$ tmp_name_array [$ i]'并检查它返回的结果 – Saty

+0

在每次迭代中回声并检查'$ tmp_name_array [$ i]'和'$ rightpath'的值。 –

+0

'tmp_name array result: rightpath result:../users/test2/TEST/test.mp3'。正如你所看到的,tmp array_name是空的。 – frankj

回答

0

你在你的代码有错误:

$total=count($tmp_name_array); 

改变这

$total=count($name_array); 

您使用计数功能与错误的杂物 BLE。

也从窗体中删除这么多具有​​相同名称的文件类型。要么命名他们不同。

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

它仍然不起作用。这是结果: tmp_name数组结果: 右路径结果:../users/test2/Test2/test.mp3 错误数组:1我不明白为什么tmp_name_array是空的 – frankj

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>