Utiliser plusieurs version de php avec Apache

Cet article est assez ancien, malgré toute l'attention que j' apporte à mes contenus il est possible que celui-ci ne soit plus d'actualité.
N'hésitez pas à me le signaler si nécessaire via le formulaire de contact.

Un petit article pour présenter comment installer plusieurs versions de php en simultané sur votre serveur dédié.
Ceci peut notamment être utile si vous hébergez plusieurs sites sur votre serveur dédié et qu’ils n’ont pas les mêmes prérequis techniques.

En utilisant apache et php-fpm et c’est très facile et rapide à mettre en place.
Pour notre exemple je souhaite installer php 5.6 et php 7.0 en simultané.

#Pour commencer installer apache
apt-get install apache2 libapache2-mod-fastcgi
 
#Activativation des mode actions fastcgi et alias pour apache2
a2enmod actions fastcgi alias
 
#Ajouter le ppa Ondrej
add-apt-repository ppa:ondrej/php
 
#Update des packet
apt-get update
 
#Installer PHP 7 + extensions de base
apt-get install php7.0-fpm php7.0-xml php7.0-gd php7.0-mcrypt php7.0-mysql php7.0-pdo
 
#Installer PHP 5.6 + extensions de base
apt-get install php5.6-fpm php5.6-xml php5.6-gd php5.6-mcrypt php5.6-mysql php5.6-pdo

Partant du principe que la version par défaut sera php 7.0,
On va ensuite configurer phpfpm 5.6 pour une exécution à la demande en éditant son fichier de configuration

vim /etc/php/5.6/fpm/pool.d/www.conf

changer la ligne pm comme ceci :

pm = ondemand

La base est à présent installée, maintenant vous pouvez éditer vos fichiers de configuration de la manière suivante.

#Editer le fichier de configuration pour tester le fonctionnement
<VirtualHost *:80>
 
ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
 
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
#PHP7 ( Actif )
<IfModule mod_fastcgi.c>
        AddHandler php7-fcgi .php
        Action php7-fcgi /php7-fcgi virtual
        Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi
        FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php7.0-fpm.sock -pass-header Authorization
</IfModule>
 
#Décommenter pour activer PHP 5.6
#<IfModule mod_fastcgi.c>
#AddHandler php5.6-fcgi .php
#Action php5.6-fcgi /php5.6-fcgi virtual
#Alias /php5.6-fcgi /usr/lib/cgi-bin/php5.6-fcgi
#FastCgiExternalServer /usr/lib/cgi-bin/php5.6-fcgi -socket /var/run/php/php5.6-fpm.sock -pass-header Authorization
#</IfModule>
 
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
 
</VirtualHost>

Vous pouvez ensuite en fonction de vos besoins spécifier la version de php à utiliser sur chacun de vos vhosts.

Redémarrer apache2 pour prendre en compte la configuration

service apache2 restart

11 réflexions sur “Utiliser plusieurs version de php avec Apache”

  1. Hello,

    Excellent article. En revanche le ppa Ondrej ne semble pas exister:

    add-apt-repository ppa:ondrej/php
    ERROR: ‘~ondrej’ user or team does not exist.
    Erreur : « ppa:ondrej/php » non valide

    Merci de votre aide

    Edit :
    Désolé, c’était un problème de proxy, résolu en exportant ces deux variables:

    export http_proxy=http://:
    export https_proxy=http://:

  2. Oui j’ai bien décommenté le bloc et relancer apache
    php5.6 -v me renvoie :
    PHP 5.6.33-3+ubuntu16.04.1+deb.sury.org+1 (cli)
    Copyright (c) 1997-2016 The PHP Group
    Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies

    1. Je vous confirme que de mon côté tout fonctionne correctement sur une nouvelle instance.
      Est-ce que vous voyez bien les 2 versions de php-fpm qui tournent si vous faites un htop ?

  3. J’ai trouvé le pb, je ne suis pas parti d’une install vierge, il fallait juste désactiver le mod php7.0 qui prenait le dessus.
    Merci d’avoir prit un peu de temps pour me dépanner.

  4. Bonjour,

    j’ai également essayé de faire fonctionner deux versions (7.1 et 5.6), la 5.6 étant pour un seul projet en particulier.

    J’ai suivi l’explication, j’ai bien une commande « php5.6 » dont la version est bien php5.6 et j’ai modifié mon host comme indiqué.
    Mais je suis toujours sur php7.1 sur ce host-là.

    J’ai pas eu d’erreur en redémarrant apache, donc il n’y a, a priori, pas d’erreur de syntaxe dans mon fichier de conf.

    Une piste ?

    Merci !

Laisser un commentaire

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