Загрузка файлов на сервер PHP
PHP — один из самых популярных языков программирования для работы с серверными приложениями веб-сайтов и веб-сервисов. Он включает в себя все функции для загрузки, проверки и проверки файлов, загруженных со стороны клиента. Сценарий загрузки файла может быть выполнен менее чем за 5 минут.
Без особых усилий вы можете создать серверный скрипт, который, например, позволит пользователям загружать фотографии профиля на ваш сайт и складывать их в одну папку. Сам загрузчик относительно прост, но другие задачи, такие как быстрая доставка файлов на клиентскую машину через CDN или добавление водяного знака к загружаемым изображениям, потребуют более сложных решений.
В этой статье мы рассмотрим следующие два варианта и раскроем их плюсы и минусы:
- Загрузите файлы на свой собственный сервер и создайте скрипт загрузки PHP-сервера с нуля.
- Используйте такую службу, как Uploadcare через PHP, которая обрабатывает загрузку, хранение и доставку файлов через CDN (AWS).
Создайте загрузчик файлов PHP самостоятельно
Если вам нужно создать базовый загрузчик файлов, и вы не ожидаете, что тысячи файлов изображений заполнят хранилище вашего сервера от пользователей по всему миру, сделайте это самостоятельно. Кроме того, это решение подходит для очень специфических задач загрузки и закрытых систем (банки, оборонные и правительственные учреждения) со строгой политикой, которая не позволяет передавать файлы на аутсорсинг сторонним службам.
Плюсы:
- Полный контроль над процессом загрузки.
- Просто (или нет, в зависимости от ваших требований).
- Бесплатное решение (при условии, что затраты на разработку с вашей стороны бесплатны).
Минусы:
- Создание и настройка загрузчика PHP занимает много времени (проверка, обработка).
- Еще больше времени, чтобы сделать сервис, способный выдерживать высокие нагрузки и предотвращать ошибки.
- Более медленная доставка файлов, потому что CDN не задействован. Настройка загрузчика CDN-это еще одна задача, которая не будет рассмотрена в этой статье.
- Требуются дополнительные ресурсы для поддержки и обслуживания сценария в будущем.
- Не работает для мобильных приложений из коробки (нуждается в дальнейшем соединении с архитектурой вашего приложения).
- Проблемы безопасности—хакеры любят самодельные скрипты.
Настройка PHP
Убедитесь, что конфигурационный файл php.ini позволяет загружать файлы (он включен по умолчанию). Кроме того, вы можете установить некоторые ограничения, такие как максимальный размер загружаемого файла, количество файлов, загружаемых на каждый фрагмент, и т.д. Вот часть этого файла инициализации, которая связана с загрузкой файлов:
;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;; Whether to allow HTTP file uploads.
file_uploads = Onupload_tmp_dir = /Applications/MAMP/tmp/php
; Maximum allowed size for uploaded files.
upload_max_filesize = 2M; Maximum number of files that can be uploaded via a single request
max_file_uploads = 20
Как найти файл php.ini
Если вы не можете найти файл php.ini на своем компьютере, создайте сценарий со следующей командой:
<?php
phpinfo();
?>
А затем запустите его в своем веб-браузере. Он покажет вам путь к файлу инициализации, как на фото ниже:
Методы загрузки HTML — файлов
Как правило, в спецификации HTML есть два общих метода загрузки файлов: POST, который мы будем использовать в этой статье; и PUT, который в основном используется для замены существующих файлов определенным идентификатором ресурса и потенциально более опасен в использовании, поэтому мы его пропустим.
Существует два основных типа файлов, которые могут передаваться по почте — текстовые файлы и двоичные файлы. Файлы изображений (.jpg, .png, .gif и т. д.) Являются двоичными файлами, поэтому мы будем работать с этим типом. Кстати, в HTML этот тип кодировки описывается как составная часть/форма-данные.
Шаг 1: Создание HTML-формы
Во-первых, нам нужно позаботиться о клиентском коде в HTML и создать форму, которая позволит пользователям выбирать файлы для загрузки. Создайте папку проекта загрузки PHP в корневом каталоге вашего веб-сайта (например, public_html, htdocs или www), а затем создайте новый index.html файл там. Скопируйте и вставьте следующий код в только что созданный файл.
Он имеет простую форму с вводом выбора файла и кнопкой отправки:
<!DOCTYPE html>
<html>
<body><form action=»uploadHandling.php» method=»post» enctype=»multipart/form-data»>
Select image to upload:
<input type=»file» name=»fileToUpload» id=»fileToUpload»>
<input type=»submit» value=»Upload Image» name=»submit»>
</form></body>
</html>
Действие формы относится к сценарию, который будет заботиться о процессах загрузки на стороне сервера. Как мы уже упоминали ранее, способ доставки данных будет POST.
enctype имеет значение multipart/form-data, что означает, что вы используете формы, которые имеют элемент управления загрузкой файлов, и никакие символы не кодируются.
Шаг 2: Создание скрипта загрузки PHP-файла
Имя сценария сервера должно совпадать с именем, которое мы упомянули в HTML. Создайте папку с именем uploads в каталоге вашего проекта. Он будет хранить входящие файлы. Скопируйте и вставьте это uploadHandling.php скрипт в качестве серверного решения для загрузчика файлов/изображений.
Объект $_FILES содержит все средства доступа к файлу и его свойствам, таким как имя, размер и расширение файла.
- $_FILES[‘userfile’][‘name’] — исходное имя файла, загруженного клиентом.
- $_FILES[‘userfile’][‘type’] — тип MIME файла (например, “image/gif” для изображений), предоставляемый браузером.
- $_FILES[‘userfile’][‘size’] — размер файла в байтах.
- $_FILES[‘userfile’][‘tmp_name’] — имя, под которым вновь загруженный файл помещается на сервер до завершения всех проверок (например, если есть файл с тем же именем).
Мы включим необходимые базовые проверки типа файла (потому что в нашем случае это должна быть картинка) и размера файла (например, менее 2 МБ).
Не забывайте, что вы можете установить абсолютные максимумы для загрузки файлов в php.ini. Этот конкретный скрипт будет иметь свои собственные ограничения для этой задачи загрузки изображений.
Вам нужно будет создать свой собственный CSS для формы загрузки HTML, чтобы она выглядела красиво. Это не является недостатком, так как не влияет на функциональность, но, вероятно, потребуется некоторое время.
Последние мысли о загрузке с помощью вашего собственного PHP-скрипта
Этот сценарий — лишь верхушка айсберга. Существует множество других задач, связанных с процессом загрузки файлов, таких как распределение файлов по серверам для оптимальной доставки, обработка изображений (например, обрезка и другие эффекты) и т. д.
Приведенный выше код представляет собой четкую и слегка уточненную версию примера сценария, который вы можете найти с более подробным объяснением по адресу php.net, w3schools.com, и другие веб-сайты. Тот, что из этой статьи, был протестирован, и он готов к работе. Кроме того, он включает в себя основные проверки, потому что важно не испортить ваш сервер, делая его доступным для общественности.
Используйте Uploadcare для загрузки изображений
Если вам нужно быстрое, надежное и надежное решение для обработки загрузки изображений, просто вызовите функции Uploadcareиз ваших PHP-скриптов. Это даст вам большую надежность, и загрузка будет завершена быстрее.
Плюсы
- Супер-быстрая настройка и настраиваемый интерфейс.
- Работает для Интернета и мобильных устройств.
- Управляет хранилищем и автоматически работает с CDN.
- Техническая поддержка, если вы когда-нибудь столкнетесь с проблемой.
- Дополнительные функции, такие как изменение размера, обрезка изображений и т.д.
- Позволяет пользователям импортировать файлы из нескольких источников.
- Внешний вид CSS можно легко настроить.
Минусы
- Может не работать для очень специфических процедур загрузки (API включает методы, которые охватывают почти все задачи, связанные с загрузкой изображений).
- Не работает для больших файлов (100 МБ и более, в зависимости от вашего плана).
- Невозможно получить простой пакет локальной установки, поэтому он может не работать для систем с ограниченным доступом в Интернет.
- Услуга не является бесплатной, но она предлагает пакеты, которые должны соответствовать потребностям и бюджетам большинства предприятий.
На самом деле, вы можете получить доступ к методам Uploadcare через HTML/JS, поэтому PHP вообще не нужен. Тем не менее, Uploadcare предоставляет вам хорошо документированный API, который вы можете использовать в своем бэк-офисе, написанном на PHP.
После того, как это будет сделано, получить ваши изображения на CDN-сервер с помощью Uploadcare будет так же просто, как эти несколько строк кода:
<head>
<script>
UPLOADCARE_PUBLIC_KEY = ‘YOUR_PUBLIC_KEY’;
</script>
<?php echo $api->widget->getScriptTag(); ?>
</head>
<body>
<form method=»POST» action=»index.php»>
<?php echo $api->widget->getInputTag(‘qs-file’); ?>
<input type=»submit» value=»Save!» />
</form>
</body>