Votre code doit fonctionner sur plusieurs versions de PHP ? Vous migrez une application dâune ancienne vers une nouvelle version de PHP ? Vous développez des bibliothèques ? Alors, vous avez sûrement besoin de faire tourner plusieurs versions de PHP sur votre ordinateur de développement.
Le temps de déguster un bon café, cet article vous explique comment installer avec facilité plusieurs versions de PHP sous Linux et comment passer dâune version à lâautre à lâaide dâune seule commande.
Publié le 18 mai 2020Â
Version PDF Version hors-ligne
à lâheure où jâécris cet article, fin mai 2020, voici la roadmap de PHP Consulter la roadmap actuelle de PHP  :
La version 8 étant attendue vers la fin de lâannée, lâheure est plutôt calme, nous ne pouvons utiliser que trois versions de PHP :
Quand vous aurez bu votre café :
vous disposerez de ces trois versions de PHP, chacune dâentre elles sera déployée avec deux variantes :
La solution, câest le logiciel PhpBrew qui va nous lâapporter. Les adeptes du ristretto peuvent passer au chapitre 2.
Il était une fois un client qui appelait pour nous faire part dâun bogue. La hotline a réussi à reproduire le code et nous informe quâil ne survient que sur les environnements déployés avec PHP7.4.
Du coup, le service de test a reçu pour mission de développer un test fonctionnel mettant en évidence le bug. Un développeur sây attelle, il fait craquer ses doigts et lance sa machine virtuelle avec PHP7.4. Le voilà à coder son test. Une demi-heure plus tard, câest fait. Il lance la suite de tests, tout marche, sauf le nouveau test qui retourne un échec. Parfait ! Le développeur pousse son code sur le dépôt de développement et ô surprise, tout explose. Bon, jâexagère un peu. En fait, nos tests dâintégration exécutés par Travis-CI Travis-CI montrent que son test plante en PHP7.3 ! La hotline avait dit que cela fonctionnait en 7.3 ! Au pire, le test devrait indiquer un échec (failure) , mais sûrement pas une erreur !
Mais que sâest-il donc passé ? Est-ce que la hotline se serait trompée ? Un test manuel aura vite démontré que nous avions tort de douter dâeux. Ãa marche en PHP7.3. Alors comment cela se fait-il ?
En fait, le développeur a déployé lâapplication sous PHP 7.4, notre gestionnaire de dépendances, composer Composer, gestionnaire de dépendances a sélectionné la dernière version de PHPUnit compatible, câest-à -dire la 9. Ensuite, PHPStorm, son IDE, lui a suggéré la méthode « getMethod » pour un mock de son test. Résultat ? Le test est simplifié grâce à cette nouvelle méthode et, en plus, le test marchait. Du moins, en PHP7.4â¦
Mais PHPUnit9 nâest pas compatible avec PHP7.3 ! Résultat ? Dans un environnement en PHP7.3, composer ne déploie que la version 8 de PHPUnit, une version où la méthode « getMethod » nâexistait pas encore. Le déploiement sur les serveurs de qualification nâa pas planté, mais le test si ! Dâailleurs, il ne retourne pas un échec , il provoque carrément une erreur. Comment notre développeur aurait-il pu éviter cela ? En redéployant son application sous PHP7.3 et avant dâexécuter son test sous PHP7.3, or il ne pouvait pas, car pour faire tourner PHP7.4, il utilisait une machine virtuelle. Tout aurait été plus simple pour lui, si nous avions documenté le passage dâune version de PHP à une autre sur les environnements de développement. Il nâaurait pas eu recours à lâartillerie lourde, à la machine virtuelle. Câest tout lâobjet de ce tutoriel qui reprend une procédure interne pour installer et utiliser PhpBrew .
Notez bien que PhpBrew reste une solution pour un environnement de développement.
En production, les hébergeurs vont veiller à ce que le serveur web, Apache, Nginx, charge la bonne version du module PHP. En environnement, il existe trois méthodes générales.
Extensions : on peut utiliser des extensions différentes et affecter un module à une version spécifique. Câétait le cas, il y a bientôt une vingtaine dâannées, on affectait le module apache/php3 aux fichiers dâextensions php3 et le module apache/php4 aux fichiers dâextension php. Cette méthode désuète nâa heureusement plus cours aujourdâhui.
Variables dâenvironnement : certains hébergeurs utilisent Cpanel ou une solution maison pour que le serveur charge telle ou telle version du module PHP en fonction dâun paramétrage de leur client. Ce genre de solution leur permet dâoffrir du PHP7.2 à certains clients quand dâautres préféreront la version 7.4.
VirtualHost : enfin, via lâhôte virtuel, un administrateur peut définir une certaine version du module PHP pour un site web et une autre version pour un autre site web. Cette solution est particulièrement mise en Åuvre sur les serveurs dédiés à lâIntranet dâune entreprise. Par exemple, sur le même serveur Apache, on fait tourner lâapplication RH avec le module Apache-PHP7.2 et lâapplication Mantis en Apache-PHP7.4.
Je vois encore quelques développeurs se creuser la tête pour configurer un serveur Apache sur leur environnement de développement. Nâoubliez pas câest désormais inutile. Depuis la version 5.4, PHP intègre un serveur intégré Documentation sur le serveur intégré dans PHP . Si ce serveur ne peut être utilisé en production, il est parfait pour le développement.
Lâinstallation de PhpBrew est relativement facile, même sâil nâexiste pas encore de paquets sous Linux. Voici les prérequis :
Le plus complexe est dâinstaller les prérequis, alors pour vous simplifier la tâche, voici les paquets indispensables, distribution par distribution.
Avec le temps, cette liste de prérequis pourrait évoluer. Voici la liste des prérequis Liste officielle des prérequis pour installer PhpBrew maintenue à jour par lâéquipe de PhpBrew.
Pour lâinstallation, vous ne devrez poser votre tasse que quelques instants pour saisir les quelques lignes de commandes :
Néanmoins, je vous déconseille de suivre aveuglément la documentation officielle pour lâétape suivante si vous ne voulez pas casser lâapparence de votre terminal.
PhpBrew a tendance à modifier lâapparence de votre terminal pour afficher la version de PHP en cours. Lâillustration suivante montre la différence !
Jâai fait lâappel au fichier de configuration de PhpBrew au début de mon fichier de configuration bash pour charger les variables dâenvironnement. Comme je nâai pas besoin de savoir tout le temps quelle est la version actuelle de PHP, la suite de mon script écrase les modifications faites pour la présentation. à vous de choisir ce que vous préférez !
Voilà PhpBrew est installé, vous allez désormais découvrir quâil est très simple de compiler une version précise de PHP, de lister les versions disponibles et leurs variantes et, lâessentiel, de basculer dâune version à lâautre.
Pour éviter de constamment interroger les serveurs de PHP.net, PhpBrew met en cache les versions de PHP quâil sait disponibles. Pour mettre à jour ce cache, il suffit dâexécuter la commande suivante. Vous ne devriez utiliser cette commande que lorsquâune nouvelle version de PHP est publiée.
Lâargument « known » permet de lister les versions de PHP que connaît PhpBrew. Ce ne sont pas les versions installées, mais bien les versions de PHP connues. Je ne dis pas « existantes », car si vous nâavez pas mis à jour PhpBrew, il peut ne pas connaître les toutes dernières versions publiées.
Lâargument « variants » permet de lister les variantes, les extensions disponibles pour construire un nouveau «  build  » PHP.
En prime, cette commande vous liste à la fin quelques astuces pour créer un build avec quelques variantes. Nous reviendrons sur ce point un peu plus loin.
La commande « phpbrew install  » vous permet dâinstaller une version de PHP. Sans autre argument que le numéro de version, Phpbrew compilera la nouvelle version avec les extensions par défaut, les extensions les plus courantes.
Vous pouvez également spécifier les extensions que vous souhaitez et préciser un alias.
Les installations sont assez longues, car PhpBrew les compile complètement.
Avec lâargument «  list », la commande phpbrew vous retourne les versions installées. En mode verbeux, avec lâoption « -v », cette commande vous liste aussi les extensions installées sur chaque version.
Lâargument « switch » permet de basculer dâune version de PHP à une autre
Il suffit de remplacer version , par lâun des résultats de la commande « phpbrew list ».
La commande « phpbrew each  » permet dâexécuter une commande sur chacune des versions installées. Nous verrons un usage pertinent à la fin du tutoriel. Pour le moment, contentons-nous dâun exemple très simple, mais peu utile :
Pour vérifier la version de PHP en cours, nous allons utiliser la commande « php -v ». Ainsi, nous pouvons constater que :
Parfois, les développeurs ont besoin dâune extension en particulier en plus des versions par défaut, alors ils exécutent la commande ci-dessous :
La capture dâécran vous démontre que cette commande ne rajoute pas lâextension debug. Enfin, pas tout à fait ! En réalité, elle remplace toutes les extensions par défaut par lâextension debug ! En dâautres termes, cette version de PHP nâa plus les extensions par défaut, elle ne dispose que dâune seule extension : debug. Très limitatif !
Pour résoudre ce problème, vous avez deux solutions. La plus simple consiste à construire un build en précisant que vous voulez les extensions par défaut « +default » et lâextension debug « +debug ».
Autre solution, les héritages ! Commençons par installer la version 7.3.18 avec les extensions par défaut. Puis installons une version qui hérite de la version par défaut, mais à laquelle on ajoute « debug ».
Pour ceux qui ont encore un peu de café à siroter dans leur tasse, nous allons installer les trois versions en cours de PHP ainsi que leurs trois variantes avec debug et surtout lâextension Zend XDebug, soit six installations en quelques lignes de commande.
Tout dâabord, on liste les dernières versions disponibles.
Nous allons nous limiter aux versions qui peuvent encore se trouver en production. Nous nâinstallerons donc pas les versions obsolètes de PHP. Seules restent les versions 7.2.31, 7.3.18 et 7.4.6 à installer, du moins au moment où je rédige cet article (mai 2020).
Grâce à PhpBrew, il est désormais facile de déployer ces trois versions, avec pour chacune deux variantes :
Et voilà , avec un seul copier-coller et quelques minutes de compilation, votre environnement de développement dispose de toutes les versions quâon peut trouver en production (default) ou en environnement de qualification (debug)  !
Attention, à ce stade vous avez installé lâextension debug, ne confondez pas avec lâextension XDebug.
Nous allons désormais installer pour chaque version *debug, lâextension XDebug de Zend. Pour ce faire nous allons :
Composer Site web officiel de composer est un excellent gestionnaire de dépendances pour PHP. Si vous ne lâutilisez pas, vous pouvez passer ce chapitre. Sinon la commande suivante va vous montrer que lâinstallation par défaut de composer nâutilise pas la version de PHP activée par PhpBrew, mais celle de votre distribution.
Comme vous le voyez dans le résultat, le chemin utilisé pour appeler PHP est celui par défaut.
La commande suivante est plus précise :
Il existait une commande permettant dâinstaller directement composer via PhpBrew, mais elle a été retirée de lâapplication. Désormais, il est nécessaire de passer par Brew . Commencez par installer le paquet brew en fonction de votre distribution.
Sous Debian, Ubuntu et Mint, il sâagit de la commande suivante. Pour les autres distributions, veuillez vous reporter à la documentation dâinstallation officielle Documentation d'installation de LinuxBrew .
Pensez à bien rajouter le répertoire « /home/linuxbrew/.linuxbrew/bin/ » à votre PATH comme indiqué à la fin des commentaires qui apparaissent à lâécran à la fin de lâinstallation de brew.
Installez ensuite composer via brew :
Pensez à supprimer la version de composer de votre distribution et à redémarrer votre terminal pour être certain que votre PATH se met bien à jour.
Nous allons désormais basculer sur une version de PHP avec PhpBrew et vérifier que composer la prend bien en compte.
Dans ce paragraphe, nous allons nous pencher sur votre IDE et découvrir comment :
Allez dans la rubrique « Languages & Frameworks / PHP » comme dans la capture dâécran ci-dessous.
Dans la liste déroulante « PHP Language Level », sélectionnez « 7.4 ».
Pressez « MAJ+Entrée » ou cliquez sur le bouton « â¦Â » à droite de « Client Interpreter ».
La fenêtre nommée « CLI Interpreters » sâouvre,
Cliquez sur le « + » et sélectionnez « Other locals ».
Nommez-la avec un nom évocateur, par exemple « PHP 7.4.6 avec XDebug ».
Dans la rubrique « PHP Executable », allez rechercher la compilation de PHP correspondante. Pour moi, il sâagit de : /home/alexandre/.phpbrew/php/php-7.4.6-debug/bin/php.
PHPStorm va détecter la version de PHP et son fichier de configuration correspondant, vous remarquerez dans la capture dâécran ci-dessous quâil a bien détecté lâextension XDebug.
Lâillustration suivante vous présente ce que vous devriez obtenir à cette étape :
Astuce : pour éviter que PhpStorm nâindexe le contenu de composer.phar, dans la liste des fichiers, faites un clic droit dessus et sélectionnez « exclude phar from project ».
Testons « composer » : via le menu principal, sélectionnez « Tools / Composer / Diagnose » et vérifiez dans le journal composer quâil affiche la bonne version de composer, la bonne version de PHP et vérifiez son chemin.
à la rédaction de ce document, PhpStorm télécharge par erreur la version 2 de composer. Or cette version est encore en phase de développement. Cela va poser pas mal de soucis.
Pour corriger cela, sélectionnez dans le menu principal « Tools / Composer / Self-Update ». En se mettant à jour, Composer revient à une version stable.
Créons un nouveau projet et créons un fichier « version.php » dont le contenu se contentera dâafficher le numéro de version de PHP.
Ensuite, sélectionnez dans le menu « Run / Edit configurations », nous créons deux « PHP Scripts » qui exécutent le fichier version.php.
La seule différence entre ces deux configurations, câest le choix de lâinterpréteur PHP.
Si vous lancez les deux scripts (ALT+MAJ+F10) ou « Run / Runâ¦Â », vous verrez que les résultats sont différents, comme attendus.
Renseignez les valeurs suivantes :
Vous pouvez exécuter les trois scripts les uns après les autres depuis la liste déroulante des scripts.
Si vous ouvrez votre navigateur sur les trois adresses suivantes, vous verrez que PHP exécute bien votre script sur des serveurs PHP de trois versions différentes.
Le temps dâun café (ou deux), ce tutoriel vous a permis :
Jâespère que cet article vous facilitera la tâche. Nâhésitez pas à me faire part de vos remarques.
En complément, vous trouverez ci-dessous les commandes les plus utiles et les sites web des outils cités dans cet article.
Je tiens à remercier ClaudeLELOUP Profil utilisateur de ClaudeLeLoup pour sa relecture orthographique attentive.
Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants :