Введение

Composer — это популярный менеджер зависимостей PHP, который упрощает процесс установки и обновления зависимостей проекта. Он проверяет, от каких прочих пакетов зависит конкретный проект, а затем устанавливает все необходимые версии пакетов в соответствии с требованиями. Composer также часто используется для загрузки новых проектов на основе популярных инфраструктур PHP, таких как Symfony и Laravel.

Данное руководство поможет установить и начать работу с Composer на сервере Ubuntu 20.04.

Предварительные требования

composer illustration for: Предварительные требования

Для прохождения этого обучающего модуля вам потребуется доступ к серверу Ubuntu 20.04 на уровне sudo без привилегий root и включенный на сервере брандмауэр. Чтобы выполнить настройку, воспользуйтесь руководством по первоначальной настройке сервера Ubuntu 20.04.

Шаг 1 — Установка PHP и необходимых зависимостей

В дополнение к зависимостям, уже входящим в комплект системы Ubuntu 20.04, таким как git и curl, Composer требует php-cli для выполнения скриптов PHP в командной строке и unzip для распаковки архивов. Сейчас мы установим эти зависимости.

Во-первых, необходимо обновить кэш менеджера пакетов:

				
					
sudo apt update

				
			

Запустите следующую команду для установки требуемых пакетов:

				
					
sudo apt install php-cli unzip

				
			

Для подтверждения установки введите Y и нажмите ENTER.

После установки обязательных компонентов можно переходить к установке Composer.

Шаг 2 — Загрузка и установка Composer

Composer предоставляет написанный на PHP скрипт installer. Мы должны загрузить его, убедиться, что он не поврежден, а затем использовать его для установки Composer.

Убедитесь, что вы находитесь в домашней директории, а затем загрузите установщик с помощью curl:

				
					
cd ~

curl -sS https://getcomposer.org/installer -o composer-setup.php

				
			

Далее мы убедимся, что хэш установщика совпадает с хэшем SHA-384 для последней версии установщика на странице Composer Public Keys / Signatures. Чтобы упростить проверку, вы можете использовать следующую команду для программного получения последней версии хэша со страницы Composer и ее сохранения в переменной оболочки:

				
					
HASH=`curl -sS https://composer.github.io/installer.sig`

				
			

Для проверки полученного значения можно использовать следующую команду:

				
					
echo $HASH

				
			
				
					
[secondary_label Output]

<^>e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a<^>

				
			

Теперь выполните следующий код PHP, приведенный на странице загрузки Composer, чтобы подтвердить безопасность запуска скрипта установки:

				
					
php -r "if (hash_file('SHA384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

				
			

Вывод должен выглядеть так:

				
					
[label Output]

Installer verified

				
			

Если вы увидите сообщение Installer corrupt, вам нужно повторно загрузить скрипт установки и еще раз убедиться, что вы используете правильный хэш. Затем повторите процедуру проверки. После успешной проверки установщика вы можете продолжить.

Чтобы выполнить глобальную установку composer, используйте следующую команду, которая выполнит загрузку и установку Composer в качестве общесистемной команды composer в каталоге /usr/local/bin:

				
					
sudo php composer-setup.php --install-dir=<^>/usr/local/bin<^> --filename=<^>composer<^>

				
			

Вывод будет выглядеть следующим образом:

				
					
[secondary_label Output]

All settings correct for using Composer

Downloading...



Composer (version 1.10.5) successfully installed to: /usr/local/bin/composer

Use it: php /usr/local/bin/composer

				
			

Чтобы протестировать установку, запустите команду:

				
					
composer

				
			
				
					
[secondary_label Output]

 ______

 / ____/___ ____ ___ ____ ____ ________ _____

 / / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/

/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /

\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/

 /_/

Composer version 1.10.5 2020-04-10 11:44:22



Usage:

 command [options] [arguments]



