Сохранение файла, загруженного на сервер с помощью PHP

Эта статья о некоторых задачах, возникающих при сохранении файла на сервере, при получении его от пользователя через форму (<input type=»file» />).

Определимся с требованиями. Технически, решение нужно в виде функции, которая принимает набор параметров:

  1. Данные о загруженном файле;
  2. Место, где файл должен быть сохранен (директория);
  3. Флаг — можно ли перезаписать файл, если он уже существует в указанном месте;
  4. Путь к прежней версии загружаемого файла, чтобы удалить её.

Выглядит просто, но, возможно, вы обратили внимание на функцию get_canonical_path, которая в PHP отсутствует. Её можно заменить на realpath в некоторых случаях, но чаще всего в реальных приложениях с такой заменой uploadFile работать не будет.

Область применения realpath ограничивается не только существующими файлами, но и не допустимостью использования symbolic links. На практике же, «тяжелые» папки с юзер файлами обычно монтируют на отдельные носители.

Функция вернет путь к файлу (относительно $_SERVER[‘DOCUMENT_ROOT’]) или false, если сохранить файл не удалось.

Задачи, которые решает uploadFile

  1. Использует канонизацию путей, и таким образом решает проблемы с использованием не канонических путей;
  2. Создаёт папки (подпапки), если требуется;
  3. Способно найти не занятое имя файла, чтобы не повредить уже сохраненные файлы;
  4. Удалит старую версию файла, чтобы не накапливать мусор (но вам нужно предоставить название этого файла).

В функции есть набросок проверки файла по типу:

Если вам нужен более сложный функционал проверки — всё в ваших руках.

Пример вызова функции

Пусть на фронт-енд у нас есть форма:

Тогда в указанном /form.php могут быть следующие строки:

Написать комментарий

Мало букафф? Читайте есчо !

Переводим строку в число с плавающей запятой в PHP

Май 7, 2018 г.

Скаляры для PHP все на одно лицо. Строки или числа, с плавающей запятой или без. PHP не заморачивается. Ему не нужны строгие рамки типов скаляра. Платить за эту вольность приходится довольно скоро. Начнем с того, что PHP знает два оператора сложения, ...

Читать

Получение превью (картинки) для видео vimeo

Август 23, 2019 г.

Рассмотрим как получить thumbnail для видео vimeo, если у вас есть только url видоса. Vimeo позволяет извлечь мета информацию о видео, используя video id. Потому мы сначала выделим id, а потом выполним запрос к API Vimeo за дополнительной информацией, ...

Читать

 

Комментарии к «Сохранение файла, загруженного на сервер с помощью PHP»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: