у нас есть сочетание разных версий 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 не может быть найден в любой версии, в названии пакета может быть опечатка». Ошибка.
Есть идеи? заранее спасибо
На мой взгляд, сомнительно сказать, что вы развиваетесь с новейшим 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 сообщает, что пакет не найден (не сообщая, что он видел пакеты, но их нужно было игнорировать из-за ограничение версии).
Вероятно, есть три очевидных пути:
Снизьте свою среду разработки до той версии, которую вы действительно используете. Если используется более одного: самый старый. Таким образом, будут согласованы любые требования для версий PHP. Затем запустите composer update
, и все готово.
Обновите производственную среду. Не нуждается в дальнейших объяснениях, но я должен упомянуть, что вы не только получаете очень много очень хороших функций PHP, но и получаете значительное увеличение производительности, потому что PHP 5.5 действительно намного быстрее, чем 5.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": { ... } }
Как насчет того, чтобы попробовать оператора тильды?
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", ..... },