Composer в php — это менеджер пакетов, который позволяет управлять зависимостями библиотек при разработке приложения. С помощью него можно достаточно легко подключать и обновлять новые библиотеки в своем проекте, а также сохранять их версионность.
Композер существует с 2011 года (официальный релиз был в марте 2012). Как идея менеджеры пакетов существуют достаточно давно и авторы композера не скрывают, что при разработке вдохновлялись npm для Node.js и Bundler для Ruby.
В этой статье рассмотрим основные шаги, которые нужно сделать чтобы начать использовать композер у себя в проекте.
Проверка наличия php в интерактивной консоли
Первым делом нужно проверить наличие возможности исполнения php кода в консоли вашей системы. Для этого откройте терминал и введите следующую команду:
php --version
Если все в порядке, то вам вернется краткое сведение о версии php, которая у вас установлена:
PHP 7.1.23 (cli) (built: Nov 7 2018 18:20:35) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
В противном случае, вам нужно будет включить исполнение php из консоли, так как последующие команды будут выполняться при помощи терминала.
Установка composer локально
Что бы работать с композером, достаточно скачать composer.phar с официального сайта.
По сути это php-архив в котором располагаются скрипты, позволяющие выполнять определенные команды в консоли, например update, install и прочее.
Итак, для начала в папке с вашим проектом откроем терминал и выполним команды:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
Если при исполнении первой команды вы получили предупреждение : «Unable to find the wrapper “https” — did you forget to enable it when you configured PHP?», то нужно в файле php.ini раскомментировать extension=openssl (примерно 919 строка)
Тем самым мы скачаем установщик, который проверит настройки PHP и если все в порядке, то будет скачана актуальная версия composer.phar.
Если из этой же директории выполнить команду php composer.phar, то получим список доступных команд и описание к ним. По сути это все что нужно сделать для установки композера локально.
Установка composer php глобально
Что бы каждый раз не писать вначале командной строки php composer.phar можно вынести композер глобально и пользоваться только командой composer в любом месте вышей системы.
Настройка для macos
В папке проекта, где лежит composer.phar выполните команды:
sudo mv composer.phar /usr/local/bin/
vim ~/.bash_profile
Файл .bash_profile может быть пустым или же вообще отсутствовать. Если это так, то создайте его и добавьте следующую строку:
alias composer="php /usr/local/bin/composer.phar"
Не забудьте перезапустить окно терминала, что бы изменения вступили в силу.
Проверяем работу командой composer
Настройка для linux (Ubuntu)
Скачиваем установочный скрипт в любую директорию
curl -sS https://getcomposer.org/installer -o composer-setup.php
И устанавливаем композер в папку bin:
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
Проверяем работу выполнив команду composer
Настройка для windows
Процесс установки достаточно прост и ничем не отличает от установки обычной программы под windows.
Для этого нужно скачать установщик с официального сайта по ссылке. В процессе установки, важно указать правильный путь к интерпретатору php, у меня он находится по следующему пути C:\php\php.exe
Так же после установки не забудьте перезапустить терминал и проверить работу командой composer
Пример использования composer php
Для примера предлагаю рассмотреть установку библиотеки mpdf (ссылка на библиотеку), которая позволят генерировать pdf файл используя php.
Для этого создадим папку myproject и перейдем в нее:
mkdir myproject
cd myproject
Следующим шагом скачаем библиотеку mpdf используя композер:
composer require mpdf/mpdf
После этого в myproject появятся папка vendor и два файла — composer.json и composer.lock.

Файл composer.json
Этот файл является описанием проекта, сообщая нам об используемых библиотеках. Так же в нем может быть указано название проекта, его автора и прочее.
//composer.json
{
"require": {
"mpdf/mpdf": "^7.1"
}
}
Ключ require это первая и часто единственное, что находится в файле. Он указывает на скачанный пакет и его версию, где косой чертой разделено название поставщика и название самой библиотеки.
Файл composer.lock
При установке на свой проект сторонней библиотеки (в нашем случае это mpdf ) с помощью композера, она дополнительно может потянуть с собой ряд других пакетов и дополнений необходимых для ее корректной работы.
Именно эти пакеты (помимо самой mpdf) указаны в файле composer.lock. Для каждого из них описывается версия, которая использовалась при разработке библиотеки. Версионность важно сохранять, т.к. от версии к версии та или иная зависимость может содержать разный набор методов.
//composer.json
{
"_readme": [
"This file locks the dependencies of your project to a known state",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "2833371aed4743ebf60ecd860eace04c",
"packages": [
{
"name": "mpdf/mpdf",
"version": "v7.1.9",
....
},
{
"name": "myclabs/deep-copy",
"version": "1.8.1",
....
},
{
"name": "paragonie/random_compat",
"version": "v9.99.99",
....
},
{
"name": "psr/log",
"version": "1.1.0",
....
},
{
"name": "setasign/fpdi",
"version": "1.6.2",
....
}
],
"packages-dev": [],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": [],
"prefer-stable": false,
"prefer-lowest": false,
"platform": [],
"platform-dev": []
}
Тем самым, если мы скачаем проект, который разрабатывался с использованием композера и запустим composer install, то нам установятся ровно те зависимости с нужными версиями, которые изначально использовались при разработке.
Обязательно ли использовать composer.lock при первой установке проекта?
Допустим, мы разрабатывали проект пять лет назад и использовали библиотеку mpdf с самыми последними на тот момент версиями зависимостей, которые она использовала.
Так вот сейчас (спустя пять лет) при установке проекта с помощью команды composer install имея у себя только файл composer.json, мы получим версии зависимостей, которые актуальные на сегодняшний день, а не те которые использовались при изначальной разработке проекта. Это может вызвать конфликт методов, т.к. будет нарушена версионность.
В следствии этого, при установке проекта в котором есть файл composer.lock, мы можем не беспокоится о том, что в наш проект установятся зависимости с неактуальными версиями.!
Папка vendor и файл autoload.php
В папку vendor помещаются установленные библиотеки и зависимости к ним. Так же помимо всего этого есть autoload.php. Он подключается с помощью функции require() , как правило, в самое начало файла, где планируется использоваться библиотека.
Для примера, в ранее созданной папке myproject создадим файл index.php

Подключим autoload.php и вызовем метод библиотеки mgdf
//index.php
require 'vendor/autoload.php';
$mpdf = new \Mpdf\Mpdf();
$mpdf->WriteHTML('Hello world!');
$mpdf->Output();