Plusieurs versions de PHP sous Windows

Une solution avec Symfony

Alexandre Tranchant

Après avoir écrit un tutoriel pour disposer de plusieurs versions de PHP sous Linux, j’ai décidé d’écrire son pendant pour Windows.

À l’issue de ce tutoriel, vous aurez installé les trois versions actuelles de PHP sous Windows et vous saurez comment passer d’une version à l’autre à l’aide d’une seule commande sans avoir recours à des suites logicielles telles que WAMP.

La solution, c’est Symfony qui nous l’apportera. Pas le framework, mais l’utilitaire de Symfony.

Commentez

- Titre : Plusieurs versions de PHP sous Windows

- Auteur : Alexandre Tranchant

- Parution : 6 juin 2020

- Public visé :

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2020 Alexandre Tranchant. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Comment se passer de l’artillerie lourde ?

- II. Installations de PHP

- III. Une solution avec Symfony

- III-A. Installation de Symfony

- III-B. Configuration de l’environnement

- III-C. Changer de version de PHP pour le répertoire courant

- III-D. Quelques utilisations pratiques

- III-D-1. Démarrage d’un serveur web PHP

- III-D-2. Utilisation avec composer

- III-D-3. Configuration de PHPStorm

- III-D-3-a. Configuration de nos versions de PHP

- III-D-3-b. Configuration de composer

- III-E. Pour aller plus loin avec Symfony

- IV. Conclusions

I - Comment se passer de l’artillerie lourde ?

Dans mon entourage, j’observe de nombreux développeurs installer des suites logicielles telles que WAMP. Elles incluent :

- un serveur web, souvent Apache ;

- un serveur de base de données, malheureusement le choix se porte sur MySql ;

- l’interpréteur PHP avec plusieurs versions.

Certaines suites sont très bien faites. Néanmoins, pour du développement, il est souvent inutile d’installer Apache ou Nginx. Depuis la version 5.4, PHP intègre un serveur intégré. Si ce serveur ne peut être utilisé en production, il répond aux besoins des développeurs.

Quant à la base de données, nos données en développement n’ont guère d’enjeu. Nous pouvons donc nous contenter d’utiliser des images docker. À défaut, on peut toujours installer le moteur de notre choix, mais, quoi qu’il en soit, je n’installe pas MySql, car je tiens à prémunir mes clients de ses dangers. Certes, la plupart des hébergeurs offrent des solutions clés en main avec ce moteur. La recherche d’une solution d’hébergement sera plus difficile, mais l’intégrité des données des clients mérite cet effort.

Pour ces deux raisons, nous n’allons pas installer la suite logicielle WAMP. Néanmoins, il est important qu’un développeur ne perde pas de temps pour basculer d’une version de PHP à l’autre. Cet article va nous apporter une solution.

II - Installations de PHP

Nous allons commencer par installer plusieurs versions de PHP : celles qui peuvent être présentes en production. À l’écriture de cet article, nous sommes en juin 2020. La version 8 n’est attendue que pour la fin de l’année. Les versions 7.1 et précédentes ne sont plus mises à jour. Nous allons donc installer trois versions de PHP restantes :

- la version 7.2, même s’il n’existe plus que des mises à jour de sécurité, elle reste présente en production ;

- la version 7.3 ;

- la version 7.4.

Veuillez télécharger chacune des versions de PHP à déployer depuis la page dédiée et les décompresser dans le répertoire de votre choix. Pour ce tutoriel, toutes les versions seront installées dans le répertoire suivant : « D:/opt/php ».

Répertoire des installations de PHP

Ensuite, rendez-vous dans chacun des répertoires d’installation pour tester chaque version.

Tests de chaque version de PHP

Avec cette capture d’écran, vous avez remarqué que je n’utilise pas le terminal habituel de Windows. J’utilise mder, ce terminal comprend de nombreuses commandes basiques Linux telles que ls et cat, mais il connaît aussi des plus complexes. Par exemple, which, history et surtout grep. Il implémente également git.

Je résume les cinq étapes de l’installation :

- créer un répertoire pour y centraliser toutes les versions de PHP ;

