web-dev-qa-db-fra.com

Force composer à exiger PHP Version entre la version X et la version Y

nous avons un mélange de différentes PHP versions fonctionnant sur vos serveurs (max 5.3.5)) et machines de développement (max 5.5.9).

Nous avons maintenant rencontré le problème que nous avons fait une "mise à jour du compositeur" pour obtenir la dernière version de certains bundles externes. Depuis votre composer.json ressemble à

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

nous obtenons des paquets qui nécessitaient PHP 5.5. Pas de problème sur nos machines de développement, mais sur le serveur :(

Existe-t-il une possibilité de dire composer demander une version PHP entre 5.3.3 et 5.3.5)? Ou une version maximale disponible?

J'ai essayé

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

et

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

mais les deux n'ont pas fonctionné. Je reçois un message "Le paquet demandé php n’a été trouvé dans aucune version, il peut y avoir une faute de frappe dans le nom du paquet." Erreur.

Des idées? Merci d'avance

59
Fabian

Je trouve pour le moins douteux que vous développiez avec la plus récente PHP disponible et que vous exécutiez la production avec une version très obsolète. Cela posera de nombreux problèmes, non seulement à cause des correctifs de sécurité qui vous manqueraient, mais surtout à cause de PHP corrections de bogues introduites principalement dans les versions 5.3.9 et 5.3.23. cela modifie fondamentalement le comportement de PHP dans certains détails. Ne parlez pas du risque d'utiliser accidentellement les fonctionnalités de 5.4 ou 5.5.

Et il n’ya vraiment aucun moyen de forcer Composer à gérer cette situation. La version PHP utilisée lors de l'exécution de composer update Détermine la résolution des dépendances, sous l'influence de la version PHP et des extensions installées PHP.

Vous ne pouvez pas définir qu'un package ne doit être utilisé que pour les versions PHP comprises entre 5.3.3 et 5.3.5 si le PHP que vous utilisez pour la mise à jour ne correspond pas à cette exigence de version. Étant donné que la version PHP utilisée dépasse la contrainte de version supérieure, un tel package n'est pas éligible pour remplir la configuration de version requise, et Composer signale qu'aucun package n'a été trouvé. vu les paquets, mais ils ont dû être ignorés à cause de la contrainte de version).

Il y a probablement trois issues évidentes:

  1. Rétrogradez votre environnement de développement sur la version de production que vous utilisez réellement. Si plusieurs sont utilisés: Le plus ancien. Ainsi, toutes les conditions requises pour les versions PHP seront satisfaites. Exécutez composer update Ensuite, et vous avez terminé.

  2. Mettez à niveau votre environnement de production. Aucune explication supplémentaire n’est nécessaire, mais je dois mentionner que non seulement il vous manque beaucoup de fonctionnalités très jolies PHP, mais il vous manque également une augmentation substantielle de ses performances, car PHP 5.5 est vraiment cela beaucoup plus vite que 5.3.

  3. Ajoutez une configuration "platform.php" au composer.json du projet global ou du projet. Ceci indiquera à Composer de remplacer la version de PHP exécutant Composer lui-même et de calculer les dépendances avec cette version PHP différente. composer config -g platform.php 5.3.5 Pour le réglage global (affectera toutes les exécutions ultérieures de Composer), sans -g Pour le réglage local (affectera uniquement les opérations Composer dans ce projet, au cas où vous développeriez plus d’un projet avec différentes versions de production de PHP).

38
Sven

Le paramètre config de composer.json étant disponible. Vous pourriez quelque chose comme ça:

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

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

80
NuSphere

Pourquoi ne pas essayer l'opérateur tilde?

Opérateur tilde ~ 1.2 Très utile pour les projets qui suivent un versioning sémantique. ~ 1.2 est équivalent à> = 1.2, <2.0. Pour plus de détails, lisez la section suivante ci-dessous.

Prochaine version significative (opérateur de tilde) #

L’explication ~ est mieux expliquée par l’exemple suivant: ~ 1.2 est équivalent à

= 1.2, <2.0, alors que ~ 1.2.3 est équivalent à> = 1.2.3, <1.3. Comme vous pouvez le constater, il est surtout utile pour les projets respectant la gestion des versions sémantiques. Une utilisation courante consisterait à marquer la version mineure minimale dont vous dépendez, telle que ~ 1.2 (qui autorise tout ce qui va jusqu’à 2.0, sans toutefois l’inclure). Comme en théorie, il ne devrait y avoir aucune rupture de compatibilité ascendante avant la version 2.0, cela fonctionne bien. Une autre façon de voir les choses est que l’utilisation de ~ spécifie une version minimale, mais permet au dernier chiffre spécifié d’augmenter.

Remarque: Bien que la version 2.0-beta.1 soit strictement antérieure à la version 2.0, une contrainte de version telle que ~ 1.2 ne l'installerait pas. Comme indiqué ci-dessus, ~ 1.2 signifie seulement que le .2 peut changer mais que la 1. partie est fixe.

Remarque: L'opérateur ~ a une exception concernant son comportement pour le numéro de version majeur. Cela signifie par exemple que ~ 1 est identique à ~ 1.0 car cela ne permettra pas au nombre majeur d'augmenter d'augmenter en essayant de conserver une compatibilité ascendante.

8
Billy

Essayez ceci (enlevez la virgule):

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

Supprimez votre composer.lock et ) vendeur répertoire.

Maintenant, placez plate-forme option pour composer.json

"config": {

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

},

et enfin, exécutez la commande composer composer

5
sh6210

Existe-t-il une possibilité de dire à composer d'exiger une version PHP entre 5.3.3 et 5.3.5)?

Oui, en voici un:

Gamme de césure (-)

Ensemble de versions inclus. Les versions partielles à droite incluent un caractère générique. Par exemple, 1.0 - 2.0 équivaut à> = 1.0.0 <2.1 lorsque 2.0 devient 2.0. *. D'autre part, 1.0.0 - 2.1.0 est équivalent à> = 1.0.0 <= 2.1.0.

Exemple: 1.0 - 2.0

https://getcomposer.org/doc/articles/versions.md#hyphenated-version-range-

P.S. Je suis arrivé ici à partir d'un moteur de recherche, mais je n'ai pas trouvé de réponse, alors quand je l'ai trouvée sur le site de Composer, j'ai décidé de la poster ici. J'espère que cela aide quelqu'un qui est arrivé ici comme moi.

0
whyer