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

Набор файлов загружают через разные значения атрибута name в input-элементах формы.

Возможно также загружать набор файлов одновременно и автоматически получать файлы в виде массива. Для этого в HTML-форме пользуются тем же синтаксисом отправки массива, что и для отправки списка значений через 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>

При отправке приведённой формы PHP инициализирует массивы $_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 и так далее.

PHP также инициализирует переменные $_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-приложение не должно доверять этой информации.