多个文件上载控件只上载一个文件


Several file upload controls only upload one file

我浏览了许多以前的主题,但我确实找到了很多很棒的答案,但我找不到解决我特定问题的方法。这并不是说它在任何方面都是独一无二的,我只是PHP的新手,不知道该怎么办

我为我正在做的一个网站制作了一个HTML表格,有点像工作申请表。客户要求上传三张照片。我为它起草了一个表格和一个PHP代码,但使用我选择的代码只上传了一个文件。

如何上传多个文件?

HTML表单:

<div class="form-group">
    <label for="exampleInputFile">*Pictures</label>
      <input type="file" name ="filename" id="InputFile"/>
      <input type="file" name ="filename" id="InputFile"/>
      <input type="file" name ="filename" id="InputFile"/>
</div>  

和PHP:

 <?php

    $fileatt      = $_FILES['filename']['tmp_name'];
    $fileatt_type = $_FILES['filename']['type'];
    $fileatt_name = $_FILES['filename']['name'];

   $headers = 'From: ' . $_POST['job_email'];
    if (is_uploaded_file($fileatt)) {
     $file = fopen($fileatt,'rb');
     $data = fread($file,filesize($fileatt));
     fclose($file);
     $semi_rand = md5(time());
     $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
     $headers .= "'nMIME-Version: 1.0'n" .
     "Content-Type: multipart/mixed;'n" .
     " boundary='"{$mime_boundary}'"";

     $message = "This is a multi-part message in MIME format.'n'n" .
     "--{$mime_boundary}'n" .
     "Content-Type: text/plain; charset='"iso-8859-1'"'n" .
     "Content-Transfer-Encoding: 7bit'n'n" .
     $message . "'n'n";

     $data = chunk_split(base64_encode($data));

     $message .= "--{$mime_boundary}'n" .
     "Content-Type: {$fileatt_type};'n" .
     " name='"{$fileatt_name}'"'n" .
     "Content-Transfer-Encoding: base64'n'n" .
     $data . "'n'n" .
     "--{$mime_boundary}--'n";
    }
    $ok = @mail("xxxx@gmail.com", $subject , $message, $headers); 
    if ($ok) {
    echo "<p>Well done</p>";
    } else {
    echo "<p>Please try again</p>";
    }
    ?>

首先,如果您想上传多个文件,表单中的输入名称应该是这样的:

<input type="file" name ="filename[]" id="InputFile" />
<input type="file" name ="filename[]" id="InputFile" />
<input type="file" name ="filename[]" id="InputFile" />

或者一个输入,如@Undefined_variable所说,可以让你每次选择多个图像:

<input type="file" name ="filename[]" id="InputFile" multiple />

当我建议重新排列$_FILES[]时:

function rearray(&$file_post) {
     $file_ary = array();
     $file_count = count($file_post['name']);
     $file_keys = array_keys($file_post);
     for ($i=0; $i<$file_count; $i++) {
         foreach ($file_keys as $key) {
             $file_ary[$i][$key] = $file_post[$key][$i];
         }
     }
     return $file_ary;
 }
$files = rearray($_FILES['filename']);
 
foreach($files as $file){
$tmpname = $file["tmp_name"];/// use $file like $_FILES[..]["temp_name"] etc.
}

您应该阅读更多关于使用php上传多个文件的内容,并尝试找到解决方案。阅读更多:http://www.php.net/manual/en/features.file-upload.multiple.php

如果你使用HTML5,那么这可以帮助

<input type="file" name ="filename" id="InputFile" multiple />

它将在ie 10、mozilla、chrome中工作(ie 9及以下版本不支持多文件上传)