array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'ru', ), 'this' => array ( 0 => 'features.file-upload.multiple.php', 1 => 'Загрузка нескольких файлов', ), 'up' => array ( 0 => 'features.file-upload.php', 1 => 'Загрузка файлов на сервер', ), 'prev' => array ( 0 => 'features.file-upload.common-pitfalls.php', 1 => 'Наиболее распространённые ошибки', ), 'next' => array ( 0 => 'features.file-upload.put-method.php', 1 => 'Поддержка метода PUT', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'ru', 'path' => 'features/file-upload.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
Загрузку нескольких файлов можно реализовать используя, например,
различные значения 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 не должно доверять этой информации.