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

时间:2013-12-15 09:03:24

标签: php html forms upload

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

我为我正在做的网站制作了HTML表单,这是一种工作申请表。客户要求上传三张图片。我为它搜索了一个表单和一个PHP代码,但设法只使用我选择的代码上传了1个文件。

如何上传多个文件?

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>";
    }
    ?>

2 个答案:

答案 0 :(得分:1)

首先,如果您要上传多个文件,请在表单中输入名称:

<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

答案 1 :(得分:0)

如果您使用的是HTML5,那么这可以提供帮助

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

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