- télécharger l’archive de chaque version ;

- décompresser chaque version dans le répertoire de destination ;

- renommer chaque répertoire de façon simple ;

- dans chaque répertoire, renommer le fichier « php.ini-development » en « php.ini ».

Comme nous n’aurons besoin ni d’Apache ni de IIS, nous n’avons rien d’autre à faire.

III - Une solution avec Symfony

La solution, c’est Symfony qui va nous l’apporter. Nous n’allons bien sûr pas faire appel au framework de Symfony, seulement à l’utilitaire Symfony. Cet utilitaire est également appelé « client Symfony » parce qu’il permet de configurer le cloud Symfony. Ce client offre de nombreuses possibilités. Il est connu des développeurs Symfony pour ces fonctions principales :

- création d’un squelette d’application complète ;

- création d’un squelette d’application minimaliste ;

- configuration du cloud Symfony ;

- etc.

Cet utilitaire possède néanmoins beaucoup d’autres fonctions. Nous allons utiliser celle qui va nous permettre de basculer d’une version de PHP à une autre rapidement.

III-A - Installation de Symfony

Nous allons donc installer le client Symfony. Pour ce faire :

- téléchargez l’utilitaire Symfony ;

- installez-le, en suivant la procédure pas à pas ;

- veuillez laisser cochée l’option qui vous propose d’ajouter le répertoire de Symfony au chemin du système (system path).

Laissez la case cochée durant l’installation de Symfony.

L’utilitaire de Symfony offre de nombreuses fonctions que vous pouvez découvrir en lançant l’aide :

symfony --help

Parmi cette liste de commandes, celle qui nous intéresse permet de lister les versions de PHP disponibles. Néanmoins, son retour ne va pas nous plaire dès le début :

symfony local:php:list

Cet appel va nous retourner un tableau de choix vide parce que Symfony liste les versions de PHP disponibles dans notre variable d’environnement « PATH ». Pour le moment, aucune version de PHP ne s’y trouve.

Symfony ne détecte encore aucune de nos versions de PHP.

III-B - Configuration de l’environnement

Remédions à ce problème. Ouvrez le panneau de configuration des variables d’environnement. Les méthodes varient selon les versions de Windows. Pour ma part, je clique avec le bouton droit de la souris sur l’icône « Windows », généralement en bas, à gauche, puis je sélectionne Système. Ensuite dans la fenêtre système, je saisis « variables » et le menu me propose : « modifier les variables d’environnement système ».

Recherche contextuelle depuis le panneau de configuration sous Windows 10

Cliquez sur « Modifier les variables d’environnement. » La fenêtre des propriétés du système s’ouvre.

Fenêtre des propriétés système

Cliquez alors sur le bouton : variables d’environnement. La fenêtre des variables d’environnement s’ouvre.

Fenêtre des variables d’environnement

Dans la rubrique des variables du système, sélectionnez la ligne de la variable « PATH » avant de cliquer sur le bouton « Modifier ».

La fenêtre de modification de la variable d’environnement s’ouvre. Cliquez sur le bouton « Nouveau » pour ajouter une nouvelle ligne. Saisissez-y le chemin vers le répertoire où se trouve la version de PHP que vous souhaitez utiliser par défaut. Pour ma part, j’ai choisi la version 7.4. Ensuite, recommencez pour ajouter une nouvelle ligne avec la version 7.3, puis la version 7.2.

Finalement, vous devriez obtenir une liste de répertoires qui ressemble à quelque chose comme ceci :

Aperçu de votre variable d’environnement PATH

Cliquez sur tous les boutons OK pour refermer la multitude de fenêtres que nous avons ouvertes. Cette étape est importante, toutes les fenêtres doivent être refermées pour que la nouvelle valeur de la variable d’environnement soit prise en compte. Veuillez également redémarrer votre console, que ce soit PowerShell, le terminal par défaut ou cmder, sans quoi elle ignorera la nouvelle valeur de la variable d’environnement.

Dans la console, la version par défaut de PHP est bien celle que nous avons choisie en premier :

Version de PHP par défaut

php -v

