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

Январь 28, 2016 г.

Многие не задумываются при работе в PHP со стандартными функциями даты-времени о диапазоне их применимости (date(), time(), mktime() и т.п). Так мы можем скоро столкнуться с проблемой, подобная которой случалась уже раньше - "ошибка 2000". Я прекрасно ...

Читать

Формируем относительную ссылку

Март 2, 2017 г.

Посмотрим как можно сформировать url относительно текущего местоположения файла в php. К примеру, у в каталоге /site-script/ находится программа на PHP  и подкаталог /site-script/img, где хранятся картинки. Требуется построить относительный ...

Читать

Отправить PUT запрос через cUrl в PHP

Май 19, 2021 г.

Делюсь примером кода, который отправляет PUT запрос через CURL. Все работает точно также как для POST запроса, с небольшими отличиями в настройках: [crayon-6a822f8b00dd9238871415/] Надеюсь, этот пример сэкономит вам время :)

Читать

Поиск и замена терминов. Пример реализации.

Август 15, 2016 г.

Задача поиска и замены каких либо терминов в тексте кажется на первый взгляд довольно простой в PHP.  Есть очень мощные инструменты вроде str_replace, а также поиск и замена с помощью регулярных выражений, например, preg_replace и preg_replace_callback. ...

Читать
 

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

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



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