Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.
Кратко о задаче
Рекомендуется сперва обновить список существующих репозиториев APT:
После этого потребуется установить пакеты, которые обеспечат дальнейшую загрузку и использование Composer:
sudo apt install curl php-cli unzip -ycurl. Утилита для выполнения HTTP-запросов.php-cli. Интерпретатор для запуска PHP-скриптов.unzip. Утилита для распаковки ZIP-архивов.
Флаг -y необходим для положительного ответа на все вопросы во время установки.
Установка Composer выполняется автоматически с помощью PHP-скрипта, который создали сами разработчики менеджера зависимостей. Таким образом, установка Composer сводится к загрузке и запуску этого скрипта.
Загрузить установочный скрипт можно с официального сайте Composer, сделав соответствующий HTTP-запрос:
curl -sS https://getcomposer.org/installer -o composerInstall.php-
Флаг
-sSуказывает на запускcurlв тихом режиме, когда не выводятся никакие сообщения, кроме ошибок. -
Флаг
-oуказывает на директорию, в которую будет помещен загруженный файл, а также его имя, под которым он будет сохранен в системе.
Флаг -sS указывает на запуск curl в тихом режиме, когда не выводятся никакие сообщения, кроме ошибок.
Флаг -o указывает на директорию, в которую будет помещен загруженный файл, а также его имя, под которым он будет сохранен в системе.
Чтобы убедиться, что файл действительно был загружен, можно проверить содержимое текущей директории:
В консольном терминале появится список файлов, среди которых будет установочный скрипт:
composerInstall.php resize.log snap****В этом руководстве выполняется глобальная установка Composer. То есть менеджер зависимостей будет запускаться в любом каталоге без необходимости явного указания абсолютного пути.
Для глобальной установки Composer нужно выполнить загруженный PHP-скрипт, передав ему несколько дополнительных параметров:
php composerInstall.php --install-dir=/usr/local/bin --filename=composer-
Флаг
--install-dirуказывает на директорию, в которую будет установлен Composer. -
Флаг
--filenameуказывает на имя бинарного файла, к которому можно будет обращаться из терминала консоли.
Флаг --install-dir указывает на директорию, в которую будет установлен Composer.
Флаг --filename указывает на имя бинарного файла, к которому можно будет обращаться из терминала консоли.
В данном случае Composer устанавливается в системную директорию для бинарных файлов — /usr/local/bin.
После выполнения скрипта установки в консольном терминале появится результат его работы:
All settings correct for using Composer
Downloading...
Composer (version 2.8.2) successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composerТак как установочный скрипт больше не нужен, его можно удалить:
Если попытаться запустить Composer в первый раз:
То в консольном терминале появится сообщение с вопросом:
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Continue as root/super user [yes]?Composer сообщает о том, что его запуск от имени root-пользователя выполняется на свой страх и риск. Таким образом Composer создает предупреждает, но позволяет продолжить работу от имени администратора.
В рамках этого руководства мы будет работать с Composer как есть, поэтому соглашаемся с вопросом в консольном терминале. После этого в терминале появится стартовое приветствие, а также список возможных опций и команд с их кратким описанием.
Теперь Composer полностью установлен в систему, а значит его можно использовать для управления зависимостями любых проектов на PHP.**
**
Основной файл, через который выполняется управление зависимостями, — composer.json. Внутри него описываются пакеты, необходимые для корректной работы проекта.
Таким образом, Composer следует подходу Infrastructure as Code (Iac), описывая локальную инфраструктуру проекта через конфигурационный файл, а не через ручное редактирование настроек в каком-либо графическом интерфейсе.
Тем не менее, Composer позволяет управлять файлом конфигурации не только вручную посредством редактирования его содержимого в текстовом редакторе, но и с помощью команд в консольном терминале — то есть в более интерактивном виде.**
**
Использование Composer сопряжено с использованием нескольких базовых команд, каждая из которых в том или ином виде взаимодействует с конфигурационным файлом composer.json:
-
init. Инициализирует проект. -
require. Подключает пакет. -
install. Устанавливает зависимости. -
update. Обновляет пакеты.
init. Инициализирует проект.
require. Подключает пакет.
install. Устанавливает зависимости.
update. Обновляет пакеты.
На самом деле Composer имеет намного больше команд, однако именно эти используются чаще всего.
Предположим, мы работаем над небольшим проектом, который выполняет различные строковые преобразования. Поэтому нам в качестве зависимости нужна некая специфическая библиотека, содержащая ряд функций для изменения содержимого строк.
В этом руководстве мы будем выполнять общую для многих языков программирования функцию slugify, которая преобразует последовательность слов в одно длинное слово, содержащее только строчные ASCII-символы и дефисы.
Чаще всего slugify используется для преобразования произвольных заголовков в формат URL-адресов без пробелов.
Например, заголовок «How to deal with Composer» с помощью функции slugify можно преобразовать в надпись «how-to-deal-with-composer», которая может использовать для URL-адреса страницы руководства по установке — «/blog/php/how-to-deal-with-composer».
А еще результат функции slugify похож на стиль именования переменных Kebab Case:
Чтобы не писать эту функцию самостоятельно, мы воспользуемся Composer и найдем соответствующую библиотеку в официальном реестре пакетов, включим ее в список зависимостей и позволим Composer автоматически выполнить ее загрузку, установку и включение в проект.**
**
Сперва создадим отдельный каталог для PHP-проекта:
После чего перейдем в него:
Здесь будет размещаться как исходный код проекта, так и файлы необходимых зависимостей.
Чтобы найти необходимую библиотеку, нам потребуется:
- Открыть в браузере страницу упомянутого ранее официального реестра пакетов Composer.
Открыть в браузере страницу упомянутого ранее официального реестра пакетов Composer.
- Ввести в поиск «slugify».
Ввести в поиск «slugify».
- Найти наиболее подходящий пакет исходя из его параметров и описания.
Найти наиболее подходящий пакет исходя из его параметров и описания.
Интересно, что в поиске дополнительно выводятся ключевые показатели каждого из доступных пакетов:
-
Количество установок через Composer (справа вверху)
-
Количество звезд на GitHub (справа внизу)
Количество установок через Composer (справа вверху)
Количество звезд на GitHub (справа внизу)
На самом деле есть очевидная закономерность, что более популярные пакеты работают стабильнее, ведь их использует большее число людей.
В этом руководстве мы будем использовать пакет ocur/slugify. Название пакета (подобно репозиторию на GitHub) содержит имя автора (поставщика) и название библиотеки, разделенных символом косой черты (/).
Мы можем перейти на страницу пакета, кликнув по его названию, чтобы увидеть больше подробностей о реализации библиотеки. Например, это может быть список зависимостей, описание с примерами кода, бейджи покрытия тестами, тип лицензии и т.п.
Также стоит обратить внимание на доступные версии пакетов, которые необходимо указывать во время установки зависимости.
Таким образом можно искать и подбирать подходящие пакеты для PHP-проекта, которые впоследствии будут использоваться в качестве зависимости для предоставления специфических функций.
Для того, чтобы установить необходимый пакет, нужно воспользоваться командой require, которая либо записывает зависимость в конфигурационный файл composer.json, либо создает его, если его еще нет:
composer require cocur/slugify:4.6В этом руководстве используется cocur/slugify версии 4.6.0.
После выполнения этой команды в терминале консоли может появиться ошибка, сообщающая о недостающих системных библиотеках:
./composer.json has been created
Running composer update cocur/slugify
Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Root composer.json requires cocur/slugify 4.1 -> satisfiable by cocur/slugify[v4.1.0].
- cocur/slugify v4.1.0 requires ext-mbstring * -> it is missing from your system. Install or enable PHP's mbstring extension.
...Этот консольный вывод сообщает о недостающей системной библиотеке ext-mbstring, которая требуется для корректной работы cocur/slugify.
Это библиотеку можно вручную попытаться найти в пакетной менеджере APT:
После этого в консольном терминале появится список совпадений по названию:
Sorting... Done
Full Text Search... Done
php-mbstring/jammy 2:8.1+92ubuntu1 all
MBSTRING module for PHP [default]
php-patchwork-utf8/jammy 1.3.1-1 all
UTF-8 strings handling for PHP
php-symfony-polyfill-mbstring/jammy 1.24.0-1ubuntu2 all
Symfony polyfill for the Mbstring extension
php-symfony-polyfill-util/jammy 1.24.0-1ubuntu2 all
Symfony utilities for portability of PHP codes
php8.1-mbstring/jammy-updates,jammy-security 8.1.2-1ubuntu2.19 amd64
MBSTRING module for PHPМожно заметить, что самое первое совпадение и есть искомая библиотека. Поэтому устанавливаем ее:
sudo apt install php-mbstring -yПосле завершения установки недостающей системной библиотеки снова запускаем установку пакета для Composer:
composer require cocur/slugify:4.6На этот раз консольный вывод должен сообщить об успешной установке:
./composer.json has been created
Running composer update cocur/slugify
Loading composer repositories with package information
Updating dependencies
Lock file operations: 1 install, 0 updates, 0 removals
- Locking cocur/slugify (v4.6.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Downloading cocur/slugify (v4.6.0)
- Installing cocur/slugify (v4.6.0): Extracting archive
Generating autoload files
No security vulnerability advisories found.Теперь проверим содержимое директории проекта:
Можно заметить новые сгенерированные файлы:
composer.json composer.lock vendorКаждый файл и каталог имеет свое закономерное предназначение:
-
composer.json— файл с информацией о необходимых зависимостях -
composer.lock— файл с информацией об уже установленных зависимостях -
vendor— установленные зависимости проекта
composer.json — файл с информацией о необходимых зависимостях
composer.lock — файл с информацией об уже установленных зависимостях
vendor — установленные зависимости проекта
Если вы используете систему контроля версий (например, Git), папку vendor нужно исключить из сохранения в репозиторий.
Интереснее всего взглянуть на содержимое конфигурационного файла:
{
"require": {
"cocur/slugify": "4.6"
}
}Можно заметить отдельный блок require, в котором указан необходимый пакет cocur/slugify версии 4.6.
С помощью специальных символов можно указывать допустимые диапазоны версий, требуемых для корректной работы проекта — все они следуют общепринятому соглашению Semantic Versioning 2.0.0:
| Ограничитель | Диапазон | Возможные значения |
|---|---|---|
| 1.5.2 | 1.5.2 | 1.5.2 |
| ^1.0 | от 1.0 до 2.0 | 1.0, 1.4.7, 1.9.9 |
| ^1.1.0 | от 1.1.0 до 2.0 | 1.1.0, 1.2.5, 1.9.9 |
| ~1.0 | от 1.0 до 2.0.0 | 1.0, 1.5.2, 1.9.9 |
| ~1.0.0 | от 1.0.0 до 1.1 | 1.0.0, 1.0.2, 1.0.9 |
| 1.* | от 1.0 до 2.0 | 1.0.0, 1.3.2, 1.9.9 |
| 1.2.* | от 1.2 до 1.3 | 1.2.0, 1.2.4, 1.2.9 |
Более подробную информацию о возможных значениях версий можно посмотреть на специальной странице в официальной документации Composer.
После того, как зависимость была установлена, ее можно включить в код проекта с помощью автоматически сгенерированного скрипта автозагрузки autoload.php, который находится в директории vendor.
При включении этого скрипта в PHP-приложение функции и классы существующих зависимостей станут доступны изнутри.
Поэтому давайте создадим основной файл нашего приложения:
И наполним его следующим содержимым:
<?php
require __DIR__ . '/vendor/autoload.php';
use Cocur\Slugify\Slugify;
$slugify = new Slugify();
// Значение PHP_EOL необходимо для переноса на новую строку в консоли
echo '[русский]: ' . $slugify->slugify('Как справится с Composer') . PHP_EOL;
echo '[english]: ' . $slugify->slugify('How to deal with composer') . PHP_EOL;
?>Теперь скрипт можно запустить:
В консольном терминале появится следующий вывод:
[русский]: kak-spravitsya-s-composer
[english]: how-to-deal-with-composerВ Composer есть возможность проверить наличие новых версий библиотек из списка зависимостей на основе диапазонов версий, заданных в конфигурационном файле composer.json:
Либо можно выполнить обновление избирательно, явно указав имя пакета:
composer update cocur/slugifyЕсли в директории вашего PHP-проекта есть файл composer.json, но при этом еще не установлены указанные в нем зависимости, то их нужно установить.
Давайте сперва удалим все имеющиеся пакеты и связанную с ними информацию:
rm vendor composer.lock -RФлаг -R необходим для рекурсивного удаления файлов и директорий.
После этого попробуем запустить скрипт:
В консоли появится закономерная ошибка:
PHP Warning: require(/root/phptest/vendor/autoload.php): Failed to open stream: No such file or directory in /root/phptest/main.php on line 2
PHP Fatal error: Uncaught Error: Failed opening required '/root/phptest/vendor/autoload.php' (include_path='.:/usr/share/php') in /root/phptest/main.php:2
Stack trace:
#0 {main}
thrown in /root/phptest/main.php on line 2Теперь повторно установим зависимости на основе данных из конфигурационного файла:
После чего снова запустим скрипт:
В консоли появится привычный результат без каких-либо ошибок:
[русский]: kak-ustanovit-i-ispolzovat-composer
[english]: how-to-install-and-use-composerНужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.