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

Ноябрь 11, 2015 г.

Досрочно закончить исполнение цикла в PHP можно разными способами. Хотя конструкций циклов в PHP много, но принципы одинаковые. Для примера будем использовать цикл for. [crayon-68c8f029b4e60635897793/] Цикл досрочно завершится с помощью оператора break ...

Читать

PHP загрузка файлов через форму

Апрель 30, 2018 г.

Получение данных из формы на PHP - одна из типовых задач. И если большинство полей не вызывает каких то сложностей с обработкой на входе, то поле для загрузки файлов - может оказаться крепким орешком для начинающего разработчика. Все проблемы возникают ...

Читать

Как использовать callback функции внутри класса

Июнь 5, 2017 г.

Пробовали ли вы использовать функции PHP, требующие указания кол-бек функции в качестве аргумента? Я часто пользуюсь preg_replace_callback(). Если функция вызывается внутри класса, то хотелось бы и callback разместить внутри этого же класса (объекта). ...

Читать

urlencode vs rawurlencode: разница и примеры в PHP

Июль 3, 2025 г.

Если вам нужно передать данные в URL в PHP, вы наверняка сталкивались с функцией urlencode(). А может быть, слышали и о rawurlencode(). И ещё третья функция — http_build_query() — всплывает в ответах на форумах и в рекомендациях официальной документации. ...

Читать
 

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

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



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