Ignorer l'exigence PHP du compositeur

117

Nous utilisons PHPCI et composer. Le serveur qui exécute PHPCI est sur PHP 5.3.

Pour un projet, nous avons ajouté le SDK PHP Facebook, en utilisant composer. Il nécessite PHP 5.4. Le compositeur est déclenché par PHPCI et est exécuté. Mais parce que le serveur CI vient de recevoir PHP 5.3 composer a échoué avec le message d'erreur:

facebook/php-sdk-v4 4.0.9 requires php >=5.4.0 -> no matching package found.

Cela a bien sûr laissé échouer ma construction dans PHPCI.

Est-il possible de sauter cette exigence? Peut-être en ajoutant une option à composer.json? Ou un paramètre pour appeler composer.phar?

Armin
la source

Réponses:

284

J'ai trouvé l'option:

composer install --ignore-platform-reqs

Ignorez les exigences de la plateforme (paquets php et ext)


Edit: Vous pouvez ignorer les vérifications de la plate-forme avec cela, mais Composer récupérera alors les packages en fonction de la version PHP donnée. Ainsi, lorsque vous avez besoin de composer également pour émuler une version PHP pendant la résolution de dépendance, vous pouvez (et devriez!) Utiliser ceci dans votre composer.json:

{
    "config": {
       "platform": {
           "php": "5.6.6"
       }
    }
}

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

Armin
la source
Comment puis-je ignorer le référentiel privé. Certains packages nécessitent un dépôt privé.
dungphanxuan
Impressionnant. C'est utile lorsque php cli ne reflète pas encore un changement de version.
giovannipds
Dans Composer 2, il y a une nouvelle commande, qui peut être utilisée: php.watch/articles/composer-ignore-platform-req
Armin
3

Pour de nombreuses commandes, vous pouvez dire à composer de contourner la vérification de version de php, avec le paramètre " --ignore-platform-reqs":

composer COMMAND --ignore-platform-reqs

cela contournera la spécification de version de php.

Sachez que le logiciel peut fonctionner ou non: la spécification de la version php est là car quelque part dans le code est nécessaire au moins la version php spécifiée, donc si vous utilisez ce code, le logiciel se cassera.

Luca C.
la source
--ignore-platform-reqsn'est pas disponible pour toutes les commandes, comme votre réponse l'indique.
Armin le
-11

Si quelque chose nécessite une version spécifique de PHP, il ne fonctionnera pas dans une version inférieure de PHP. Vous recevrez toujours correctement des erreurs en contournant l'exigence PHP.

Btw, PHP 5.3 n'est plus maintenu, je recommande fortement de mettre à jour le serveur PHPCI.

Wouter J
la source
3
Je voudrais d'abord savoir comment contourner l'exigence PHP.
Armin
Vous ne pouvez pas et vous ne le ferez pas car le code ne fonctionnera pas dans une version inférieure de php
Wouter J
3
Ce sera. Seul le serveur CI a la version basse de PHP. Le serveur qui contient le SDK facebook fonctionne sur PHP 5.4. Il s'agit à peu près du serveur ci, qui regroupe tout dans un joli fichier zip déployable.
Armin
Bien que PHP 5.3 ne soit plus maintenu par les principaux développeurs PHP, certaines versions de Linux le prennent toujours en charge et le feront encore pendant un certain temps. Ubuntu 12.04 LTS est fourni avec la version 5.3 et est pris en charge jusqu'en avril 2017 ( wiki.ubuntu.com/LTS ). Passer à 14.04 est le meilleur chemin de mise à niveau, mais il y a des changements de rupture qui nécessitent une quantité de travail pour corriger (Apache 2.4, php-fpm etc.). Par conséquent, une grande partie d'Internet utilise toujours 5.3.x.
Andrew McCombe
vrai malheureusement 99% des paquets, même ceux qui sont bien pris en charge, n'ont pas les conditions requises. C'est plus un indicateur de ce que le développeur utilise qu'autre chose.
mschuett