Подтвердить что ты не робот

Форсировать композитор, чтобы требовать версию 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 не может быть найден в любой версии, в названии пакета может быть опечатка". Ошибка.

Любые идеи? Спасибо заранее

4b9b3361

Ответ 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, я решил опубликовать его здесь. Надеюсь, это поможет кому-то, кто попал сюда, как я.