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