Форсировать композитор, чтобы требовать версию PHP между версией X и версией Y
у нас есть сочетание разных версий PHP, работающих на ваших серверах (макс. 5.3.5) и машин для разработки (макс. 5.5.9).
Теперь мы столкнулись с проблемой, что мы сделали "обновление для композитора", чтобы получить последнюю версию некоторых внешних связок.
Поскольку ваш композитор .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 не может быть найден в любой версии, в названии пакета может быть опечатка". Ошибка.
Любые идеи? Спасибо заранее
Ответы
Ответ 1
Я считаю сомнительным, что, по крайней мере, вы развиваетесь с новейшим 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" в глобальный или проект composer.json. Это покажет, что Composer переопределит версию PHP, на которой запущен Composer, и вместо этого рассчитывает зависимости с этой другой версией PHP. composer config -g platform.php 5.3.5
для глобальных настроек (будет влиять на все последующие запуски Composer), без -g
для локальных настроек (будет влиять только на операции Composer в этом проекте, если вы разрабатываете более одного проекта с разными версиями выпуска PHP).
Ответ 2
Так как доступен параметр config в composer.json. Вы могли бы что-то вроде этого:
{
"name": ".../...",
"config": {
"platform": {
"php": "5.3.5"
}
},
"require": {
...
}
}
https://getcomposer.org/doc/06-config.md#platform
Ответ 3
Как насчет попыток оператора тильды
Tilde Operator ~ 1.2 Очень полезен для проектов, которые следуют за семантическим управлением версиями. ~ 1.2 является эквивалентно > 1,2, 2,0. Для получения дополнительной информации прочитайте следующий раздел ниже.
Следующий существенный выпуск (оператор Тильды) #
Оператор ~ лучше всего объясняется примером:
~ 1.2 эквивалентно
= 1,2, < 2,0, тогда как ~ 1.2.3 эквивалентно до >= 1,2,3, 1,3. Как вы можете видеть, это в основном полезно для проектов, связанных с семантическим версированием. Общий использование будет означать минимальную младшую версию, на которую вы зависите, например ~ 1.2 (что позволяет что угодно, но не включая, 2.0). Поскольку теоретически не должно быть обратных разрывов совместимости до 2.0, это хорошо работает. Другой способ взглянуть на это состоит в том, что использование ~ указывает минимальную версию, но позволяет последним указанным цифрам идти вверх.
Примечание. Хотя 2.0-бета-1 строго предшествует
2.0, ограничение версии, подобное
~ 1.2 не будет устанавливать его. В виде
сказанное выше ~ 1.2 означает только
.2 может измениться, но
1. часть зафиксирована.
Примечание. Оператор ~ имеет исключение из своего поведения для основного номера версии. Это означает, что
Например, ~ 1 совпадает с
~ 1.0, так как это не позволит увеличить большее число, пытаясь сохранить
обратная совместимость.
Ответ 4
Попробуйте это (удалите запятую):
"require": {
"php": ">=5.3.3 <=5.3.5",
.....
},
Ответ 5
Удалите ваш composer.lock и каталог поставщика.
Теперь поместите платформу в composer.json
"config": {
"platform": {
"php": "7.0"
}
},
и наконец, запустите команду composer install
Ответ 6
Есть ли возможность сказать композитору, чтобы он требовал версию PHP между 5.3.3 и 5.3.5?
Да, вот оно:
Диапазон версий с переносами (-)
Инклюзивный набор версий. Частичные версии справа включают в себя подстановочный знак. Например, 1.0 - 2.0 эквивалентно> = 1.0.0 <2.1, так как 2.0 становится 2.0. *. С другой стороны, 1.0.0 - 2.1.0 эквивалентны> = 1.0.0 <= 2.1.0.
Пример: 1.0 - 2.0
https://getcomposer.org/doc/articles/versions.md#hyphenated-version-range-
PS Я попал сюда из поисковой системы, но не нашел здесь ответа, поэтому, когда я нашел его на сайте Composer, я решил опубликовать его здесь. Надеюсь, это поможет кому-то, кто попал сюда, как я.