Как загрузить несколько файлов один за другим
Мне нужно загрузить много изображений одновременно (например, 200 маленьких изображений) через браузер. У меня есть этот код:
<?php
if(isset($_POST['Upload_files']) and $_SERVER['REQUEST_METHOD'] == "POST"){
echo count($_FILES['files']['name']); // Even if I upload more than 20 files, it still displays 20.
$target_directory = "upload/";
foreach ($_FILES['files']['name'] as $file_number => $file_name) {
$file = $_FILES["files"]["tmp_name"][$file_number];
if (mime_content_type($file) != 'image/png' && mime_content_type($file) != 'image/jpeg')
{ $error[] = 'File '.$file_name.' is not in JPG / PNG format!'; continue; }
else
{ if(move_uploaded_file($file, $target_directory.$file_name)) {$count_of_upload_file++;}}
}
}
// If files were uploaded
if($count_of_upload_file != 0){echo 'Your files ('.$count_of_upload_file.' ) were successfully uploaded.';}
// If there was an error
if (isset($error)) {foreach ($error as $display_error) {echo '- '.$display_error.'<br />';}}
?>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="files[]" multiple="multiple" accept="image/*">
<input type="submit" name="Upload_files" value="Upload files">
</form>
И это работает. Однако мой провайдер установилmax_file_uploads равным20 (и я не могу его изменить). (Расширение Uploadify работает для более чем 20 файлов, но мне бы хотелось иметь собственное небольшое решение.) Поэтому я предполагаю, что мне нужно добавить сюда что-то, что вместо 200 файлов одновременно загружает 200 файлов один за другим (или двадцать на двадцать). Но я не знаю, как это сделать. (Чтобы использовать AJAX? - я никогда не использовал его, поэтому я действительно не знаю.) Спасибо!
1 ответ
Если вы не хотите использовать ajax, вам нужен цикл для получения файлов
for($i = 0; $i < count($_FILES['files']['tmp_name']); $i++){
$tmp = $_FILES['files']['tmp_name'][$i];
$name = md5(microtime());
if(move_uploaded_file($tmp, "dir/$name.jpg")){
echo "Uploaded successfully";
}else{
echo "failed";
}
}
В вашей форме вы должны назвать все поля ввода в виде файлов [], например:
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="files[]" multiple="multiple" accept="image/*">
<input type="file" name="files[]" multiple="multiple" accept="image/*">
<input type="file" name="files[]" multiple="multiple" accept="image/*">
<input type="submit" name="Upload_files" value="Upload files">
</form>
Или, если вы хотите использовать ajax, вот пример: загрузка нескольких изображений с использованием AJAX, PHP и jQuery