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

Какие Идеи? Заранее спасибо

5 56

5 ответов:

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

и действительно нет никакого способа заставить композитора справиться с этой ситуацией. Версия 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. Добавить площадку".php " конфигурация для глобального или проекта композитор.формат JSON. Это подскажет композитору переопределить версию PHP под управлением самого композитора и вместо этого вычислить зависимости с этой другой версией PHP. composer config -g platform.php 5.3.5 для глобальной настройки (повлияет на все дальнейшие запуски композитора), без -g для локальной настройки (будет влиять только на операции композитора в этом проекте, если вы разрабатываете более одного проекта с различными производственными версиями PHP).

начиная с параметра конфигурации в composer.JSON-это доступно. Вы могли бы что-то вроде этого:

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

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

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

оператор Тильды ~1.2 очень полезен для проектов, которые следуют семантическому версионированию. ~1.2-это эквивалентный >=1.2,

Следующий Значительный Релиз (Оператор Тильда)#

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

=1.2,=1.2.3,

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

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

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

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

удалить композитор.замок и продавец до композитор.json

"config": {

    "platform": {
        "php": "7.0"
    }

},

и, наконец, выполните команду композитор установить