Mes ressources pour le Web

Installer 2 versions de PHP 8.0.x et 8.1.x avec Debian 11

Installation de 2 versions de PHP (PHP 8.0.x et 8.1.x) sur un Debian 11 XFCE
J'ai donc installé sur une machine virtuelle 64 bits une version de PHP 8.0.9 avec MariaDB sur une Debian 11 Bullseye XFCE , et comme la version PHP 8.1 est sortie en RC , j'ai voulu tester PHP 8.1 RC2 pour vérifier les problèmes sur le code des CMS utilisés.

Le but de ce mode d'emploi est de créer en local, un à partir du serveur Apache deux versions de PHP pour faire des tests dans le home/dossier_personnel/ avec un seul VirtualHost .

Pour cela avec Apache et PHP-FPM, il est possible d’utiliser plusieurs versions différente de PHP sur le même serveur.

Nota :

Dans cette page (installation en local) linux est le nom du dossier personnel : celui qui se créer avec le nom d’utilisateur à l'installation, dans le home, donc ici  /home/linux/ dans cette page. Il faut donc adapter le nom suivant votre dossier personnel.

Après l'installation de PHP 8.0.x comme indiqué Installer PHP 8.0.x + MariaDB avec Debian 11

Les manipulations sont faites en ligne de commande en terminal administrateur
sudo -s
(plus simple à reproduire ici)
Uniquement pour tests et information "à vos risques et périls" ;-)
Nota suivant la distribution Linux le logiciel éditeur de texte mousepad peut être remplacer gedit, geany par ou autre possibilité à votre convenance pour l’édition des fichiers textes


A - Préparation et installation

 je vais compléter l'installation d'Apache par le module libapache2-mod-fcgid qui
permet de lancer plusieurs d'instances de programme CGI pour traiter les requêtes simultanées.

A1. mise à jour des paquets
apt-get update

Par sécurité
apt-get upgrade

A2. Installation du
module libapache2-mod-fcgid
apt-get install libapache2-mod-fcgid

Les NOUVEAUX paquets suivants seront installés :
libapache2-mod-fcgid
0 mis à jour, 1 nouvellement installés, 0 à enlever et 0 non mis à jour.
Ici se sera libapache2-mod-fcgid (1:2.3.9-4)

A3. Installation de php8.0-fpm
apt-get install php8.0-fpm

Les NOUVEAUX paquets suivants seront installés :
php8.0-fpm
0 mis à jour, 1 nouvellement installés, 0 à enlever et 0 non mis à jour.
...
Creating config file /etc/php/8.0/fpm/php.ini with new version
...
NOTICE: Not enabling PHP 8.0 FPM by default.
NOTICE: To enable PHP 8.0 FPM in Apache2 do:
NOTICE: a2enmod proxy_fcgi setenvif
NOTICE: a2enconf php8.0-fpm
NOTICE: You are seeing this message because you have apache2 package installed..
A4. Activer le module Apache
a2enmod actions fcgid setenvif

Considering dependency proxy for proxy_fcgi:
Enabling module proxy.
Enabling module proxy_fcgi.
Module setenvif already enabled
To activate the new configuration, you need to run:
systemctl restart apache2
Donc pour relancer le serveur
systemctl restart apache2

A5. Ensuite activer php8.0-fpm
a2enconf php8.0-fpm
Enabling conf php8.0-fpm.
To activate the new configuration, you need to run:
systemctl reload apache2

Donc pour relancer le serveur
systemctl restart apache2

Comme il a été déjà créer un VirtualHost sites dans le home il suffit de tester le phpinfo.php
pour vérifier que c'est bien php8.0-fpm
php8011_fpm

Note : si modifications du php.ini
suivant la distribution Linux le logiciel éditeur de texte mousepad peut être remplacer gedit, geany par ou autre possibilité a votre convenance, le but c'est d’éditer le fichier /etc/php/8.0/fpm/php.ini
Et non pas le fichier par défaut etc/php/8.0/apache2/php.ini


B. Pour avoir PHP 8.1.x il faut utiliser aussi le dépôt de Ondřej Surý php8.1

B1. Installation de PHP 8.1.0~rc2

