// Tutorial //

Установка и использование Composer в Ubuntu 18.04

Published on January 7, 2020
Default avatar
By Brian Hogan
Developer and author at DigitalOcean.
Русский
Установка и использование Composer в Ubuntu 18.04

Предыдущая версия данного обучающего руководства была написана Бренненом Бернсом.

Введение

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

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

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

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

Шаг 1 — Установка зависимостей

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

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

  1. sudo apt update

Теперь мы установим зависимости. Нам потребуется curl, чтобы загрузить Composer, и php-cli для установки и запуска. Пакет php-mbstring необходим для предоставления функций для библиотеки, которую мы будем использовать. git используется Composer для загрузки зависимостей проекта, а unzip для извлечения заархивированных пакетов. Все пакеты можно установить при помощи следующей команды:

  1. sudo apt install curl php-cli php-mbstring git unzip

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

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

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

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

  1. cd ~
  2. curl -sS https://getcomposer.org/installer -o composer-setup.php

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

  1. HASH=544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061

Обязательно замените последний хэш на выделенное красным значение.

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

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

Вы должны увидеть следующий вывод:

Output
Installer verified

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

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

  1. sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer

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

Output
All settings correct for using Composer Downloading... Composer (version 1.6.5) successfully installed to: /usr/local/bin/composer Use it: php /usr/local/bin/composer

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

  1. composer

Вы должны получить подобный вывод с версией и аргументами Composer.

Output
______ / ____/___ ____ ___ ____ ____ ________ _____ / / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/ / /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ / \____/\____/_/ /_/ /_/ .___/\____/____/\___/_/ /_/ Composer version 1.6.5 2018-05-04 11:44:59 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. -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug . . .

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. cd ~
  2. mkdir slugify
  3. cd slugify

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

Packagist Search: easy-slug/easy-slug, muffin/slug, ddd/slug, zelenin/slug, webcastle/slug, anomaly/slug-field_type

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

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

Пакеты на Packagist имеют имя автора и имя пакета. Каждый пакет имеет уникальный идентификатор (пространство имен) в том же формате, который использует GitHub для своих репозиториев в форме автор/пакет. Библиотека, которую мы хотим установить, использует пространство имен cocur/slugif. Вам нужно пространство имен, чтобы использовать пакет в вашем проекте.

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

  1. composer require cocur/slugify

Вы увидите следующий вывод, когда Composer загрузит зависимость:

Output
Using version ^3.1 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 (v3.1): Downloading (100%) Writing lock file Generating autoload files

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

  1. ls -l
Output
total 12 -rw-rw-r-- 1 sammy sammy 59 Jul 11 16:40 composer.json -rw-rw-r-- 1 sammy sammy 2934 Jul 11 16:40 composer.lock drwxrwxr-x 4 sammy sammy 4096 Jul 11 16:40 vendor

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

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

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

  1. cat composer.json
Output
{ "require": { "cocur/slugify": "^3.1" } } sam

Вы можете заметить специальный символ ^ перед номером версии в файле composer.json. Composer поддерживает несколько ограничений и форматов для определения требуемой версии пакета, чтобы обеспечить гибкость и одновременно сохранить стабильность вашего проекта. Оператор карет ​​(^), используемый в автоматически генерируемом файле composer.json, рекомендуется применять для обеспечения максимальной совместимости в соответствии с семантическим управлением версиями. В данном случае он определяет 3.1 в качестве минимальной совместимой версии и позволяет обновляться до любой будущей версии ниже 4.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 предоставляет скрипт автозагрузки, который можно включить в ваш проект, чтобы использовать автозагрузку бесплатно. Это значительно упрощает работу с зависимостями.

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

Давайте попробуем сделать это в нашем приложении. Создайте файл test.php и откройте его в текстовом редакторе:

  1. nano test.php

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

test.php
<?php
require __DIR__ . '/vendor/autoload.php';

use Cocur\Slugify\Slugify;

$slugify = new Slugify();

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

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

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

  1. php test.php

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

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

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

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

  1. composer update

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

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

  1. composer update vendor/package vendor2/package2

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

Заключение

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

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


Want to learn more? Join the DigitalOcean Community!

Join our DigitalOcean community of over a million developers for free! Get help and share knowledge in our Questions & Answers section, find tutorials and tools that will help you grow as a developer and scale your project or business, and subscribe to topics of interest.

Sign up
About the authors
Default avatar
Developer and author at DigitalOcean.

Still looking for an answer?

Was this helpful?
Leave a comment

This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!