Форсировать композитор, чтобы требовать версию PHP между версией X и версией Y

у нас есть сочетание разных версий PHP, работающих на ваших серверах (макс. 5.3.5) и машин разработки (макс. 5.5.9).

Теперь мы столкнулись с проблемой, что мы сделали «обновление для композитора», чтобы получить последнюю версию некоторых внешних Bundles. Поскольку ваш композитор.json выглядит

"require": { "php": ">=5.3.3", ..... }, 

мы получаем несколько пакетов, требующих PHP 5.5. Нет проблем на наших машинах dev, но на сервере 🙁

Есть ли возможность сказать композитору, что требуется версия PHP между 5.3.3 и 5.3.5? Или максимальная версия?

Я пытался

 "require": { "php": ">=5.3.3, <=5.3.5", ..... }, 

а также

 "require": { "php": "<=5.3.5", ..... }, 

но и то, и другое не получилось. Я получаю «Запрошенный пакет php не может быть найден в любой версии, в названии пакета может быть опечатка». Ошибка.

Есть идеи? заранее спасибо

Solutions Collecting From Web of "Форсировать композитор, чтобы требовать версию PHP между версией X и версией Y"

На мой взгляд, сомнительно сказать, что вы развиваетесь с новейшим PHP и работаете с очень устаревшей версией. Из этого возникнет множество возможных проблем, а не только из-за исправлений безопасности, которые вам не хватает, но что еще более важно из-за исправлений PHP-ошибок, которые были введены в основном в версиях 5.3.9 и 5.3.23, что изменяет поведение PHP в некоторых подробности довольно принципиально. Не говоря о риске случайного использования функций 5.4 или 5.5.

И действительно, нет способа заставить Composer справиться с этой ситуацией. Версия PHP, используемая при запуске composer update определяет разрешение зависимостей, на которые влияет PHP-версия и установленные расширения PHP.

Вы не можете определить, что пакет должен использоваться только для версий PHP между 5.3.3 и 5.3.5, если PHP, который вы используете для обновления, не соответствует этой потребности в версии. Поскольку используемая версия PHP превышает ограничение на верхнюю версию, такой пакет не подходит для выполнения требования к версии, а Composer сообщает, что пакет не найден (не сообщая, что он видел пакеты, но их нужно было игнорировать из-за ограничение версии).

Вероятно, есть три очевидных пути:

  1. Снизьте свою среду разработки до той версии, которую вы действительно используете. Если используется более одного: самый старый. Таким образом, будут согласованы любые требования для версий PHP. Затем запустите composer update , и все готово.

  2. Обновите производственную среду. Не нуждается в дальнейших объяснениях, но я должен упомянуть, что вы не только получаете очень много очень хороших функций PHP, но и получаете значительное увеличение производительности, потому что PHP 5.5 действительно намного быстрее, чем 5.3.

  3. Добавьте конфигурацию «platform.php» в глобальную или композиционную композицию project.json. Это покажет, что Composer переопределит версию PHP, на которой запущен Composer, и вместо этого рассчитывает зависимости с этой другой версией PHP. composer config -g platform.php 5.3.5 для глобальных настроек (повлияет на все последующие запуски Composer), без -g для локальной настройки (повлияет только на работу Composer в этом проекте, если вы разрабатываете более одного проекта с различным производством версии PHP).

Поскольку параметр config в composer.json доступен. Вы могли бы что-то вроде этого:

 { "name": ".../...", "config": { "platform": { "php": "5.3.5" } }, "require": { ... } } 

https://getcomposer.org/doc/06-config.md#platform

Как насчет того, чтобы попробовать оператора тильды?

Tilde Operator ~ 1.2 Очень полезен для проектов, которые следуют за семантическим версированием. ~ 1.2 эквивалентно> = 1.2, <2.0. Подробнее см. Следующий раздел ниже.

Следующий значительный выпуск (Tilde Operator) #

Оператор ~ лучше всего объясняется примером: ~ 1.2 эквивалентен

= 1.2, <2.0, а ~ 1.2.3 эквивалентно> 1.2.3, <1.3. Как вы можете видеть, это в основном полезно для проектов, связанных с семантическим версированием. Общее использование будет означать минимальную младшую версию, на которую вы зависите, например ~ 1.2 (что позволяет все, вплоть до 2.0, но не включая). Поскольку теоретически не должно быть обратных разрывов совместимости до 2.0, это хорошо работает. Другой способ взглянуть на это состоит в том, что использование ~ задает минимальную версию, но позволяет последним указанным цифрам идти вверх.

Примечание. Несмотря на то, что 2.0-beta.1 строго до 2.0, ограничение версии, например ~ 1.2, не будет устанавливать его. Как сказано выше, 1.2 означает, что .2 может меняться, но часть 1. фиксирована.

Примечание. Оператор ~ имеет исключение по своему поведению для основного номера выпуска. Это означает, например, что ~ 1 – это то же самое, что и ~ 1.0, поскольку оно не позволит увеличить большее число, пытаясь сохранить обратную совместимость.

Попробуйте это (удалите запятую):

 "require": { "php": ">=5.3.3 <=5.3.5", ..... },