Désormais, relançons la commande Symfony, elle devrait nous retourner un résultat plus intéressant :

symfony local:php:list

Symfony détecte bien nos trois versions de PHP.

III-C - Changer de version de PHP pour le répertoire courant

Comme vous l’avez constaté, la version par défaut de PHP est la 7.4.4. Nous allons nous placer dans un répertoire temporaire et y créer un fichier nommé « .php-version » dont le contenu sera le numéro complet de la nouvelle version souhaitée : la 7.3.13, par exemple.

Contenu du fichier .php-version

7.3.13

Petite astuce pour les utilisateurs de cmder

echo 7.3.13 > .php-version

Les utilisateurs de Linux reconnaîtront le raccourci ci-dessus. Cette astuce vous permet de remplacer le contenu du fichier « .php-version ». Si le fichier n’existe pas, il est créé. Si vous n’utilisez pas cmder, vous devrez éditer le fichier avec l’éditeur de votre choix.

Alors, avons-nous changé de version ? Si nous lançons la commande habituelle, ce n’est pas encore le cas.

La commande habituelle retourne toujours la version 7.4.

Au lieu de taper la commande habituelle pour connaître la version en cours de PHP, nous allons précéder cette commande par « symfony ».

Version de PHP en cours

symfony php -v

Symfony lance PHP en version 7.3.

Et voilà ! Nous sommes en PHP 7.3.

En fait, Symfony recherche la présence du fichier « .php-version ». S’il existe, Symfony va lire son contenu et faire appel à la version correspondante de PHP. Désormais, chaque fois que nous appellerons l’exécutable « php », nous le ferons précéder par la commande « symfony ».

III-D - Quelques utilisations pratiques

Dans ce chapitre, nous allons voir combien cela est pratique avec trois exemples :

- le démarrage de trois serveurs web PHP, un pour chaque version ;

- l’utilisation de composer avec la version de PHP voulue ;

- la configuration de PHPStorm.

III-D-1 - Démarrage d’un serveur web PHP

Nous allons appliquer ce que nous avons vu au chapitre précédent pour lancer un serveur web avec la version 7.2 de PHP. Pour ce faire :

- nous créons un fichier « phpinfo.php » qui fait appel à la fonction « phpinfo() » ;

- nous remplaçons le contenu du fichier « .php-version » par le numéro de notre version. Pour ma part, c’est 7.2.26 ;

- nous lançons le serveur intégré de PHP en préfixant la commande par « symfony » ;

- nous ouvrons notre navigateur à la page : http://127.0.0.1/phpinfo.php.

Contenu du fichier phpinfo.php

<?php
//fichier phpinfo.php
phpinfo();

Lancement du serveur intégré de PHP 7.2.26

C’est bien la version 7.2.26 qui est exécutée dans notre serveur web.

Comme le serveur tourne, vous pouvez changer le contenu de votre fichier sans incidence sur le processus en cours. Si vous ouvrez une autre console, vous pouvez changer la version dans le fichier « .php-version » et lancer un autre serveur dans une autre version. Il vous suffit de penser à incrémenter le numéro du port et le tour est joué. Nous verrons plus loin comment Symfony peut là encore nous simplifier la tâche.

III-D-2 - Utilisation avec composer

Composer est un excellent gestionnaire de dépendances pour PHP. Si vous ne l’utilisez pas, vous pouvez passer ce chapitre. La fonction de diagnostic de composer va nous prouver qu’il exploite la version 7.4, car c’est le premier répertoire inscrit dans notre variable d’environnement « PATH ».

Diagnostic de composer

composer diagnose

Comme vous le voyez dans le résultat, le chemin utilisé pour appeler PHP est celui de la version 7.4.

Composer fait appel à PHP 7.4.

Si nous exécutons la même commande depuis l’utilitaire Symfony, alors le client Symfony va lire le fichier « .php-version ». Il contient le numéro 7.2.26 depuis le chapitre précédent. Symfony va faire en sorte que composer utilise cette version-là, et non plus celle par défaut.

Diagnostic de composer lancé par Symfony

symfony composer diagnose

Symfony exécute composer avec l’environnement de PHP 7.2.

