Tabla de Contenidos
Instalar múltiples versiones de PHP en Apache
En ocasiones hemos de tener varias versiones de PHP, bien para realizar pruebas o porque los paquetes prefabricados (oscommerce, wordpress, joomla, etc…) requieren de una cierta versión.
Versiones de PHP:
- 5.6.31
- 7.0.21
- 7.1.7
Desactivamos el PHP-MOD (Si ya estaba activado)
a2dismod php5
Repositorio para UBUNTU
### Agregamos el repositorio ### add-apt-repository ppa:ondrej/php
Repositorio para DEBIAN
#### Modificar repositorios #### cp /etc/apt/sources.list /etc/apt/sources.list_user var1="main" var2="main contrib non-free" sed "s|$var1|$var2|" /etc/apt/sources.list_user > /etc/apt/sources.list rm /etc/apt/sources.list_user ### Agregamos el repositorio ### apt-get install apt-transport-https lsb-release ca-certificates wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list
Instalación de paquetes
### Actualizamos ### apt-get update ### Instalamos Comunes ### apt-get install libapache2-mod-fastcgi ### Instalamos PHP 5.6.31### apt-get install php5.6-fpm php5.6-curl php5.6 php5.6-dev php5.6-mcrypt php5.6-mbstring php5.6-mysql php5.6-zip php5.6-gd php5.6-xml ### Instalamos PHP 7.0.21### apt-get install php7.0-fpm php7.0-fpm php7.0 php7.0-dev php7.0-mbstring php7.0-mysql php7.0-zip php7.0-gd php7.0-xml php7.0-curl php7.0-intl php7.0-json php7.0-mcrypt ### Instalamos PHP 7.1.7### apt-get install php7.1-fpm php7.1-fpm php7.1 php7.1-dev php7.1-mbstring php7.1-mysql php7.1-zip php7.1-gd php7.1-xml php7.1-curl php7.1-intl php7.1-json php7.1-mcrypt ### Habilitamos los modulos en apache ### a2enmod actions a2enmod fastcgi
Agregamos en /etc/apache2/sites-available/000-default.conf
<IfModule mod_fastcgi.c> AddHandler php56-fcgi-www .php Action php56-fcgi-www /php56-fcgi-www Alias /php56-fcgi-www /usr/lib/cgi-bin/php56-fcgi-www FastCgiExternalServer /usr/lib/cgi-bin/php56-fcgi-www -socket /run/php/php5.6-fpm.sock -pass-header Authorization <Directory "/usr/lib/cgi-bin"> Require all granted </Directory> </IfModule> <IfModule mod_fastcgi.c> AddHandler php70-fcgi-www .php Action php70-fcgi-www /php70-fcgi-www Alias /php70-fcgi-www /usr/lib/cgi-bin/php70-fcgi-www FastCgiExternalServer /usr/lib/cgi-bin/php70-fcgi-www -socket /run/php/php7.0-fpm.sock -pass-header Authorization <Directory "/usr/lib/cgi-bin"> Require all granted </Directory> </IfModule> <IfModule mod_fastcgi.c> AddHandler php71-fcgi-www .php Action php71-fcgi-www /php71-fcgi-www Alias /php71-fcgi-www /usr/lib/cgi-bin/php71-fcgi-www FastCgiExternalServer /usr/lib/cgi-bin/php71-fcgi-www -socket /run/php/php7.1-fpm.sock -pass-header Authorization <Directory "/usr/lib/cgi-bin"> Require all granted </Directory> </IfModule>
Configuración de VirtualHost
Dentro de los diferentes VirtualHost que tengamos deberemos de agregar lo siguiente entre <VirtualHost *:80></VirtualHost>, modificando “php70” por la versión que queramos usar, definidas previamente en el archivo 000-default.conf.
<IfModule mod_fastcgi.c> <FilesMatch ".+\.ph(p[345]?|t|tml)$"> SetHandler php70-fcgi-www </FilesMatch> </IfModule>
Modificación de usuario
En el caso de que se tenga un usuario/grupo configurado diferente a www-data (por defecto), habría que:
Modificar el propietario de la carpeta “/var/lib/apache2/fastcgi” con el usuario mismo usuario que use apache2, dentro de su configuración.
Modificar dentro de los archivos “/etc/php/X.X/fpm/pool.d/www.conf” las siguientes lineas:
- user = www-data
- group = www-data
Donde cambiaremos www-data por el usuario definido anterior mente.
Y las X.X de la ruta por la versión de php.
Reiniciaremos el apache para que se apliquen todos los cambios
sudo service apache2 restart
Y si todo a ido bien creando un info.php en los diferentes dominios que tengamos podremos ver la versión asignada.
Anotación
Al estar PHP en modo MPF/CGI, no se permiten las etiquetas php_flag ni php_value en el arhchivo .htaccess, en caso de encontrarse alguna de estas, el servidor devolverá error 500.
Para estos casos se ha de utilizar el archivo “.user.ini”.
Por ejemplo:
En .htaccess:
### Usamos IfModule para controlar si PHP esta en MOD ### <IfModule mod_php5.c> php_value max_input_vars 6000 </IfModule>
En .user.ini:
max_input_vars=6000
Agradecimientos a las fuentes originales: <html><a href=“https://medium.com/@sbuckpesch/run-multiple-php-version-on-the-same-server-using-php-fpm-and-xdebug-on-ubuntu-16-04-6a84f5b7d7ce” target=“blank”>medium.com</a> y a <a href=“https://www.colinodell.com/blog/2016-12/installing-php-7-1” target=“blank”>colinodell.com</a> </html>
Nota: Mirado como hacer que funcione en Debian 9 (stretch).
Última actualización: 21/07/2017