Options:

 -h, --help Display this help message

 -q, --quiet Do not output any message

 -V, --version Display this application version

 --ansi Force ANSI output

 --no-ansi Disable ANSI output

 -n, --no-interaction Do not ask any interactive question

 --profile Display timing and memory usage information

 --no-plugins Whether to disable plugins.

 -d, --working-dir=WORKING-DIR If specified, use the given directory as working directory.

 --no-cache Prevent use of the cache

 -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

...

				
			

Это подтверждает, что диспетчер зависимостей Composer был успешно установлен и доступен в рамках всей системы.

Примечание: если вы предпочитаете иметь отдельные исполняемые модули Composer для каждого проекта, который вы размещаете на этом сервере, вы можете выполнить установку локально для каждого проекта. Этот метод также полезен, когда системный пользователь не имеет прав на установку программного обеспечения в рамках всей системы.

Для этого воспользуйтесь командой php composer-setup.php​​. В текущем каталоге будет сгенерирован файл composer.phar, который можно будет запустить с помощью команды php composer.phar.

А теперь давайте рассмотрим использование Composer для управления

Шаг 3 — Использование Composer в проекте PHP

PHP проекты часто зависят от внешних библиотек, и управление этими зависимостями и их версиями может вызывать затруднения. Composer решает эту проблему посредством отслеживания версий и зависимостей проектов, а также упрощает процесс поиска, установки и обновления пакетов, требуемых для проекта.

Чтобы использовать Composer в вашем проекте, вам потребуется файл composer.json. Файл composer.json указывает Composer, какие зависимости для вашего проекта нужно загрузить, а также какие версии каждого пакета можно использовать. Это очень важно для сохранения последовательности вашего проекта и отказа от установки нестабильных версий, которые могут вызывать проблемы с обратной совместимостью.

Вам не нужно создавать этот файл вручную, потому что при этом можно легко допустить ошибку в синтаксисе. Composer предлагает интерактивный способ создания нового файла composer.json на основе ввода пользователя. Этот вариант будет полезным, если вы захотите опубликовать свой проект как общедоступный пакет в Packagist. Также Composer автоматически генерирует чистый файл composer.json при запуске команды composer require для добавления зависимости в новом проекте.

Использование Composer для установки пакета в качестве зависимости в проект подразумевает следующие шаги:

  • Определите, какая библиотека необходима приложению.
  • Изучите подходящую библиотеку из открытого источника на Packagist.org, официальном репозитории пакетов для Composer.
  • Выберите пакет, который вы будете использовать в качестве зависимости.
  • Запустите composer require, чтобы включить зависимость в файл composer.json и установить пакет.

Давайте попробуем сделать это на примере демо-приложения.

Приложение преобразует указанное предложение в понятную человеку часть URL-адреса _(slug)_. Как правило, подобные приложения используются для преобразования названия страницы в URL-адрес (например, последняя часть URL для данного обучающего руководства).

Начнем с создания директории для нашего проекта. Мы назовем его slugify.

				
					
cd ~

mkdir slugify

cd slugify

				
			

Хотя это не требуется, вы можете запустить команду composer init для создания детального файла composer.json для вашего проекта. Поскольку единственная цель нашего проекта — продемонстрировать установку зависимостей на Composer, мы используем более простой файл composer.json, который будет сгенерирован автоматически, когда нам потребуется наш первый пакет.

Теперь нужно найти на Packagist.org пакет, который поможет нам генерировать *понятные человеку части URL-адреса*. При поиске термина «slug» на Packagist вы получите примерно такой результат:

Вы увидите два числа с правой стороны каждого пакета в списке. Число сверху указывает на количество установок пакета через Composer, а число внизу показывает, какие оценки пакету ставили на GitHub. Как правило, пакеты с большим количеством установок и большим количеством звезд более стабильны, потому что многие люди их используют. Также важно проверить описание пакета на соответствие тому, что вам нужно.

Нам нужен конвертер _​​из строки в понятную человеку часть URL-адреса_. Среди результатов поиска хорошо подходит пакет cocur/slugify, отображаемый на первой строке, для которого указано существенное количество установок и звезд.