Symfony offre une autre opportunité. Les développeurs ayant développé des applications lourdes ont remarqué que composer utilisait beaucoup de mémoire pour résoudre les infernales règles de dépendances. En faisant passer composer par Symfony, le processus s’exécute dans un environnement :

- où la version de PHP est sélectionnée par Symfony ;

- où Symfony l’autorise à consommer toute la mémoire nécessaire pour rendre son résultat.

III-D-3 - Configuration de PHPStorm

Dans ce chapitre, nous allons nous pencher sur votre IDE et découvrir comment :

- configurer chacune de nos versions de PHP comme interpréteur ;

- déclarer le chemin de composer.

III-D-3-a - Configuration de nos versions de PHP

1. Ouvrez la fenêtre des paramétrages (CTRL+ALT+S) ou sélectionnez « Files », puis « Settings » dans le menu principal.

2. Allez dans la rubrique « Languages & Frameworks/PHP » comme dans la capture d’écran ci-dessous.

3. Dans la liste déroulante « PHP Language Level », sélectionnez « 7.4 ».

Fenêtre de paramétrage des interpréteurs PHP

4. Pressez « MAJ+Entrée » ou cliquez sur le bouton « … » à droite de « Client Interpreter ».

5. La fenêtre nommée « CLI Interpreters » s’ouvre,

Fenêtre de paramétrage des clients PHP

6. Cliquez sur le « + » , PHPStorm vous propose les trois versions de PHP présentes dans le « PATH ».

7. Sélectionnez le répertoire correspondant à la version 7.4.

8. PHPStorm complète tous les champs de la fenêtre, il vous suffit de cliquer sur OK.

Configuration finale des trois clients PHP

9. Répétez les opérations 7 et 8 pour chacune des trois versions.

L’illustration suivante vous présente ce que vous devriez obtenir à la fin de ces étapes :

Fenêtre de configuration de l’interpréteur PHP complétée par PHPStorm

III-D-3-b - Configuration de composer

- Ouvrez la fenêtre des paramétrages (CTRL+ALT+S) ou sélectionnez « Files » puis « Settings » dans le menu principal.

- Allez dans la rubrique « Languages & Frameworks/PHP/Composer ».

- Cochez la case « composer.phar ».

- Cochez la case « Download composer.phar from getcomposer.org ».

- Sélectionnez la version que vous souhaitez utiliser pour l’application dans la liste déroulante « PHP interpreter ».

Configuration de composer

En allant dans le menu « Tools/Composer/Diagnose », vous remarquerez dans le journal de Composer que la version de PHP utilisée est celle que vous avez sélectionnée.

Journal du diagnostic de composer

III-E - Pour aller plus loin avec Symfony

Si vous l’ignoriez, désormais vous savez que Symfony n’est pas qu’un framework. C’est aussi un utilitaire. Nous avons découvert deux de ses utilités :

- sélectionner une version de PHP ;

- exécuter composer dans un environnement altéré pour forcer la version de PHP et lui allouer toute la mémoire nécessaire.

D’autres astuces se cachent dans cet outil :

- il vérifie votre configuration PHP : symfony local:check:requirement ;

- il vérifie la sécurité des bibliothèques que votre projet exploite : symfony local:check:security ;

- il vous permet de démarrer un serveur web : symfony local:server:start ;

- de nombreuses méthodes vous permettent de manipuler ce serveur en :

- consultant son statut,

- l’arrêtant,

- modifiant la valeur de variable d’environnement ;

- ses autres fonctions sont propres au framework ou au cloud Symfony.

IV - Conclusions

Au terme de cet article, vous savez :

- installer plusieurs versions de PHP sous Windows ;

- choisir une version spécifique grâce à Symfony ;

- exécuter un script PHP ainsi qu’une commande composer depuis le client Symfony ;

- configurer PHPStorm avec différents interpréteurs PHP ;

- que l’utilitaire Symfony est plein de ressources complémentaires.

J’espère que cet article vous facilitera la tâche. N’hésitez pas à me faire part de vos remarques.

Je tiens à remercier Claude Leloup pour sa relecture orthographique attentive.