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

Декабрь 12, 2013 г.

Из разряда "на заметку программисту". Есть такие вещи, о которых знаешь что они есть, но забываешь конкретную реализацию, когда доходит до использования. Именно так обстоит дело с тем, что описано в заголовке. Т.е. у нас есть переменная, где хранится ...

Читать

Удаление элементов из массива в PHP

Ноябрь 11, 2015 г.

Массивы в PHP - один из мощнейших инструментов программиста. Когда я начинал изучать PHP, у меня был определенный багаж знаний работы с массивами в других языках программирования, таких как C++, Delphi и Fortrain. Везде требовалось объявить массив, указать ...

Читать

Читаем курсы валют, реализация для drupal

Декабрь 5, 2012 г.

Как я писал ранее, хороший информ-сервис, это не куча вариантов виджетов для вашего сайта, а, в наиболее ценном случае, возможность грузить данные информ-сервиса в виде xml. В развитом случае, это целый API для разработчика, с возможностью выборки данных ...

Читать

Определение версии браузера - PHP или javascript?

Май 17, 2011 г.

Хорошо если ваш сайт работает во всех, или почти во всех браузерах так, как вы того хотите. Все меняется, выходят новые версии, появляются новые возможности, и глупо их не использовать, в угоду "старичкам". Года 1,5 назад IE 6.0 (судя по статистике посещений ...

Читать
 

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

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



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