Plusieurs versions de PHP sur un serveur Apache

Demandez et postez vos petites astuces, répertoire des tutoriels et astuces
Verrouillé
Avatar du membre
cyrille
Messages : 2931
Enregistré le : mar. 19 sept. 2017 08:49
Localisation : Nord - Avesnois
Contact :

Plusieurs versions de PHP sur un serveur Apache

Message par cyrille » mar. 11 juin 2019 21:25

Je conseille la lecture de ce how-to avant toute chose qui explique comment installer un LAMP et la configuration de base.
viewtopic.php?f=12&t=13032

Ici le but est de déployer sur un serveur Apache local plusieurs versions de php avec de tester des sites dans ces différentes versions.
L'idée est d'associer un répertoire virtuel par version de php via FastCGI Process Manager.
Nous verrons ici comment faire par exemple pour php5.6 et php7.0. Il suffira de reproduire le schéma autant de fois que nécessaire pour les autres versions de php.
Attention version d'Apache 2.4.10 au minimum

1. Installer le module FastCGI et les activer

Sous Mint 18.3 (Base ubuntu 16.X)

Code : Tout sélectionner

sudo apt install apache2 libapache2-mod-fastcgi 
sudo a2enmod actions fastcgi alias proxy_fcgi
Sous Mint 19 (Base Ubuntu 18.X)

Code : Tout sélectionner

sudo apt install apache2 libapache2-mod-fcgid
sudo a2enmod actions fcgid alias proxy_fcgi
2. Installer les différentes versions de PHP

Ajouter ce ppa pour bénéficier des différentes versions

Code : Tout sélectionner

sudo add-apt-repository ppa:ondrej/php
Installer php 5.6 et 7.0

Code : Tout sélectionner

sudo apt install php5.6 php5.6-fpm
sudo apt install php7.0 php7.0-fpm
Vérifier qu'ils fonctionnent

Code : Tout sélectionner

 sudo systemctl status php5.6-fpm
● php5.6-fpm.service - The PHP 5.6 FastCGI Process Manager
   Loaded: loaded (/lib/systemd/system/php5.6-fpm.service; enabled; vendor preset: enabled)
   Active: active (running) since mar. 2019-06-11 20:52:05 CEST; 8min ago
     Docs: man:php-fpm5.6(8)
 Main PID: 1050 (php-fpm5.6)
   Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
   CGroup: /system.slice/php5.6-fpm.service
           ├─1050 php-fpm: master process (/etc/php/5.6/fpm/php-fpm.conf)                      
           ├─1145 php-fpm: pool www                                                            
           └─1146 php-fpm: pool www                                                            

juin 11 20:52:05 libres09-Latitude-E6410 systemd[1]: Starting The PHP 5.6 FastCGI Process Manager...
juin 11 20:52:05 libres09-Latitude-E6410 systemd[1]: Started The PHP 5.6 FastCGI Process Manager.
Faire de même avec php7.0

Code : Tout sélectionner

sudo systemctl status php7.0-fpm
3. Créer les répertoires de publication d'Apache

Code : Tout sélectionner

sudo mkdir -p /var/www/html/php56
sudo mkdir -p /var/www/html/php70
avec un fichier phpinfo

Code : Tout sélectionner

echo "<?php phpinfo(); ?>" > /var/www/html/php56/index.php
echo "<?php phpinfo(); ?>" > /var/www/html/php70/index.php
Ajuster les droits à votre stratégie de sécurité de votre répertoire de publication web.

3. Créer les virtuals hosts

Celui pour le php 5.6

Code : Tout sélectionner

$ cat /etc/apache2/sites-available/php56.conf 
<VirtualHost *:80>
    ServerName php56.com
    ServerAlias php56.com
    ServerAdmin webmaster@php56.com
    DocumentRoot /var/www/html/php56
    DirectoryIndex index.php    

    <Directory /var/www/html/php56>
        Options -Indexes +FollowSymLinks
        AllowOverride All
    </Directory>
    
    <FilesMatch \.php$>
        # Apache 2.4.10+ can proxy to unix socket
        SetHandler "proxy:unix:/var/run/php/php5.6-fpm.sock|fcgi://localhost/"
    </FilesMatch>
</VirtualHost>

Code : Tout sélectionner

Celui pour le php 7.0
[/u]

Code : Tout sélectionner

 $ cat /etc/apache2/sites-available/php70.conf 
<VirtualHost *:80>
    ServerName php70.com
    ServerAlias php70.com
    ServerAdmin webmaster@php70.com
    DocumentRoot /var/www/html/php70
    DirectoryIndex index.php    
    
    <Directory /var/www/html/php70>
        Options -Indexes +FollowSymLinks
        AllowOverride All
    </Directory>
    
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/var/run/php/php7.0-fpm.sock|fcgi://localhost/"
    </FilesMatch>
</VirtualHost>
Charger ces répertoires virtuels et relancer apache

Code : Tout sélectionner

sudo a2ensite php56 php70
sudo systemctl restart apache2

4. Mettre à jour le fichier /etc/hosts
Mettre à jour le fichier /etc/hosts avec ces entrées

Code : Tout sélectionner

127.0.0.1 php70.com
127.0.0.1 php56.com



5. Et ça fonctionne...
Dans un navigateur, vérifier le fonctionnement

Image
Image

6. Configurer vos versions de php
Vous disposez sur ce serveur de plusieurs versions de php mais aussi de plusieurs exécutables. Exemple concret :

Code : Tout sélectionner

 ls /etc/php/5.6/
cli  fpm  mods-available
 ls /etc/php/7.0/
apache2  cli  fpm  mods-available
La version cli est la version php en ligne de commande (client), celle qui nous intéresse en la version fpm (FastCGI Process Manager), donc c'est fichier php.ini située dans ce répertoire qui nous interesse. Vous pouvez vérifier sa présence et localisation via le script infophp() et les valeurs retournées.

Donc voilà... à vous d'installer autant de versions différentes de php que vous souhaitez ou même des versions identiques avec des fichiers de configuration différentes...
# Me : DELL Lat E5430, SSD, 64-bit, RAM 8Go [ FreeBSD 12.0, xfce / Openbox ; DEBIAN SID via VirtualBox] | E7440, SSD, amd64, RAM 8Go [ DEBIAN SID, xfce]
# Me : VPS : 1 vCore 2 GHz , SSD, RAM 2Go, Local RAID, DEBIAN STABLE https://cbiot.fr
# Work : Serveur HP ProLiant ML 310e Gen 8 v2, DEBIAN STABLE | Parc DELL Lat E6* LINUX MINT, 18.3 Sylvia, amd64, XFCE.

All you need : #!/bin/bash | SVP les chiants pas de MP...

Verrouillé