К основному содержимому

Composer: установка и управление зависимостями PHP

PHP · 19.04.2026 · 3 мин чтения
Иллюстрация к статье «Composer: установка и управление зависимостями PHP на сервере»

Что такое 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
Для глобальной установки (доступна всем пользователям) размещайте composer в /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-dev
Никогда не запускайте composer 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 install

composer validate --strict находит не только синтаксические ошибки JSON, но и стилистические проблемы вроде незафиксированных версий зависимостей — полезно прогонять его перед каждым релизом.

Статья помогла?
← Назад в базу знаний Задать вопрос поддержке