Как загрузить несколько файлов один за другим

Мне нужно загрузить много изображений одновременно (например, 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

Другие вопросы по тегам