Загрузка файлов

Задание:  

         Загрузить файл на сервер через форму

 

 

Подробная инструкция:

 

  • Для того, чтобы отправить файл через форму, нам к её атрибутам необходимо добавить ещё один - 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. Не стесняйтесь гуглить и читать документацию, там кроется много полезного и интересного :)

 

Расскажите всем
Поделиться
Отправить