Множественная загрузка файлов
Задание:
Загрузить файл на сервер через форму
Подробная инструкция:
- Для того, чтобы отправить файл через форму, нам к её атрибутам необходимо добавить ещё один -
enctype="multipart/form-data"
, который позволяет нам получить доступ к суперглобальному массиву$_FILES
- В обработчике получаем из массива
$_FILES
данные о нужном файле, для удобства можно записать их в переменную - Генерируем новое уникальное имя с помощью строковых функций (например,
uniqid()
), чтобы файлы с одинаковыми именами друг друга не перезаписывали - Сперва файл с формы загружается во временное хранилище на сервере. Следовательно следующим шагом нужно переместить файл оттуда в рабочую папку при помощи функции
move_uploaded_file()
ПОЯСНЕНИЯ И ПОЛЕЗНАЯ ИНФОРМАЦИЯ
- Очень часто для генерации нового имени файлу новички используют функции
md5()
илиmt_rand()
, однако эти методы не гарантируют уникальности полученной строки.md5()
шифрует символы определённым образом, и две одинаковые строки будут соответственно одинаково зашифрованы, чего мы наоборот хотим избежать.mt_rand()
же лишь генерирует случайное число, что тоже не застраховывает от возможных повторов. Соответственно, для нашей цели эти функции не подходят. А вотuniqid()
- вполне рабочий вариант, так как, соответственно своему названию, она генерирует уникальный идентификатор, который точно не будет повторяться.
- Чтобы узнать, был ли отправлен файл через форму, можно проверить ключи вложенного в
$_FILES
массива на пустоту с помощью функцииempty()
. К сожалению, проверить, существует ли такой массив (через isset()
) не выйдет, так как при установленном атрибутеenctype="multipart/form-data"
он доступен и существует всегда, просто с пустыми ключами характеристик файла, если сам файл в форму не загружали.
- В суперглобальном массиве
$_FILES
содержится вся информация о загруженном файле - от его имени до размера в байтах. Эту информацию можно использовать в дальнейшем, например, для валидационных проверок.
- Подробную информацию с примерами обо всех приведённых в уроке функциях можно почитать в мануале
PHP.net
. Не стесняйтесь гуглить и читать документацию, там кроется много полезного и интересного :)
Расскажите всем
Поделиться
Поделиться
Отправить