Пакеты на Packagist имеют имя автора и имя пакета. Каждый пакет имеет уникальный идентификатор (пространство имен) в том же формате, который использует GitHub для своих репозиториев: <^>vendor<^>/<^>package<^>. Библиотека, которую мы хотим установить, использует пространство имен cocur/slugify. Для ее указания в вашем проекте требуется пространство имен пакета.

Теперь, когда вы знаете, какой пакет хотите установить, запустите composer require, чтобы добавить его в качестве зависимости, а также сгенерировать файл composer.json для вашего проекта. При запросе пакетов важно учитывать, что Composer отслеживает как зависимости на уровне приложений, так и зависимости на уровне системы. Зависимости на уровне системы важны, чтобы показать, на какие модули PHP полагается пакет. Для пакета cocur/slugify требуется модуль PHP, который мы еще не установили.

Если требуемый пакет использует системную библиотеку, которая еще не установлена на вашем сервере, вы получите сообщение об ошибке с указанием невыполненного требования:

				
					
composer require cocur/slugify

				
			
				
					
[secondary_label Output]

Using version ^4.0 for cocur/slugify

./composer.json has been updated

Loading composer repositories with package information

Updating dependencies (including require-dev)

Your requirements could not be resolved to an installable set of packages.



 Problem 1

 - Installation request for cocur/slugify ^4.0 -&gt; satisfiable by cocur/slugify[v4.0.0].

 - &lt;^&gt;cocur/slugify v4.0.0 requires ext-mbstring&lt;^&gt; * -&gt; the requested PHP extension &lt;^&gt;mbstring&lt;^&gt; is missing from your system.

...

				
			

Для решения проблемы с системной зависимостью мы можем выполнить поиск отсутствующего пакета с помощью apt search:

				
					
apt search mbstring

				
			
				
					
[secondary_label Output]

Sorting... Done

Full Text Search... Done

&lt;^&gt;php-mbstring&lt;^&gt;/focal 2:7.4+75 all

 MBSTRING module for PHP [default]



php-patchwork-utf8/focal 1.3.1-1 all

 UTF-8 strings handling for PHP



php7.4-mbstring/focal 7.4.3-4ubuntu1 amd64

 MBSTRING module for PHP

				
			

Определив правильное имя пакета, вы можете использовать apt еще раз для установки системной зависимости:

				
					
sudo apt install &lt;^&gt;php-mbstring&lt;^&gt;

				
			

После завершения установки вы можете запустить команду composer require еще раз:

				
					
composer require cocur/slugify

				
			
				
					
[secondary_label Output]

Using version &lt;^&gt;^4.0&lt;^&gt; for cocur/slugify

./composer.json has been created

Loading composer repositories with package information

Updating dependencies (including require-dev)

Package operations: 1 install, 0 updates, 0 removals

 - Installing cocur/slugify (&lt;^&gt;v4.0.0&lt;^&gt;): Downloading (100%) 

Writing lock file

Generating autoload files

				
			

Как видите, Composer автоматически определил, какую версию пакета использовать. Если вы сейчас проверите каталог вашего проекта, он будет содержать два новых файла: composer.json и composer.lock, а также каталог vendor.

				
					
ls -l

				
			
				
					
[secondary_label Output]

total 12

-rw-rw-r-- 1 sammy sammy 59 May 4 13:56 composer.json

-rw-rw-r-- 1 sammy sammy 3229 May 4 13:56 composer.lock

drwxrwxr-x 4 sammy sammy 4096 May 4 13:56 vendor

				
			

Файл composer.lock используется для хранения информации о том, какие версии каждого пакета установлены, а также для использования одних и тех же версий пакетов, если кто-либо будет клонировать ваш проект и устанавливать зависимости. Каталог vendor служит местом расположения зависимостей проекта. Папка vendor не обязательно должна использоваться для контроля версий, в нее следует поместить только файлы composer.json и composer.lock.

При установке проекта, который уже содержит файл composer.json, запустите composer install, чтобы загрузить зависимости проекта.

Давайте быстро пробежимся по ограничениям версии. Если вы просмотрите содержимое файла composer.json, то увидите следующее:

				
					
