Avec CentOS, vous pouvez le faire en utilisant une combinaison de fastcgi pour une version de PHP, et php-fpm pour l'autre, comme décrit ici :
https://web.archive.org/web/20130707085630/http://linuxplayer.org/2011/05/intall-multiple-version-of-php-on-one-server
Basé sur CentOS 5.6, pour Apache uniquement
1. Activer les dépôts rpmforge et epel yum
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
wget http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
sudo rpm -ivh rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
sudo rpm -ivh epel-release-5-4.noarch.rpm
2. Installer php-5.1
Les séries CentOS/RHEL 5.x ont php-5.1 en boîte, il suffit de l'installer avec yum, par exemple :
sudo yum install php php-mysql php-mbstring php-mcrypt
3. Compiler et installer php 5.2 et 5.3 à partir des sources
Pour php 5.2 et 5.3, on trouve de nombreux paquets rpm sur Internet. Cependant, ils sont tous en conflit avec le php fourni avec CentOS, nous ferions donc mieux de les construire et de les installer depuis l'extérieur, ce n'est pas difficile, l'important est d'installer php à des endroits différents.
Cependant, lorsque l'on installe php en tant que module Apache, on ne peut utiliser qu'une seule version de php à la fois. Si nous avons besoin de faire tourner différentes versions de php sur le même serveur, en même temps, par exemple, différents hôtes virtuels peuvent avoir besoin de différentes versions de php. Heureusement, FastCGI et PHP-FPM peuvent nous aider.
Construire et installer php-5.2 avec fastcgi activé
1) Installer les paquets de développement nécessaires
yum install gcc libxml2-devel bzip2-devel zlib-devel \
curl-devel libmcrypt-devel libjpeg-devel \
libpng-devel gd-devel mysql-devel
2) Compilation et installation
wget http://cn.php.net/get/php-5.2.17.tar.bz2/from/this/mirror
tar -xjf php-5.2.17.tar.bz2
cd php-5.2.17
./configure --prefix=/usr/local/php52 \
--with-config-file-path=/etc/php52 \
--with-config-file-scan-dir=/etc/php52/php.d \
--with-libdir=lib64 \
--with-mysql \
--with-mysqli \
--enable-fastcgi \
--enable-force-cgi-redirect \
--enable-mbstring \
--disable-debug \
--disable-rpath \
--with-bz2 \
--with-curl \
--with-gettext \
--with-iconv \
--with-openssl \
--with-gd \
--with-mcrypt \
--with-pcre-regex \
--with-zlib
make -j4 > /dev/null
sudo make install
sudo mkdir /etc/php52
sudo cp php.ini-recommended /etc/php52/php.ini
3) créer un wrapper fastcgi script.
créer le fichier /usr/local/php52/bin/fcgiwrapper.sh
#!/bin/bash
PHP_FCGI_MAX_REQUESTS=10000
export PHP_FCGI_MAX_REQUESTS
exec /usr/local/php52/bin/php-cgi
chmod a+x /usr/local/php52/bin/fcgiwrapper.sh
Build and install php-5.3 with fpm enabled
wget http://cn.php.net/get/php-5.3.6.tar.bz2/from/this/mirror
tar -xjf php-5.3.6.tar.bz2
cd php-5.3.6
./configure --prefix=/usr/local/php53 \
--with-config-file-path=/etc/php53 \
--with-config-file-scan-dir=/etc/php53/php.d \
--enable-fpm \
--with-fpm-user=apache \
--with-fpm-group=apache \
--with-libdir=lib64 \
--with-mysql \
--with-mysqli \
--enable-mbstring \
--disable-debug \
--disable-rpath \
--with-bz2 \
--with-curl \
--with-gettext \
--with-iconv \
--with-openssl \
--with-gd \
--with-mcrypt \
--with-pcre-regex \
--with-zlib
make -j4 && sudo make install
sudo mkdir /etc/php53
sudo cp php.ini-production /etc/php53/php.ini
sed -i -e 's#php_fpm_CONF=\${prefix}/etc/php-fpm.conf#php_fpm_CONF=/etc/php53/php-fpm.conf#' \
sapi/fpm/init.d.php-fpm
sudo cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
sudo chmod a+x /etc/init.d/php-fpm
sudo /sbin/chkconfig --add php-fpm
sudo /sbin/chkconfig php-fpm on
sudo cp sapi/fpm/php-fpm.conf /etc/php53/
Configue php-fpm
Editez /etc/php53/php-fpm.conf, modifiez certains paramètres. Cette étape consiste principalement à décommenter certains paramètres, vous pouvez ajuster les valeurs si vous le souhaitez.
pid = run/php-fpm.pid
listen = 127.0.0.1:9000
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
Ensuite, lancez fpm
sudo /etc/init.d/php-fpm start
Installer et configurer mod_fastcgi, mod_fcgid
sudo yum install libtool httpd-devel apr-devel
wget http://www.fastcgi.com/dist/mod_fastcgi-current.tar.gz
tar -xzf mod_fastcgi-current.tar.gz
cd mod_fastcgi-2.4.6
cp Makefile.AP2 Makefile
sudo make top_dir=/usr/lib64/httpd/ install
sudo sh -c "echo 'LoadModule fastcgi_module modules/mod_fastcgi.so' > /etc/httpd/conf.d/mod_fastcgi.conf"
yum install mod_fcgid
Configurer et tester les hôtes virtuels
1) Ajoutez la ligne suivante au fichier /etc/hosts
127.0.0.1 web1.example.com web2.example.com web3.example.com
2) Créer le document web Root et y placer un index.php pour afficher phpinfo passer à l'utilisateur Root, exécuter
mkdir /var/www/fcgi-bin
for i in {1..3}; do
web_root=/var/www/web$i
mkdir $web_root
echo "<?php phpinfo(); ?>" > $web_root/index.php
done
Note : Le répertoire vide /var/www/fcgi-bin est obligatoire, NE LE SUPPRIMEZ PAS PLUS TARD.
3) Créer le fichier de configuration d'Apache (ajouter à httpd.conf)
NameVirtualHost *:80
# module settings
# mod_fcgid
<IfModule mod_fcgid.c>
idletimeout 3600
processlifetime 7200
maxprocesscount 17
maxrequestsperprocess 16
ipcconnecttimeout 60
ipccommtimeout 90
</IfModule>
# mod_fastcgi with php-fpm
<IfModule mod_fastcgi.c>
FastCgiExternalServer /var/www/fcgi-bin/php-fpm -host 127.0.0.1:9000
</IfModule>
# virtual hosts...
#################################################################
#1st virtual host, use mod_php, run php-5.1
#################################################################
<VirtualHost *:80>
ServerName web1.example.com
DocumentRoot "/var/www/web1"
<ifmodule mod_php5.c>
<FilesMatch \.php$>
AddHandler php5-script .php
</FilesMatch>
</IfModule>
<Directory "/var/www/web1">
DirectoryIndex index.php index.html index.htm
Options -Indexes FollowSymLinks
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
#################################################################
#2nd virtual host, use mod_fcgid, run php-5.2
#################################################################
<VirtualHost *:80>
ServerName web2.example.com
DocumentRoot "/var/www/web2"
<IfModule mod_fcgid.c>
AddHandler fcgid-script .php
FCGIWrapper /usr/local/php52/bin/fcgiwrapper.sh
</IfModule>
<Directory "/var/www/web2">
DirectoryIndex index.php index.html index.htm
Options -Indexes FollowSymLinks +ExecCGI
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
#################################################################
#3rd virtual host, use mod_fastcgi + php-fpm, run php-5.3
#################################################################
<VirtualHost *:80>
ServerName web3.example.com
DocumentRoot "/var/www/web3"
<IfModule mod_fastcgi.c>
ScriptAlias /fcgi-bin/ /var/www/fcgi-bin/
AddHandler php5-fastcgi .php
Action php5-fastcgi /fcgi-bin/php-fpm
</IfModule>
<Directory "/var/www/web3">
DirectoryIndex index.php index.html index.htm
Options -Indexes FollowSymLinks +ExecCGI
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
4) redémarrer apache. visiter les 3 sites respectivement pour voir phpinfo et valider le résultat. ie :
http://web1.example.com
http://web2.example.com
http://web3.example.com
Si tout est OK, vous pouvez utiliser l'un des 3 hôtes virtuels comme modèle pour créer un nouvel hôte virtuel, avec la version php souhaitée.
0 votes
Vous devriez pouvoir utiliser une variable PATH, mais je ne suis pas sûr de moi et je ne répondrai donc pas à la place du représentant.
0 votes
Comment utiliser plusieurs versions de PHP (PHP-FPM & FastCGI) avec ISPConfig 3 (Ubuntu 12.10) - @hek2mgl : Les questions sur les outils de développement ne sont pas hors sujet.
0 votes
@hakre D'accord, l'utilisation de FPM rendrait moins probable que des versions multiples s'affectent mutuellement lorsqu'elles sont chargées en tant que module Apache :)
0 votes
@Jack : Argh, pas Apache Module, FCGI ;)
0 votes
Jusqu'à présent, j'ai essayé phpbrew et php-version mais ils semblent tous deux ne pas compiler PHP.