我浏览了之前的许多主题,但是我找到了不止一些很好的答案,我无法找到解决我特定问题的方法。并不是说它在任何方面都是独一无二的,我只是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>";
}
?>
答案 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及以下版本不支持多文件上传)