cat composer.json

				
			
				
					
[secondary_label Output]

{

 "require": {

 "cocur/slugify": "^4.0"

 }

}

				
			

Вы можете заметить специальный символ ^ перед номером версии в файле composer.json. Composer поддерживает несколько ограничений и форматов для определения требуемой версии пакета, чтобы обеспечить гибкость и одновременно сохранить стабильность вашего проекта. Оператор карет ​​(^), используемый в автоматически генерируемом файле composer.json, рекомендуется применять для обеспечения максимальной совместимости в соответствии с семантическим управлением версиями. В данном случае он определяет 4.0 в качестве минимальной совместимой версии и позволяет обновляться до любой будущей версии ниже 5.0.

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

Ниже представлены примеры, которые помогут лучше понять, как работают ограничения версии в Composer:

Ограничение Значение Пример допустимых версий
———- ————– ————————
^1.0 >= 1.0 < 2.0 1.0, 1.2.3, 1.9.9
^1.1.0 >= 1.1.0 < 2.0 1.1.0, 1.5.6, 1.9.9
~1.0 >= 1.0 < 2.0.0 1.0, 1.4.1, 1.9.9
~1.0.0 >= 1.0.0 < 1.1 1.0.0, 1.0.4, 1.0.9
1.2.1 1.2.1 1.2.1
1.* >= 1.0 < 2.0 1.0.0, 1.4.5, 1.9.9
1.2. * >= 1.2 < 1.3 1.2.0, 1.2.3, 1.2.9

Более подробное описание ограничений версии в Composer см. в официальной документации.

Теперь нужно рассмотреть, как автоматически загружать зависимости с помощью Composer.

Шаг 4 — Включение скрипта автозагрузки

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

Вам нужно будет только включить файл vendor/autoload.php в скрипты PHP перед созданием экземпляра любого класса.

Протестируем его в нашем демонстрационном приложении. Откройте в текстовом редакторе новый файл с именем test.php:

				
					
nano test.php

				
			

Добавьте следующий код, который будет подключать файл vendor/autoload.php, загружать зависимость cocur/slugify и использовать ее для создания понятной человеку части URL-адреса:

				
					
[label test.php]

&lt;?php

require __DIR__ . '/vendor/autoload.php';



use Cocur\Slugify\Slugify;



$slugify = new Slugify();



echo $slugify-&gt;slugify('Hello World, this is a long sentence and I need to make a slug from it!');

				
			

Сохраните файл и закройте редактор.

Запустите скрипт:

				
					
php test.php

				
			

Вы должны получить вывод hello-world-this-is-a-long-sentence-and-i-need-to-make-a-slug-from-it.

Зависимости нуждаются в обновлениях при выходе новых версий, так что давайте рассмотрим, как решить эту проблему.

Шаг 5 — Обновление зависимостей проекта

Если вам нужно обновить зависимости проекта на более поздние версии, запустите команду update:

				
					
composer update

				
			

Она будет проверять новые версии библиотек, которые требуются вам в вашем проекте. Если будет найдена новая версия, которая совместима с ограничением версии, определенным в файле composer.json, Composer заменит ранее установленную версию на новую. Файл composer.lock будет обновлен, чтобы отразить эти изменения.

Вы также можете обновить одну или несколько конкретных библиотек, указав их следующим образом:

				
					
composer update &lt;^&gt;vendor/package&lt;^&gt; &lt;^&gt;vendor2/package2&lt;^&gt;

				
			

Обязательно зарегистрируйте файлы composer.json и composer.lock в системе контроля версий после обновления зависимостей, чтобы другие тоже могли установить обновленные версии.

Заключение

Composer — это мощный инструмент, значительно упрощающий управление зависимостями в проектах PHP. Он дает надежный способ обнаружения, установки и обновления пакетов PHP, от которых зависит проект. В этом обучающем модуле мы узнали, как установить Composer, как включить в проект новые зависимости и как обновлять эти зависимости при выходе новых версий.