Composer для самых маленьких
Когда я первый раз разбирался с composer, я набросал для себя маленькую шпаргалку и теперь, спустя некоторое время представляю её на суд общественности в несколько доработанном виде.
Данная публикация актуальная для тех, кто в первый раз столкнулся с незаменимым менеджером пакетов для PHP.
Итак, Composer — менеджер пакетов для PHP.
Для чего нужен Composer и простейший пример его использования
Возьмем для примера этот проект
Если в двух словах: то это набор скриптов для работы в VK API
Соответственно, для работы этих скриптов нужно несколько библиотек
Библиотеки перечислены в файле composer.json — ключевой файл при работе с composer
В этом проекте используется 5 библиотек. Соответственно, если разработчик решит опубликовать этот проект на github, то ему достаточно закинуть в репу саму папку со скриптами и составить composer.json, в котором будут описаны библиотеки, необходимые для работы этого проекта. Простота очевидна: в репу не нужно вслед за файлами прицепом тащить все нужные библиотеки. Занимает меньше места, проще распространять проект.
В папке scripts лежат непосредственно скрипты проекта, для работы которых и требуются эти 5 пакетов.
Запускаем установку пакетов:
После установки появляется папка vendor, куда складываются установленные пакеты и формируется файл autoload.php
Этот файл подключаем к проекту и всё — библиотеки подключены, можно спокойно с ними работать.
Простота очевидна: не нужно скачивать и подключать библиотеки и их зависимости самостоятельно, composer всё сделает за Вас. И вся эта пачка подключается одним единственным файлом autoload.php
Все пакеты, которые лежат в vendor, добавляются в автозагрузчик. При этом composer опирается на файлы composer.json, которые должны быть у каждого пакета. Формирование composer.json пакета — это задача разработчика пакета, от потребителя пакета требуется лишь описать в composer.json проекта, какие пакеты нужно подключить.
Это пример composer.json проекта:
Это пример composer.json пакета:
В секции require прописана зависимость этого пакета — библиотека guzzle http, необходимая для работы библиотеки getjump/vk. В данном случае, т.е. с точки зрения потребителя пакетов, всевозможные зависимости пакетов — это не наша «забота», с зависимостями composer разберётся сам.
Пространство имён пакета прописано в секции autoload
getjump\\Vk\\ — наименование пространства имён
src/getjump/Vk/ — директория, в которой лежат файлы с классами пакета
Работа с этой библиотекой в проекте:
Core и Friends — это классы библиотеки, которые разложены и прописаны в папке src в соответствии со стандартом PSR-4. Опять же формирование структуры пакета — это работа создателя пакета.
Нам, как потребителю пакета, достаточно прописать в наш проект
include ‘../vendor/autoload.php’;
и все эти классы и пространства имён будут отлично работать.
При этом нам не нужно заморачиваться и писать автозагрузчик. Composer это сделает сам при выполнении команды install.
Установка
Установка Composer глобально
1) Для начала нужно что бы путь к директории с интерпретатором PHP был прописан в переменной окружения path.
Проверим, так ли это:
php –version
Если вывод получился типа такого, то этот шаг можно пропустить
На примере Windows 7
Система -> Дополнительные параметры системы -> Дополнительно -> Переменные среды
Далее нас будет интересовать переменная path:
Вписываем путь к интерпретатору
*С давних времён у меня на компьютере лежит сборка xampp, сама сборка здесь нафиг не нужна, а вот интерпретатор с неё вполне подойдёт (версия PHP – 5.6).
2) Перезапускаем терминал.
Создаём директорию и ставим composer (я ставил на диск D)
D:
cd /
mkdir bin
cd bin
php -r «readfile(‘https://getcomposer.org/installer’);» | php
echo php «%~dp0composer.phar» %*>composer.bat
3) Добавим в переменную окружения path путь к composer.bat, например для D:\bin должно получиться:
Дополнительно можно добавить в path
D:\Users\%userName%\AppData\Roaming\Composer\vendor\bin\
для того, что-бы было удобнее использовать инструменты, глобально установленные через Composer.
(У меня папка Users располагается на диске D, а на C создан симлинк на неё).
Всё, composer установлен и полностью готов к работе.
Ещё: при установке можно словить ошибку
[RuntimeException]
The APPDATA or COMPOSER_HOME environment variable must be set for composer to run correctly
Решение нашлось здесь github.com/composer/composer/issues/2033
Добавляем переменную APPDATA со значением D:\Users\GSU\AppData\Roaming
Установка Composer локально
Есть вариант ещё поставить composer локально, но в большинстве случаев в этом нет явной необходимости.
Однако тут установка ещё проще.
Т.к. программа глобально не установлена, нужен загрузочный файл(мини-программа composer), для его загрузки пишем команду:
php -r «readfile(‘https://getcomposer.org/installer’);» | php
теперь в директории проекта появился файл composer.phar
Всё, можно использовать.
php composer.phar require [название пакета]
Отличия глобальной и локальной установки
Команды запускаются по разному при локальной и глобальной установках:
Например:
Локально: php composer.phar require silex/silex ~1.1
Глобально: composer require silex/silex ~1.1
При локальной установке нужно каждый раз скачивать установочный файл в папку текущего проекта
php -r «readfile(‘https://getcomposer.org/installer’);» | php
При глобальной установке этот файл не нужен. Composer запускается при любой текущей директории.
Команды
install — установка пакетов, прописанных в composer.json
update – обновление пакетов
dumpautoload — пересборка автозагрузчика
require somepackage/somepackage:someversion — добавление нового пакета (по умолчанию пакеты ставятся из оф. репозитория). При установке пакет прописывается в composer.json
update —lock — обновление файла блокировки composer.lock
config —global cache-files-maxsize «2048MiB» — пример изменения параметра конфигурации
—profile — добавление этого параметра к любой команде включит показ времени выполнения и объёма использованной памяти
—verbose — подробная инфомация о выполняемой операции
show —installed — список установленных пакетов с описанием каждого
show —platform — сведения о PHP
—dry-run — репетиция выполнения команды. Может добавляться к командам install и update. Эмулирует выполнение команды без её непосредственного выполнения. Необходим для того, чтобы проверить пройдёт ли установка пакетов и зависимостей успешно.
remove — удаление пакета. Точная противоположность require
Синтаксис composer.json
Именование пакетов и варианты описания пакетов
Имя пакета состоит из двух частей разделёных косой чертой: названия поставщика (vendor name) и названия библиотеки.
Если пакет оформлен в соответствии со стандартом PSR-4, но опубликован не на packagist.org, а на github, то вместо версии пакета нужно прописать ветку и репозиторий для этого пакета:
Пример подключения библиотеки, которая лежит на github, но при этом не оформлена по стандарту PSR-4, а представляет из себя обыкновенное нагромождение файлов с классами и функциями.
Pqr/superlib — эта та самая «неправильная» библиотека.
В секции repositories для неё пишем такую конструкцию
Ключевой момент — секция autoload, здесь указываем нужные нам файлы с классами и функциями.
Структура библиотеки:
Соответственно в проекте вызов getCurrentTime() будет выглядеть примерно так:
$timer = new pqr\superlib\TimerClass;
echo $timer->getCurrentTime();
Версионирование
При указании допустимых версий пакетов можно использовать точное соответствие (1.2.3), диапазоны с операторами сравнения (<1.2.3), комбинации этих операторов (>1.2.3 <1.3), “последняя доступная” (1.2.*), символ тильды (~1.2.3) и знак вставки (^1.2.3).
Указание тильды (~1.2.3) будет включать в себя все версии до 1.3 (не включительно), так как в семантическом версионировании это является моментом внедрения новых функциональных возможностей. В данном случае будет получена последняя из стабильных минорных версий. Т.е. будет меняться только последняя цифра — 1.2.5, 1.2.8 и тд.
Указание знака вставки (^1.2.3) буквально означает “опасаться только критических изменений” и будет включать в себя версии вплоть до 2.0. Применительно к семантическому версионированию, изменение мажорной версии является моментом внесения в проект критических изменений, так что версии 1.3, 1.4 и 1.9 подходят, в то время как 2.0 — уже нет.
Т.е. не меняется только первая цифра.
Тильда: ~1.2.3 — это самый распространённый и безопасный способ указания версии.
Файл composer.lock
Файл composer.lock сохраняет текущий список установленных зависимостей и их версии. Таким образом, на момент, когда версии зависимостей уже будут обновлены (команда update), другие люди, которые будут клонировать ваш проект, получат те же самые версии. Это позволяет убедиться в том, что каждый, кто получает ваш проект, имеет пакетное окружение, идентичное тому, которое вы использовали при разработке, и помогает избежать ошибок, которые могли бы возникнуть из-за обновления версий.
При каждом выполнении команды update версии обновлённый пакетов прописываются в composer.lock. Этот файл загоняется под систему контроля версий и при установке пакетов на новом сервере поставятся именно те версии пакетов, которые прописаны в этом файле. При выполнении команды install composer будет в первую очередь опираться на composer.lock. Таким образом на разных серверах будет гарантированно установлено одинаковое пакетное окружение с точки зрения версий.
Также, файл composer.lock содержит хэш файла composer.json.
И если json файл был отредактирован, то composer выдаст предупреждение, что файл lock не соответствует json файлу.
В таком случае, нужно выполнить команду composer update —lock, которая обновит composer.lock.
Отличие install от update в контексте использования composer.lock
Команда composer install делает следующее:
Проверяет существует ли composer.lock:
— если нет, резолвит зависимости и создаёт его
— если composer.lock существует, устанавливает версии, указанные в нём
Команда composer update:
— Проверяет composer.json
— Определяет последние версии на основе указанных в этом файле
— Устанавливает последние версии
— Обновляет composer.lock в соответствии с установленными
Пример использования с точки зрения создателя проекта
Имеется проект без установленных пакетов
Поставили несколько библиотек
У нас сформировался composer.json с информацией о пакетах
Мы можем его дополнить и распространять проект с этим файлом
Другой пользователь скачал наш проект, выполнил install и у него в проекте развернулись все нужные пакеты
Пример использования с точки зрения создателя пакета
Для примера я создал класс с методом, который будет выводить URL текущей страницы
Класс оформлен как пакет и залит на github.
Регистрируюсь на оф. репозитории и добавляю пакет, указывая ссылку на репозиторий, в котором он лежит
Всё, пакет добавлен
Проверяю работоспособность пакета
Пакет поставился, вот наш класс:
Composer и PhpStorm
Конфигурирование возможности редактирования Composer пакетов
Если опция выставлена, то нельзя будет так просто взять и отредактировать файлы внутри vendor/*/*
Нюансы, тонкости, сложные ситуации
Ошибка: Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them. Nothing to install or update
Решение: composer update —lock
Долго выполняется update при большом числе установленных библиотек
Composer проверяет все зависимости пакетов, а если пакетов много — то это надолго.
Решение: если нужно обновить только одну библиотеку, то указываем её явно:
composer update package/name
Ещё можно добавлять параметр «—prefer-dist» (хотя, по идее, он должен быть включён по умолчанию), тогда composer будет стараться ставить библиотеку из zip-архива, а не клонировать репозиторий.
The «****.json» file could not be downloaded: failed to open stream: HTTP request failed!
Composer пытается дергануть пакет по HTTP, хотя нужно по HTTPS
Решение: composer config —global repo.packagist composer packagist.org
The package is not available in a stable-enough version according to your minimum-stability setting
see for more details.
Стабильной версии у пакета нет, а установка dev версии не разрешена в конфиге.
Решение: либо выставить параметр «minimum-stability»: «dev» и «prefer-stable»: true, чтобы ставить по возможности стабильные версии, либо — если это ваш собственный пакет — создать тег с версией (стикер stable в readme на github должен показывать версию)
История развития и ключевые изменения
— первый релиз состоялся 1 марта 2012 и весь 2012 инструмент активно развивается
— январь 2014 — реализована автозагрузка на основе PSR-4
— март 2016 — вышла в свет бета-версия (1.0.0-beta1). Добавлены команды show —tree для отображения установленных пакетов в виде дерева, why-not — показывает почему нельзя уставить пакет, update —interactive — позволяет выбрать какие пакеты обновлять, а также множество других улучшений и исправлений.
— 4 апрель 2016 — был представлен первый стабильный релиз Composer — 1.0.0
Декабрь 2014 — один из ключевых коммитов в репозиторий composer
github.com/composer/composer/commit/ac676f47f7bbc619678a29deae097b6b0710b799
Суть изменения — отключён сборщик мусора
Ссылки
Офсайт: getcomposer.org
Официальный репозиторий пакетов: packagist.org
Репозиторий composer: github.com/composer/composer
Отличный большой туториал по использованию Composer: daylerees.com/composer-primer
Список команд и подробный пример файла composer.json: composer.json.jolicode.com
Composer — PHP: Настройка окружения
Ключевая программа в экосистеме PHP — Composer. Она выполняет очень много функций, которые не представляется возможным рассмотреть в рамках текущего курса. Общая рекомендация состоит в том, чтобы периодически посматривать на её команды и изучать информацию по ним. Ключевая задача, которую решает Composer — управление зависимостями, и именно о ней мы поговорим. Процесс установки самого Composer для каждой операционной системы описан в официальном руководстве:
- https://getcomposer.org/download/
- https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos
- На MacOS можно установить с помощью Homebrew: brew install composer
Для успешной установки и настройки Composer, необходимо хотя бы немного разбираться с работой командных интерпретаторов. Рекомендуем пройти соответствующий курс на Хекслете, если вы этого ещё не сделали
Кроме самого Composer установите следующие программы, используя пакетный менеджер вашей операционной системы:
Убедитесь, что Composer работает:
\/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/ / /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ / \____/\____/_/ /_/ /_/ .___/\____/____/\___/_/ /_/ Composer version 1.8.0 2018-12-03 10:31:16 # Тут много вывода
Запуск Composer без аргументов, выведет весь список доступных команд с их описанием. Пробегитесь по ним, чтобы сформировать первое впечатление.
Практически с самого зарождения программирования (когда код стал храниться в памяти компьютера), появилась идея повторного использования кода не только в рамках одного проекта, но и в других проектах. Например, функции для работы с датами, математическими формулами, всевозможными расчётами одни и те же во всех проектах, где они требуются. Подобное переиспользование приводит к резкому возрастанию производительности. Программисты современности могут сосредоточиться на решении уникальных задач бизнеса, вместо создания своих велосипедов для решения инфраструктурных задач. Особенно просто стало жить во времена Git и GitHub.
Первоначально общий код выносился в файлы, которые программисты часто держали на своих собственных компьютерах и копировали из проекта в проект. Такой способ обладает рядом существенных недостатков:
- Сложно передать другим
- У каждого своя собственная копия одних и тех же решений (немного разных решений)
- Доработкой занимается только автор
- В сумме много разных копий без возможности быстрого обновления
- Из-за того, что код копируется прямо в другой проект, он, как правило, модифицируется и становится специфичным
Если использовать Git, то часть проблем решается автоматически. Мы можем сказать, что набор общих файлов называется «библиотека», а конечные проекты начинают использовать библиотеки как написанные нами, так и сторонними разработчиками. Но тут возникает следующая сложность — когда таких библиотек становится много, то у них также появляется общий код более низкого уровня. Например, финансовые библиотеки могут использовать функции для преобразования валют. Чтобы подобный код не дублировался, хочется его вынести в общее место. Этот процесс может продолжаться бесконечно. Одни библиотеки зависят от других, те в свою очередь от третьих и так далее. С точки зрения переиспользования кода всё хорошо, большое число маленьких библиотек, решающих всевозможные задачи, позволяет быстро двигаться вперёд, но с точки зрения управления появляются проблемы:
- Необходимо ввести понятие «версия», а библиотеки начинают зависеть не только друг от друга, но и от версий друг друга. Почему это нужно? Очень просто. Предположим, что создатель библиотеки обновил её, изменив сигнатуры функций (другое число параметров, другие параметры, другой возврат), или, как говорят, сломал обратную совместимость. В такой ситуации наша первоначальная библиотека перестанет работать (если мы обновим вторую библиотеку), так как она рассчитывала на одно поведение зависимой библиотеки, а получила другое.
- Необходимо стандартизировать способ создания библиотек, только в таком случае станет возможным автоматизировать процесс их соединения без ручного управления. Скажу навскидку, типичный веб-проект может зависеть от сотни библиотек, которые в свою очередь зависят от других библиотек. Общее число зависимостей может легко перевалить за тысячу. Вручную управлять таким зоопарком не представляется возможным.
- Проблема, описанная выше, также требует наличия автоматизированного средства по управлению зависимостями. Обновлению, установке и удалению.
Всеми этими вопросами занимаются пакетные менеджеры. В большинстве языков пакетный менеджер поставляется прямо с самим языком, так как в современном мире сложно представить себе код, который не использует ни одной зависимости.
Терминология
В PHP используются следующие понятия.
Пакет — собственно, та самая библиотека, которую мы либо пишем, либо используем в проекте как зависимость.
Репозиторий (Registry) — хранилище пакетов PHP, которое называется Packagist . Каждый желающий может опубликовать пакет в Packagist, потратив буквально минуту времени, а остальные смогут его использовать. В хранилище, на текущий момент, сотни тысяч пакетов и их количество растёт. Исходный код пакетов, как правило, хранится на GitHub, но это не обязательно.
Глобальная установка пакетов
Многие пакеты в PHP представляют из себя законченные программы. Их можно установить и запустить как обычную утилиту командной строки. Эти пакеты ставятся в системные директории и не связаны с конкретным проектом.
Попробуем установить утилиту phpcs , которая анализирует код на соответствие стандартам. Инструкция по установке подобных пакетов обычно присутствует на странице репозитория на GitHub.
# Composer скачает исходный код этого пакета и положит его куда-то к себе. # Конкретный путь зависит от настроек и операционной системы composer global require 'squizlabs/php_codesniffer=*'
- global означает, что установка глобальная, то есть пакет ставится в операционную систему как обычная программа.
- Чтобы командный интерпретатор увидел программу, установленную глобально, нужно правильно настроить переменную окружения $PATH добавив в неё путь к исполняемым файлам Composer. Его можно узнать выполнив в терминале команду composer global config bin-dir .
Процесс установки занимает некоторое время, в течение которого видно как скачивается не только сам пакет, но и его зависимости. Дальше ничего делать не нужно, так как phpcs создан утилитой командной строки, он сразу готов к использованию.
# Как аргумент эта утилита принимает путь до файла или директории с исходным кодом # Здесь в качестве опции мы указываем также и стандарт PSR12 phpcs --standard=PSR12 path/to/file FILE: /home/hexlet/projects/test/test.php ------------------------------------------------------------------------------- FOUND 1 ERROR AFFECTING 1 LINE ------------------------------------------------------------------------------- 12 | ERROR | [x] Each imported trait must have its own "use" import statement ------------------------------------------------------------------------------- PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY ------------------------------------------------------------------------------- Time: 21ms; Memory: 6MB
Если что-то пошло не так, убедитесь что вы всё правильно настроили:
- Изучите вывод echo $PATH . Есть ли там путь до исполняемых файлов Composer.
echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/hex/.composer/vendor/bin
- Проверьте, все ли установилось командой which phpcs .
Ошибки
Во время установки пакетов, Composer может начать ругаться на различные ошибки. Например так:
for phar-io/manifest 1.0.x-dev -> satisfiable by phar-io/manifest[1.0.x-dev]. - phar-io/manifest 1.0.x-dev requires ext-dom * -> the requested PHP extension dom is missing from your system. Problem 2 - Installation request for phar-io/manifest dev-master -> satisfiable by phar-io/manifest[dev-master]. - phar-io/manifest dev-master requires ext-dom * -> the requested PHP extension dom is missing from your system. Problem 3 - Installation request for phpunit/php-code-coverage 7.0.x-dev -> satisfiable by phpunit/php-code-coverage[7.0.x-dev]. - phpunit/php-code-coverage 7.0.x-dev requires ext-dom * -> the requested PHP extension dom is missing from your system. Problem 4
Эти ошибки говорят нам о том, что устанавливаемые библиотеки хотят использовать PHP-расширение, которое не установлено в систему. Это прямо написано в выводе:
requires ext-dom * -> the requested PHP extension dom is missing from your system.
Когда вы встречаете такую ошибку, то первым делом нужно увидеть название расширения. В данном случае это dom. Затем нужно попробовать найти инструкцию, которая объяснит как установить это расширение в вашу операционную систему. Проще всего это сделать таким запросом: php install extension.
Проект
Composer – универсальный способ описывать любой код на PHP. Не важно с чем мы имеем дело, с библиотекой или с полноценным сайтом. В любом случае внутри будет Composer. Фактически, любой новый проект начинается не с написания кода, а с инициализации Composer. Для этого нужно запустить команду init. Она задаст несколько вопросов и на основе ваших ответов сформирует файл composer.json.
Если вы не понимаете значение некоторых вопросов, то смело жмите Enter, потом всё можно будет поправить.
command will guide you through creating your composer.json config. Package name (/) [hex/hex]: hex/example Description []: example package Author [, n to skip]: hex Minimum Stability []: Package Type (e.g. library, project, metapackage, composer-plugin) []: License []: Define your dependencies. Would you like to define your dependencies (require) interactively [yes]? n Would you like to define your dev dependencies (require-dev) interactively [yes]? n "name": "hex/example", "description": "example package", "authors": [ "name": "hex", "email": "hex@hexlet.io" > ], "require": <> > Do you confirm generation [yes]?
Когда вопросы закончатся, Composer покажет конечный результат в виде JSON. JSON — это текстовый формат для представления структурированных данных. Если вы не знакомы с ним, то не стоит переживать, формат это не язык программирования. Достаточно выучить несколько правил по формированию данных в виде JSON для того, чтобы чувствовать себя комфортно.
"name": "hex/example", "description": "example package", "authors": [ "name": "hex", "email": "hex@hexlet.io" > ], "require": <> >
Если вас всё устраивает, то Composer создаст файл composer.json. Именно этот файл является ключевым. Абсолютно всё, что касается зависимостей (и не только), полностью описывается в нём. С этого момента, все команды composer, которые непосредственно связаны с проектом (о них пойдёт речь далее), выполняются именно в той директории, в которой находится файл composer.json.
Имя пакета, записанное в composer.json, состоит из двух частей. Первая — vendor name, имя, под которым вы зарегистрированы в Packagist, вторая — project name. Причём vendor name уникален глобально (то есть все пользователи имеют своё собственное неповторимое имя), а вот project name должен быть уникален только в пределах vendor name.
Composer рекомендует именовать пакет словами в нижнем регистре и в качестве разделителя использовать дефис, например: dependency-injection.
Проблемы
Если в файле composer.json содержатся синтаксические ошибки, иными словами, есть нарушения правила форматирования JSON, то при попытке сделать что-то с проектом будут появляться подобные ошибки:
[Seld\JsonLint\ParsingException] "./composer.json" does not contain valid JSON Parse error on line 2: "name": "mokevnin/myproject", ---------^
Обычно любые сообщения с «неожиданными» (unexpected) символами или строками говорят о наличии синтаксической ошибки.
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
Composer часть 1. Зачем его использовать в PHP проектах и как с ним работать?

Software Engineer в Mobilunity, Преподаватель Компьютерной школы Hillel.
- 1. Как установить Composer
- 2. Установка — Linux/Unix/macOS
- 3. Установка — Windows
- 4. Синтаксис и опции Composer
- 5. Установка проекта на основе пакета
- 6. Установка пакетов
- 7. Обновление пакетов
- 8. Удаление пакетов
- 9. Сброс автозагрузки
- 10. Выводы
Язык программирования PHP стремительно развивается с каждым годом. Каждый месяц регистрируют десятки, а то и сотни библиотек для работы с PHP проектами. На сайте packagist указано, что с 2012 года было зарегистрировано более 330 тысяч библиотек. Буквально несколько запущенных команд в терминале — и любая из этих библиотек уже подключена к вашему проекту.
Звучит заманчиво, правда? И всё же, как это реализовать?
Именно Composer поможет справиться вам с такой задачей!
Composer PHP что это и как с ним работать?
Итак, Composer — менеджер пакетов для PHP. Этот инструмент позволяет не только устанавливать сторонние пакеты, но и обновлять их при выходе более новых версий. Также с помощью Composer можно легко создавать пакеты для своих библиотек.
Как установить Composer на хостинг
Composer можно установить локально, в директории проекта, или глобально. Установив Composer глобально, его можно использовать в любом проекте.
Подробную инструкцию по скачиванию инсталлятора можно прочитать по этой ссылке. После скачивания файла установки можем приступить к установке Composer.
Установка — Linux/Unix/macOS
Локально
После правильной загрузки и установки инсталлятора в директории проекта появится файл ‘composer.phar’.
Чтобы запустить Composer локально, достаточно выполнить команду в терминале, находясь в директории проекта.
php composer.phar
Глобально
Для того, чтобы сделать Composer глобальным и вызывать его из любой директории, достаточно выполнить команду в терминале:
mv composer.phar /usr/local/bin/composer
Теперь запустите composer, чтобы запустить менеджер пакетов вместо php composer.phar.
Установка — Windows
Для того, чтобы установить Composer глобально для ОС Windows, надо выполнить следующие шаги:
Создайте новый composer.bat файл рядом с composer.phar:
C:\bin> echo @php "%~dp0composer.phar" %*>composer.bat
PS C:\bin> Set-Content composer.bat '@php "%~dp0composer.phar" %*'
Добавьте каталог в переменную среды PATH, если это еще не сделано. Для получения информации об изменении переменной PATH, смотрите эту статью.
Закройте текущий терминал. В новом окне терминала введите следующую команду для проверки работы Composer:
C:\Users\username>composer -V Composer version 2.0.12 2021-04-01 10:14:59
Синтаксис и опции Composer
Первое, что необходимо сказать, Composer — это консольная утилита, у неё нет графического интерфейса, однако это не делает её хуже. Её синтаксис довольно прост, а посмотреть все опции и команды можно введя команду ‘composer’ в терминале. Список всех опций и команд можно рассмотреть ниже:
- -h — вывести справку по утилите
- -q — сокращённый вариант вывода
- -V — показать версию утилиты
- -n — не задавать интерактивные вопросы
- -v, -vv,-vvv — настройка подробности вывода
- -d — использовать указанную рабочую директорию
Список часто используемых команд:
- archive — архивирует текущий проект в качестве библиотеки для отправки в сеть
- check-platform-reqs — проверяет, соблюдены ли системные требования
- create-project — создаёт проект на основе пакета в указанную директорию
- depends — выводит зависимости пакета
- dump-autoload — обновляет систему автозагрузки классов
- exec — позволяет выполнять скрипты из установленных пакетов
- init — создаёт пустой проект в текущей папке
- list — выводит список доступных команд
- outdated — выводит список пакетов, для которых есть обновления
- prohibits — выводит названия пакетов, которые мешают установить указанный пакет
- search — поиск пакетов в репозиториях
- self-update — обновление Composer до последней версии, работает только при локальной установке
- show — информация о пакете
- update — обновляет все пакеты до самой актуальной версии
Установка проекта на основе пакета
Скорее всего, для будущих проектов, вы будете использовать фреймворки, чтобы иметь базовый функционал из коробки. В таких случаях вам понадобится разворачивать проект на основе существующего пакета, Composer скачает пакет из репозитория и просто распакует его в нужную вам директорию.
Для этого используйте команду create-project, например:
composer create-project laravel/laravel app_dir
- composer — обращение к утилите
- create-project — команда
- laravel/laravel — пакет фреймворка laravel
- app_dir — директория, в которую Composer распакует указанный пакет
Установка пакетов
Чтобы установить пакет с помощью Composer, необходимо использовать команду require. Утилита установит указанный вами пакет и запишет его в файл composer.json.
Например, установим пакет для удобного вывода переменных:
composer require larapack/dd
Также можно указать опцию —dev перед написанием названия пакета, чтобы пакет был обязателен, но использовался только в разработке.
Все доступные пакеты можно просмотреть на сервисе Packagist.
Обновление пакетов
Пакеты необходимо обновлять во избежание уязвимостей в проектах и устранения старых проблем со стороны подключенных библиотек.
Для обновления всех пакетов достаточно ввести команду update:
composer update
composer update –dev
Удаление пакетов
Для удаления пакета необходимо ввести команду remove и указать нужный пакет, также можно добавить опцию –dev, если это пакет для разработчиков.
composer remove larapack/dd
Также можно убрать ненужные пакеты в файле composer.json и запустить команду на обновление.
Сброс автозагрузки
Composer из коробки может выступать в роли автозагрузчика классов. Он использует стандарт PSR-4. Иногда случается, что классы закешировались, и новый класс не виден в проекте.
В таких случаях необходимо выполнить команду сброса:
composer dump-autoload
composer du
Выводы
Composer — это достаточно мощная утилита для того, чтобы сделать вашу работу с проектом комфортной. С её помощью вы легко сможете добавлять, обновлять и удалять необходимые вам пакеты. Также приятным бонусом является то, что утилита предоставляет автозагрузчик классов из коробки.
В следующей статье мы поговорим с вами об создании собственного пакета с помощью Composer и о том, как его добавлять на сервис packagist.
Рекомендуем публикацию по теме

- Composer часть 2. Создание собственной библиотеки. Загрузка на Packagist читать 10 мин

Software Engineer в Mobilunity, Преподаватель Компьютерной школы Hillel.
Composer: пакетный менеджер для PHP
Пакетный менеджер — это программа для поиска и установки библиотек по их названию.
Пакетный менеджер избавляет от необходимости самостоятельно искать библиотеки, скачивать, распаковывать, разрешать зависимости — все эти задачи он берёт на себя.
Что умеет пакетный менеджер?
- Находить библиотеки по имени, скачивать и распаковывать их;
- Автоматически скачивать и устанавливать зависимости для каждой библиотеки;
- Подключать классы библиотек внутри сценариев;
- Обновлять библиотеки вместе с зависимостями.
Composer: пакетный менеджер для PHP
В PHP для управления библиотеками используют пакетный менеджер Composer. Это мощный и удобный инструмент, он легко справляется со всеми задачами по установке и разрешению зависимостей у библиотек.
Как начать работу с Composer:
- Скачать Composer;
- Инициализировать его в проекте;
- Подключить файл автозагрузки в нужный сценарий;
- Установить нужную библиотеку.
Установка
Скачайте Composer для Windows. Это обычный установочный файл с режимом «мастера», который проведёт вас по процессу установки. В конце проверьте работу, открыв командную строку. Если выполнить команду composer , то увидите длинный перечень его возможностей.
Инициализация в проекте
Перейдём в рабочую папку проекта (если вы установили OpenServer в стандартную папку, то, например, так: cd C:\ospanel\domains\localhost ). Выполним последовательно команды composer init и composer install . На этом инициализация закончена. В проекте появилась новая папка с именем vendor .
Подключение сценария автозагрузки
Composer упрощает не только установку библиотек, но и их использование. Он подключает все необходимые файлы классов библиотеки. За это отвечает специальный сценарий autoload.php — единственный файл, который необходимо подключить для использования любых библиотек.
autoload.php использует механизм «автозагрузки». Он перехватывает обращение к классам библиотек и подключает все необходимые сценарии «на лету».
Чтобы это всё работало, подключите autoload.php в вашем сценарии:
require_once "vendor/autoload.php";
Установка библиотеки из Composer
Composer скачивает и устанавливает библиотеки по их имени. Чтобы узнать имя библиотеки, перейдите на её сайт, и найдите в описании имя. Например, название одной из библиотек: fzaninotto/faker
Для установки библиотеки введите команду composer require . Composer загрузит и установит библиотеку в папку vendor . Останется подключить установленную библиотеку в сценарии и можно её использовать.
Подключение библиотеки в сценариях
Рассмотрим подключения и использования на примере библиотеки для валидации форм — GUMP . Установим её командой: composer require wixel/gump .
Подключим библиотеку в сценарии, где происходит валидация формы:
'required|valid_email', 'password' => 'required|min_len,8', 'login' => 'required|alpha_numeric', 'phone' => 'phone_number' ]; $gump = new GUMP('ru'); $gump->validation_rules($rules); $validated_data = $gump->run($_POST);
Подключаем универсальный файл автозагрузки, который отвечает за подключение классов библиотеки: vendor/autoload.php .
Затем создаём новый объект валидатора и вызываем его методы для передачи правил валидации и проверки формы. Всё готово.
«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.
Читать дальше

Как работает протокол HTTP
HTTP был разработан в 1990-х годах для создания первого интерактивного текстового веб-браузера. За эти годы протокол менялся и совершенствовался, становился более гибким и постепенно превратился в современный интернет. В статье рассмотрим принцип работы протокола и что важно знать о нём разработчику.
- 8 февраля 2023

10 популярных функций в MYSQL, которые вам нужно знать
Без лишних слов принесли вам некоторые популярные функции MySQL, без которых вы точно не обойдётесь в работе.
- 17 января 2023

Подключение файлов в PHP. Метод require()
Способность вызывать сценарий из отдельного файла по его имени называется в PHP подключением файлов. Подключают PHP-сценарии, любые текстовые файлы или HTML-страницы.
- 21 ноября 2022

Массивы в PHP
Массив — это ещё один тип данных, вроде числа или строки. Главное отличие массива от остальных типов данных заключается в его способности хранить в переменной больше одного значения. В предыдущих примерах имя переменной всегда ассоциировалось только с одним значением:
- $name = «Иннокентий»
- $age = 42
А если мы хотим узнать не только пол, имя и возраст пользователя, но и, допустим, любимые сериалы? Очень непросто назвать один самый любимый сериал, а вот вспомнить несколько — намного легче. Сохранение в переменную-массив нескольких значений выглядит так:
$fav_shows = ["game of thrones", "american horror story", "walking dead"];
В этом примере мы сохранили в переменной $fav_shows сразу три значения. Но сохранить эти данные — это только половина дела. Как с ними потом работать? Уже знакомый вам способ вывода переменной на экран не будет работать с массивами:
Так увидеть список любимых сериалов не получится. Дело в том, что массив — это не обычная переменная. Массив хранит не простые типы, вроде текста или чисел (их ещё называют «скалярными типами»), а более сложную структуру данных, поэтому здесь нужен особый подход.
Внутри массива у каждого значения есть адрес, по которому к нему можно обратиться. Такой адрес называется индексом. Индекс — это просто порядковый номер значения внутри массива. Индексация начинается с нуля, так что первый элемент получает индекс — 0 , второй — 1 , и так далее.
Чтобы получить определенный элемент массива, необходимо знать его индекс (ключ). Напечатаем названия всех сериалов из массива через запятую:
Теперь можно дать определение массива: Массив — это совокупность множества элементов вида «ключ: значение».
Массивы позволяют перезаписывать существующие значения и добавлять новые. Добавить новое значение в массив можно так:
$fav_shows[] = "the big bang theory";
Новый элемент автоматически получит индекс равный максимальному индексу из существующих + 1. «Теория большого взрыва» сохранится в массиве под индексом 3 .
Если нам перестал нравиться один из сериалов, так как новый сезон оказался очень плох или появился новый фаворит, значения в массиве можно заменить. Чтобы вычеркнуть старое значение и заменить его новым, нужно присвоить новое значение любому из существующих в массиве индексов:
$fav_shows[4] = "fargo";
Для полного удаления (без замены на другое) значения по его индексу существует функция unset :
unset($fav_shows[4]);
- 10 ноября 2022

Синтаксис PHP
Разберёмся, из чего состоит любой язык программирования.
У каждого языка есть правила и конструкции, следуя которым мы выражаем мысли и делаем их понятными для другого человека. В программировании всё точно так же. Но вместо человеческого языка мы используем язык программирования PHP, а в роли нашего собеседника выступает PHP-интерпретатор. Поэтому, чтобы выразить свою мысль, мы должны сделать её понятной для интерпретатора.
- 27 октября 2022
Массивы $_POST и $_GET в PHP. Обработка форм
Формы — это часть языка HTML. Формы нужны для передачи данных от клиента на сервер. Чаще всего формы используются для регистрации пользователей, заполнения анкет, оформления заказа в интернет магазине, и так далее.
Через формы можно отправлять как простую текстовую информацию, так и файлы.
Большую часть времени программирования на PHP вы будете так или иначе работать с формами и данными из них.
HTML описывает то, из каких элементов состоит форма, и как она выглядит. Но без принимающей стороны, то есть сервера, который принимает эти данные и обрабатывает их нужным образом, создавать формы нет никакого смысла.
PHP содержит множество средств для работы с формами. Это позволяет очень просто решать типичные задачи, которые часто возникают в веб-программировании:
- Регистрация и аутентификация пользователя;
- Отправка комментариев на форумах и социальных сетях;
- Оформление заказов.
Практически любой современный сайт содержит как минимум несколько разных HTML-форм.
- 20 октября 2022

Учебник по PHP
- Знакомство с языком
- Что такое PHP
- Синтаксис PHP
- Массивы
- Циклы
- Функции
- Шаблонизация и подключение файлов
- Подключение файлов
- Шаблонизация
- Протокол HTTP и формы
- Протокол HTTP
- Формы
- Уязвимости
- Идентификация пользователя на сайте
- Аутентификация пользователя
- Базы данных
- База данных
- SQL
- MySQL в PHP
- Безопасность в MySQL
- Объекты и использование библиотек
- Объекты
- Библиотеки
- Composer
- 10 сентября 2022

Протокол HTTP и работа с заголовками
Весь современный веб построен на модели взаимодействия клиента и сервера. Как она работает:
- браузер пользователя (клиент) отправляет на сервер запрос с адресом сайта (URL);
- сервер получает запрос и отдаёт клиенту запрошенный контент.
Для реализации процесса используется универсальный протокол HTTP.
- 10 сентября 2022

Защита от SQL-инъекций
Внедрение SQL-кода (SQL инъекция) — один из распространённых способов взлома сайтов, работающих с базами данных. Способ основан на внедрении в запрос произвольного SQL-кода. Внедрение SQL позволяет хакеру выполнить произвольный запрос к базе данных (прочитать содержимое любых таблиц, удалить, изменить или добавить данные).
Атака этого типа возможна, когда недостаточно фильтруются входные данные при использовании в SQL-запросах.
- 10 сентября 2022

Объекты и классы в PHP
Объекты в PHP — это просто ещё один тип данных. Объект позволяет хранить в переменной набор из свойств и их значений, а также встроенные функции. Это делает объекты похожими по своей структуре на ассоциативные массивы. Но отличие от массивов всё-таки есть, и при этом достаточно важное — объекты могут иметь внутреннее состояние.
- 10 сентября 2022
