Con frecuencia necesitamos trabajar con dos versiones de PHP en el mismo servidor. Como desarrolladores web a menudo trabajamos en 2 o más proyectos a la vez. Alternar las version de PHP es una opción. Pero mucho mejor si trabajamos con PHP 5 y PHP 7 en paralelo.
En este tutorial vamos a ver cómo configurar Apache para trabajar con PHP 5.6 y 7.2 en paralelo. Parto del hecho que tanto Apache como PHP 5 y PHP 7 ya están instalados. Si no es así aquí puedes ver como instalarlos.
Instalación de módulos
Para trabajar con las dos versiones vamos a usar los módulos FPM y FastCGI. Lo primero es instalar el módulo "libapache2-mod-fastcgi":
sudo apt install libapache2-mod-fastcgi
Si te aparece este mensaje
Package 'libapache2-mod-fastcgi' has no installation candidate
Intenta instalarlo de esta manera:
cd /tmp && wget http://mirrors.kernel.org/ubuntu/pool/multiverse/liba/libapache-mod-fastcgi/libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb sudo dpkg -i libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb; sudo apt install -f
Ahora instalaremos el módulo fpm para cada versión:
sudo apt install php5.6-fpm sudo apt install php7.2-fpm
Para asegurarse que los servicios php-fpm estan corriendo usa estos comandos:
sudo systemctl status php5.6-fpm sudo systemctl status php7.2-fpm
Ahora vamos a habilitar algunos módulos para integrar PHP FPM y FastCGI con Apache server.
sudo a2enmod actions fastcgi alias proxy_fcgi
Virtualhosts
Ahora vamos a configurar cada proyecto con diferente versión de PHP. Para ello vamos al directorio donde se encuentran la configuración de los sitios y vamos a crear un virtualhost por cada uno.
cd /etc/apache2/sites-available/
sudo vim miproyectophp56.conf
Y vamos a agregar el siguiente contenido. Asegurese de ajustar el ServerName y DocumentRoot de acuerdo al dominio y la ubicación del proyecto.
<VirtualHost *:80> ServerName php56.projecto.com DocumentRoot /var/www/php56 <Directory /var/www/php56> Options -Indexes +FollowSymLinks +MultiViews AllowOverride All Require all granted </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>
De la misma manera lo hacemos para el proyecto en PHP 7
sudo vim miproyectophp72.conf
<VirtualHost *:80> ServerName php72.example.com DocumentRoot /var/www/php72 <Directory /var/www/php72> Options -Indexes +FollowSymLinks +MultiViews AllowOverride All Require all granted </Directory> <FilesMatch \.php$> SetHandler "proxy:unix:/var/run/php/php7.2-fpm.sock|fcgi://localhost/" </FilesMatch> </VirtualHost>
Por último vamos a activar ambos sitios para poder accederlos a través del navegador:
sudo a2ensite miproyectophp56.conf sudo a2ensite miproyectophp72.conf sudo systemctl restart apache2
Conclusión
Con estos pasos podrémos acceder a varios proyectos con diferentes versiones de PHP sin tener que alternar manualmente la versión. Sin embargo queda algo pendiente. ¿Qué pasa con los comandos de consola?. Cuando corremos comandos o ejecutamos archivos php a través de la consola va ha persistir una única versión. ¿Qué podríamos hacer para este caso?.