Что такое Composer и зачем он нужен
Composer — стандартный менеджер зависимостей для PHP. Он позволяет подключать сторонние библиотеки (Laravel, Symfony, Guzzle, PHPUnit и тысячи других) одной командой, управлять версиями пакетов и автоматически подключать все классы через автозагрузчик.
Установка Composer на Ubuntu/Debian
# Скачиваем установщик
curl -sS https://getcomposer.org/installer -o /tmp/composer-setup.php
# Проверяем хэш (актуальный хэш на getcomposer.org/download)
php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer
# Проверяем установку
composer --version/usr/local/bin/. Для установки только для текущего пользователя — в ~/.local/bin/.Обновление Composer
composer self-update
# Откат к предыдущей версии:
composer self-update --rollbackСоздание нового проекта
# Новый Laravel проект:
composer create-project laravel/laravel myapp
# Новый Symfony проект:
composer create-project symfony/skeleton myappОсновные команды Composer
| Команда | Описание |
|---|---|
composer install | Установить зависимости из composer.lock |
composer update | Обновить все зависимости до последних версий |
composer require vendor/package | Добавить новый пакет |
composer remove vendor/package | Удалить пакет |
composer dump-autoload -o | Перегенерировать оптимизированный автозагрузчик |
composer show | Список установленных пакетов |
Структура composer.json
{
"name": "mycompany/myapp",
"require": {
"php": "^8.1",
"guzzlehttp/guzzle": "^7.0",
"monolog/monolog": "^3.0"
},
"require-dev": {
"phpunit/phpunit": "^10.0"
},
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}Оптимизация для production
На production-сервере всегда запускайте Composer с оптимизацией автозагрузчика:
composer install --no-dev --optimize-autoloader --no-interaction
# или
composer dump-autoload --optimize --no-devcomposer update на production — это может сломать приложение обновлением несовместимых версий. Обновляйте зависимости локально, фиксируйте composer.lock в git и деплойте через composer install.Работа без интернета (--prefer-dist)
composer install --prefer-dist --no-scriptsРеальные ошибки Composer
Requirements could not be resolved
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Root composer.json requires php-ext-intl but it is not present.Composer проверяет платформенные требования по тому PHP, из-под которого сам запущен (обычно это CLI), а не по тому, что реально работает в PHP-FPM на проде. Установили расширение только для FPM — Composer всё равно откажется работать, пока его не увидит CLI-версия.
Allowed memory size exhausted при install
PHP Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 20480 bytes) in phar:///usr/local/bin/composer/src/Composer/DependencyResolver/Solver.php
Check https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors for more info on how to handle out of memory errors.Сам Composer — это PHP-скрипт, и на него действует тот же memory_limit, что и на остальной код. Решение проекта с большим деревом зависимостей может требовать больше памяти, чем разрешено по умолчанию.
composer.lock устарел
Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. It is recommended that you run "composer update" or "composer update <package name>".Это предупреждение, а не отказ: composer install всё равно отработает по старому composer.lock. Опасность в другом — на CI это предупреждение легко проглядеть в потоке логов, и в прод уедут версии пакетов, не совпадающие с тем, что реально тестировали.
Когда команды из этой статьи не подходят
- Разработка ведётся без доступа к packagist.org (закрытый контур, изолированная сеть) — нужен приватный зеркальный репозиторий (Satis, Private Packagist), обычные команды
requireпросто зависнут в ожидании сети. - Композер CLI и версия PHP в продакшен-FPM расходятся — платформенная проверка при установке пройдёт, а код на проде упадёт из-за несовместимого синтаксиса или недостающей функции.
- Флаг
--ignore-platform-reqs«лечит» ошибку требований, но переносит проблему несовместимости прямо на прод — используйте его только осознанно и временно.
Проверка результата
# Снять полную диагностику окружения Composer
composer diagnose
# Проверить синтаксис и корректность composer.json
composer validate --strict
# Увеличить лимит памяти только для этого запуска
COMPOSER_MEMORY_LIMIT=-1 composer installcomposer validate --strict находит не только синтаксические ошибки JSON, но и стилистические проблемы вроде незафиксированных версий зависимостей — полезно прогонять его перед каждым релизом.