Attention le code ci-dessous doit être sur une seule ligne
apt install php8.1 libapache2-mod-php8.1 php8.1-mysql php8.1-curl php8.1-gd php8.1-intl php8.1-sqlite3 php8.1-gmp php8.1-mbstring php8.1-xml php8.1-zip
Supprimer éventuellement les modules qui ne vous intéressent pas
Les paquets supplémentaires suivants seront installés : 
php8.1-cli php8.1-common php8.1-opcache php8.1-readline
Paquets suggérés :
php-pear
Les NOUVEAUX paquets suivants seront installés :
libapache2-mod-php8.1 php8.1 php8.1-cli php8.1-common php8.1-curl php8.1-gd
php8.1-gmp php8.1-intl php8.1-mbstring php8.1-mysql php8.1-opcache
php8.1-readline php8.1-sqlite3 php8.1-xml php8.1-zip
0 mis à jour, 15 nouvellement installés, 0 à enlever et 0 non mis à jour.

B2. Installation de php8.1-fpm

apt-get install php8.1-fpm

Paquets suggérés :
php-pear
Les NOUVEAUX paquets suivants seront installés :
php8.1-fpm
..
NOTICE: Not enabling PHP 8.1 FPM by default.
NOTICE: To enable PHP 8.1 FPM in Apache2 do:
NOTICE: a2enmod proxy_fcgi setenvif
NOTICE: a2enconf php8.1-fpm
NOTICE: You are seeing this message because you have apache2 package installed..

 B3. Ensuite activer php8.1-fpm
a2enconf php8.1-fpm

Enabling conf php8.1-fpm.
To activate the new configuration, you need to run:
systemctl reload apache2
Donc pour relancer le serveur
systemctl reload apache2
Note : si modifications du php.ini
suivant la distribution Linux le logiciel éditeur de texte mousepad peut être remplacer gedit, geany par ou autre possibilité a votre convenance, le but c'est d’éditer le fichier /etc/php/8.1/fpm/php.ini
Et non pas le fichier par défaut etc/php/8.1/apache2/php.ini

B4. Ensuite lancez maintenant le service php8.1-fpm
systemctl restart php8.1-fpm

il suffit de tester le phpinfo.php
php81rc2_fpm

C1. Donc en fonction des besoins et des sous dossiers avec un fichier . htaccess je peux avoir 2 versions de PHP
<FilesMatch \.php>
    # Apache 2.4.10+ can proxy to unix socket
## pour avoir PHP 8.0.x sélectionner la ligne suivante sinon commenter/dé commenter
    ## SetHandler "proxy:unix:/var/run/php/php8.0-fpm.sock|fcgi://localhost/"
## pour avoir PHP 8.1.x sélectionner la ligne suivante sinon commenter/dé commenter
    SetHandler "proxy:unix:/var/run/php/php8.1-fpm.sock|fcgi://localhost/"
</FilesMatch>

Sans fichier . htaccess, si j'ai du PHP 8.0.x
C2. Si je souhaite avoir 8.1.x par défaut
a2enconf php8.1-fpm
Enabling conf php8.1-fpm.
To activate the new configuration, you need to run:
systemctl reload apache2
Relancer le serveur
systemctl reload apache2
ICI on aura PHP 8.1.x

C3. Sinon pour revenir à PHP 8.0.x par défaut
a2disconf php8.1-fpm
Conf php8.1-fpm disabled.
To activate the new configuration, you need to run:
systemctl reload apache2
Relancer le serveur
systemctl reload apache2
 ICI on aura PHP 8.0.x

Mais La solution la plus simple est le fichier . htaccess qui permet d'avoir différentes versions dans des dossiers différents
<FilesMatch \.php>
    # Apache 2.4.10+ can proxy to unix socket
## pour avoir PHP 8.0.x sélectionner la ligne suivante sinon commenter/dé commenter
    ## SetHandler "proxy:unix:/var/run/php/php8.0-fpm.sock|fcgi://localhost/"
## pour avoir PHP 8.1.x sélectionner la ligne suivante sinon commenter/dé commenter
    SetHandler "proxy:unix:/var/run/php/php8.1-fpm.sock|fcgi://localhost/"
</FilesMatch>


Crédit pour les affichages en ligne de commande : Syntax highlighting for the Web


Erreurs, omissions, corrections merci de me le signaler

Original 04/10/2021

Document http://jc.etiemble.free.fr/abc/ JCE -
version du 26/10/2021-0  CC_licence