Installer plusieurs version de php

Bonjour,

Introduction

Quand on installe php5 et php7 sur son ordinateur (ou serveur), on ne peut en utiliser qu’un. Malheureusement, des fois, il nous faut tester le même site sous différentes versions de php. Et des fois, on aimerais travailler sur 2 projets qui nécessitent des versions de php différentes.

Je suis passé par plusieurs solutions plus ou moins efficaces, comme les machines virtuelles, 2 serveurs apaches sur 2 ports différents, etc.

La solution en théorie

J’ai fini par trouver la solution idéale :

Php en fast cgi et une variable dans htaccess pour choisir la version à executer. Théoriquement on pourrait avoir au sein du même site, une version différente de php par répertoire (site vitrine, blog…). Dans la pratique, on met un seul htaccess à la racine du site et c’est tout.

On peut aussi paramétrer php-fpm pour que les sites aient l’utilisateur et le groupe d’un compte spécifique, utile pour accorder les droits sur le site et sur ftp et les mettant sur un utilisateur système commun.

On va détailler ici uniquement la partie transformation de php de module vers fast cgi.

Je pars du principe que les 2 versions ont été installées via le repository de la distribution, pour debian :

sudo apt-get install apache2 php7.2 libapache2-mod-php7.2 mysql-server mysql-client php7.2-mysql phpmyadmin php7.2-odbc php7.2-curl php7.2-json php7.2-xml php7.2-mbstring

C’est typiquement ce que j’installe pour avoir un serveur de développement lamp fonctionnel.

On imagine donc que sur le serveur il y ait php5, php7.0 et php7.2 d’installés.

La version exécutée par apache dépend de l’ordre d’installation. Je suppose que dans une utilisation normale, on a installé php7.2 en dernier et c’est donc lui qui anime tous les sites sur lesquels on travail.

La soluton en pratique

Il faut tout d’abord arrêter apache

sudo service apache2 stop

Ensuite on supprime tous les modules php

sudo rm -f /etc/apache2/mods-enabled/php*
sudo apt-get remove --purge 'libapache2-mod-php*'

On installe la version cgi de php

sudo apt-get install libapache2-mod-fastcgi php5-fpm php5-cgi php7.0-fpm php7.0-cgi php7.2-fpm php7.2-cgi

On active le module actions

sudo a2enmod actions

On configure fastcgi

sudo nano -w /etc/apache2/mods-enabled/fastcgi.conf

Mettre le contenu suivant

<IfModule mod_fastcgi.c>
	AddHandler fastcgi-script .fcgi
	#FastCgiWrapper /usr/lib/apache2/suexec
	FastCgiIpcDir /var/lib/apache2/fastcgi
	AddType application/x-httpd-php5 .php5 .php
	AddHandler php5 .php5 .php
	Action php5 /cgi-php5
	Alias /cgi-php5 /usr/lib/cgi-bin/php5
	FastCgiExternalServer /usr/lib/cgi-bin/php5 -socket /var/run/php5-fpm.sock -pass-header Authorization
	AddType application/x-httpd-php7.0 .php7 .php
	AddHandler php7.0 .php7 .php
	Action php7.0 /cgi-php7.0
	Alias /cgi-php7.0 /usr/lib/cgi-bin/php7.0
	FastCgiExternalServer /usr/lib/cgi-bin/php7.0 -socket /var/run/php/php7.0-fpm.sock -pass-header Authorization
	AddType application/x-httpd-php7.2 .php7 .php
	AddHandler php7.2 .php7 .php
	Action php7.2 /cgi-php7.2
	Alias /cgi-php7.2 /usr/lib/cgi-bin/php7.2
	FastCgiExternalServer /usr/lib/cgi-bin/php7.2 -socket /var/run/php/php7.2-fpm.sock -pass-header Authorization
	<Directory /usr/lib/cgi-bin>
		Require all granted
	</Directory>
</IfModule>

Le bloc précédent est un peu indigest mais en le lisant, on voit qu’il y a 3 blocs, 1 pour chaque version de php.

Il ne reste plus qu’a activer apache

sudo service apache2 start

Tout devrait fonctionner comme avant. Y compris, la version php7.2 par defaut.

Pour changer cela, dans le htaccess, on mettra le code suivant

<IfModule mod_fastcgi.c>
 AddHandler php5 .php
 #AddHandler php7.0 .php
 #AddHandler php7.2 .php
</IfModule>

Il suffit de décommenter la ligne qui nous intéresse et de commenter les autres. On peut aussi supprimer celles qui ne nous intéressent plus.

Conclusion

Voilà, c’est la configuration que j’utilise sur les serveurs de développement. Cela permet d’avoir un seul serveur qui pourra s’adapter à toutes les versions de php.

Je ne sais pas comment c’est fait chez free.fr, mais je suppose que c’est très similaire, on peut donc supposer que cette méthode (avec un réglage de fpm plus approfondi pour les droits) peut convenir à un serveur de prod.

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *