J’ai installé, aujourd’hui, pour un nouveau projet client, une version de Symfony 2.8. C’est la dernière LTS, supportée jusqu’en novembre 2018, une valeur sûre.J’utilise encore la méthode d’installation avec la commande create-project de Composer car j’y suis habitué.

composer create-project symfony/framework-standard-edition "project" "2.8"

Je configure ensuite mon environnement et commence à installer mes dépendances quand j’obtiens un message étrange. J’essaie d’installer le paquet “ovh/ovh”, dépendant de Guzzle 6, et il me dit que ma version de PHP n’est pas compatible. Pourtant j’utilise une version récente et supportée, la 5.6.18. Je supprime, relance l’installation mais rien n’y fait…

Je pars donc à la recherche d’une solution sur le web et trouve rapidement la solution. Mon problème vient de la configuration platform de mon fichier composer.json (ou plutôt celui de Symfony 2.8 par défaut).

Je me rends compte qu’il est possible de surcharger la configuration de l’environnement en cours sur Composer. L’objectif est de permettre de simuler l’installation des dépendances de production, ou définir la version cible dans la configuration.

Exemple:

{
    config: {
        "php": “5.3.9”
    },
    ...
}

Dans votre fichier composer.json ce petit morceau de code va définir que la version PHP en cours d’utilisation est une 5.3.9 quelque que soit celle installée sur le système.
Si jamais vous installer des dépendances nécessitant une version supérieure, vous obtenez un message du type :

Problem 1
guzzlehttp/guzzle 6.1.1 requires php >=5.5.0 -> your PHP version (5.6.18)
overriden by "config.platform.php" version (5.3.9) does not satisfy that
requirement.

Ce qui veut dire que :

  • Guzzle en version 6.1.1 requiert PHP 5.5.0 au moins ;
  • Ma version installée est une 5.6.18 ;
  • La configuration config.plateform.php surcharge la valeur et force à 5.3.9.

C’est assez troublant la première fois qu’on tombe sur ce message. Pour le contourner il y a plusieurs solutions :

  • Utiliser le paramètre --ignore-platform-reqs qui ignore la configuration (mais il faut penser à le passer à chaque appel…) ;
  • Changer la version cible pour qu’elle corresponde à la valeur utile au projet ;
  • Supprimer la version cible.

Dans l’absolue, cette fonctionnalité est intéressante car elle permet de s’assurer que toutes les dépendances installées sont compatibles avec une version cible. Il faut cependant en avoir l’utilité et ne pas l’initialiser pour rien.

Si vous utiliser la nouvelle commande d’installation de Symfony, vous ne rencontrerez pas ce problème car la configuration platform est supprimée du fichier composer.json (pour plus de détail, voir la pull request sur Github).Par contre l’installation avec create-project récupère “juste” les sources disponibles sans les modifier. On se retrouve donc avec le fichier contenant la configuration génante.
Je ne suis pas le seul à avoir été confronté au problème, des tickets ont été ouvert sur Github: #933, #858.

Un peu de temps de perdu et une fonctionnalité de Composer découverte aujourd’hui. La prochaine fois, je comprendrai ce message directement et je saurais comment réagir ?.