Especialista en Software
02 Nov 2018

PHP 5 y PHP 7 en paralelo

php 5 y php 7

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?.

 

CLI • PHP Leave a comment