Muchas veces es necesario sobre todo para desarrolladores hacer pruebas con varias versiones de PHP. En este articulo presentamos una manera de instalar tantas versiones de PHP como queramos con la única restricción que obviamente podemos usar una a la vez.

Al final hay un script que nos permite fácilmente elegir que versión queremos usar. El primer paso es instalar Apache, Mysql y todos los paquetes de desarrollo que necesitaremos para compilar PHP. Cabe aclarar que según los parámetros que le pasemos al configure podemos necesitar mas paquetes. Para este ejemplo haremos la instalación mas simple solo con soporte de Mysql. instalaremos las versiones de PHP 5.3.2, 5.2.13 y 4.4.9. Y se asume que haremos la instalación en KUbuntu 9.10 y con un usuario prueba que tiene permiso para hacer sudo.

En mi instalación de KUbuntu 9.10 el archivo /etc/apache2/httpd.conf esta vacío  y la instalación de PHP requiere que por lo menos tenga una sentencia Load Module así que le agregamos las siguientes lineas (En caso que contenga  alguna sentencia LoadModule saltear este paso)

# Dummy LoadModule directive to aid module installations
#LoadModule dummy_module /usr/lib/apache2/modules/mod_dummy.so

Instalamos los paquetes requeridos usando

sudo apt-get install flex apache2-threaded-dev libxml2-dev apache2 apache2-mpm-prefork apache2-threaded-dev apache2-utils apache2.2-bin apache2.2-common libapache2-mod-auth-mysql mysql-server-5.1

Descargamos y descompactamos las tres versiones de PHP

mkdir /home/prueba/sources
cd /home/prueba/sources
wget http://www.php.net/get/php-5.3.2.tar.gz/from/ar.php.net/mirror
wget http://www.php.net/get/php-4.4.9.tar.gz/from/this/mirror
wget http://www.php.net/get/php-5.2.13.tar.gz/from/this/mirror
tar -xvzf php-5.2.13.tar.gz
tar -xvzf php-4.4.9.tar.gz
tar -xvzf php-5.3.2.tar.gz

Compilamos e instalamos PHP 5.3.2 (Verificar que no se produce ningún error durante la compilación e instalación)

cd /home/prueba/sources/php-5.3.2/
sudo ./configure --prefix=/usr/local/php/php_5.3.2 --with-apxs2=/usr/bin/apxs2 --with-mysql
sudo make
sudo make install
sudo cp php.ini-recommended /usr/local/php/php_5.3.2/lib/php.ini
sudo mkdir /usr/local/php/php_5.3.2/modules
sudo mv /usr/lib/apache2/modules/libphp5.so /usr/local/php/php_5.3.2/modules

Compilamos e instalamos PHP 5.2.13 (Verificar que no se produce ningún error durante la compilación e instalación)

cd /home/prueba/sources/php-5.2.13/
sudo ./configure --prefix=/usr/local/php/php_5.2.13 --with-apxs2=/usr/bin/apxs2 --with-mysql
sudo make
sudo make install
sudo cp php.ini-recommended /usr/local/php/php_5.2.13/lib/php.ini
sudo mkdir /usr/local/php/php_5.2.13/modules
sudo mv /usr/lib/apache2/modules/libphp5.so /usr/local/php/php_5.2.13/modules

Compilamos e instalamos PHP 4.4.9 (Verificar que no se produce ningún error durante la compilación e instalación)

cd /home/prueba/sources/php-4.4.9/
sudo ./configure --prefix=/usr/local/php/php_4.4.9 --with-apxs2=/usr/bin/apxs2 --with-mysql
sudo make
sudo make install
sudo cp php.ini-recommended /usr/local/php/php_4.4.9/lib/php.ini
sudo mkdir /usr/local/php/php_4.4.9/modules
sudo mv /usr/lib/apache2/modules/libphp4.so /usr/local/php/php_4.4.9/modules

Creamos los archivos de configuración de cada versión. Es probable que las lineas que contienen LoadModule sea necesario correrlas de a una.

sudo touch /usr/local/php/php5.3.2.conf
sudo touch /usr/local/php/php4.4.9.conf
sudo touch /usr/local/php/php5.2.13.conf
sudo echo 'LoadModule php5_module /usr/local/php/php_5.3.2/modules/libphp5.so' | sudo tee /usr/local/php/php5.3.2.conf > /dev/null
sudo echo 'LoadModule php5_module /usr/local/php/php_5.2.13/modules/libphp5.so' | sudo tee /usr/local/php/php5.2.13.conf > /dev/null
sudo echo 'LoadModule php4_module /usr/local/php/php_4.4.9/modules/libphp4.so' | sudo tee /usr/local/php/php4.4.9.conf > /dev/null
sudo ln -s /usr/local/php/php5.3.2.conf /etc/apache2/php.conf

Para finalizar editamos el archivo /etc/apache2/httpd.conf eliminamos la lineas que contienen LoadModule php5 y LoadModule php4. Luego al final agregamos la siguiente linea

Include /etc/apache2/php.conf

Generamos el script con el que arrancaremos las distintas versiones para esto hacemos

sudo touch /bin/php.sh
sudo chmod 744 /bin/php.sh

Lo editamos y le agregamos el siguiente contenido

#!/bin/bash
opcion=0
cat << CABECERAMENU
Opciones del menu
1 => PHP 4.4.9
2 => PHP 5.2.13
3 => PHP 5.3.2
CABECERAMENU
echo -n "Ingrese su eleccion: "
read opcion
echo
case $opcion in
"1")
rm /etc/apache2/php.conf
ln -s /usr/local/php/php4.4.9.conf /etc/apache2/php.conf
/etc/init.d/apache2 restart
;;
"2")
rm /etc/apache2/php.conf
ln -s /usr/local/php/php5.2.13.conf /etc/apache2/php.conf
/etc/init.d/apache2 restart
;;
"3")
rm /etc/apache2/php.conf
ln -s /usr/local/php/php5.3.2.conf /etc/apache2/php.conf
/etc/init.d/apache2 restart
;;
*)
echo "Opcion no valida"
;;
esac

Cuando ejecutemos el comando

sudo /bin/php.sh

Veremos una pantalla como la que sigue.

Ingresamos el numero (1,2,3) del PHP que queremos usar y presionamos enter con lo que se reiniciara apache con la versión elegida.

Para verificar que funcione creamos una archivo info.php  en /var/www con el sichiente contenido

<?php
phpinfo();
?>

Si navegamos la dirección http://127.0.0.1/info.php deberíamos ver algo asi