Выбор ответа Senior Composer и PSR обновлено

Версия PHP на сервере и в composer.lock

Вопрос

Локально PHP 8.3, на сервере 8.2. После composer update деплой падает из-за пакета, требующего PHP 8.3. Как предотвратить?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Задать config.platform.php = 8.2.x, чтобы решатель учёл сервер. Composer подбирает версии под текущее окружение.

Варианты ответа

  1. Удалить composer.lock, чтобы сервер сам подобрал версии
  2. Задать config.platform.php = 8.2.x, чтобы решатель учёл серверправильный ответ
  3. Запускать composer install --ignore-platform-reqs на сервере
  4. Обновлять PHP на сервере при каждом обновлении пакетов

Разбор

Composer подбирает версии под текущее окружение. Настройка config.platform говорит ему считать, что PHP (и расширения) такой версии, как на продакшене, и lock-файл получается совместимым. Проверка composer check-platform-reqs в CI ловит расхождения. Игнорирование требований прячет проблему до первой ошибки в рантайме, а удаление lock-файла ломает воспроизводимость.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.