Загрузка нескольких файлов

Загрузку нескольких файлов можно реализовать используя, например, различные значения name для тега input.

Также можно одновременно загружать несколько файлов и автоматически получить их в виде массива. Для реализации такой возможности используйте тот же синтаксис массива в HTML-форме, что и для множественных полей select и checkbox:

Пример #1 Загрузка нескольких файлов

<form action="file-upload.php" method="post" enctype="multipart/form-data">
  Файлы:<br />
  <input name="userfile[]" type="file" /><br />
  <input name="userfile[]" type="file" /><br />
  <input type="submit" value="Отправить" />
</form>

В случае, если такая форма была отправлена, массивы $_FILES['userfile'], $_FILES['userfile']['name'], и $_FILES['userfile']['size'] будут инициализированы.

Например, предположим, что были загружены файлы /home/test/review.html и /home/test/xwp.out. В таком случае переменная $_FILES['userfile']['name'][0] будет установлена значением review.html, а переменная $_FILES['userfile']['name'][1] - значением xwp.out. Аналогично, переменная $_FILES['userfile']['size'][0] будет содержать размер файла review.html и так далее.

Переменные $_FILES['userfile']['name'][0], $_FILES['userfile']['tmp_name'][0], $_FILES['userfile']['size'][0] и $_FILES['userfile']['type'][0] также будут инициализированы.

Внимание

Конфигурационная директива max_file_uploads регулирует лимит одновременно загружаемых файлов в течение одного запроса. Вам необходимо будет убедиться, что ваша форма не пытается загрузить файлов больше этого лимита за один запрос.

Пример #2 Загрузка всего каталога

В полях загрузки HTML-файла можно загрузить весь каталог с помощью атрибута webkitdirectory. Он поддерживается большинством современных браузеров.

С помощью информации full_path можно сохранить относительные пути или восстановить тот же каталог на сервере.

<form action="file-upload.php" method="post" enctype="multipart/form-data">
  Загрузка каталога:<br />
  <input name="userfile[]" type="file" webkitdirectory multiple />
  <input type="submit" value="Загрузить файлы" />
</form>
Внимание

Атрибут webkitdirectory нестандартен и не входит в стандартную поставку. Не используйте его на рабочих сайтах: он работает не у всех пользователей. Между реализациями также может быть большая несовместимость, также поведение может измениться в будущем.

PHP анализирует только информацию об относительном пути, отправленную браузером/пользовательским агентом и передаёт эту информацию в массив $_FILES. Нет никакой гарантии, что значения в массиве full_path содержат реальную структуру каталогов и приложение PHP не должно доверять этой информации.