Сохранение файла, загруженного на сервер с помощью 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 могут быть следующие строки:

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

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

Функция сложения двух URL

Август 13, 2013 г.

Обычно задача возникает, когда мы исследуем скриптом html страничку, и нам нужно получить, используя её абсолютный адрес, адреса страниц на которые она ссылается. Для этого к текущему абсолютному адресу страницы, надо "добавлять" адреса других страниц. ...

Читать

Вариант filemtime для работы с URL

Январь 1, 2018 г.

Может пригодиться, к примеру, для задач кеширования. Мы запросим с сервера только заголовки файла и извлечем из них значение last-modified. Почти готовый вариант я нашел в сети, чуть-чуть изменил для своих задач. Принцип описан ваше. На входе ...

Читать

 

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

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



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