Quiero ser capaz de ejecutar múltiples versiones de php en mi caja de desarrollo corriendo Ubuntu 12.04. Lo que quiero lograr es que cuando uso localhost como dominio se use una versión por defecto (digamos php 5.3.17). Cuando uso 547.localhost como dominio se usa php 5.4.7. He visto algunos tutoriales para conseguir que esto funcione usando fastcgi pero hasta ahora no he conseguido que funcione. He mirado estos tutoriales:
- http://dbforch.wordpress.com/2010/05/21/apache2-fastcgi-multiple-php-versions-ubuntulucid-10-04/
- http://www.metod.si/multiple-php-versions-with-apache-2-fastcgi-phpfarm-on-ubuntu/
Por lo que veo, he hecho todo lo necesario. El problema es que php simplemente no se ejecuta. Cuando voy a http://localhost/somephpfile.php
sólo muestra la fuente del archivo php. Lo mismo para http://547.localhost/somephpfile.php
.
Voy a desglosar los pasos que he dado con la esperanza de que alguien sea capaz de detectar lo que se me ha escapado.
-
Primero instalé una pila de lámparas por defecto usando
sudo apt-get install lamp-server^ phpmyadmin
. Después de esto tuve un servidor de desarrollo de trabajo que ejecuta la versión del repositorio de php. -
Luego usé phpfarm para crear dos instalaciones de php, una para 5.3.17 y otra para 5.4.7. La localización de phpfarm es
/etc/php/phpfarm
para que los ejecutables estén en/etc/php/phpfarm/inst/php-{version}/bin
-
Luego habilito suaxec y fastcgi para apache y desabe mod_php con
sudo a2enmod fastcgi actions suexec && sudo a2dismod php5
-
A continuación, edité
/etc/apache2/mods-enabled/fastcgi.conf
para leer:<IfModule mod_fastcgi.c> FastCgiIpcDir /var/lib/apache2/fastcgi FastCgiWrapper /usr/lib/apache2/suexec FastCgiConfig -idle-timeout 110 -killInterval 120 -pass-header HTTP_AUTHORIZATION -autoUpdate ScriptAlias /php-fcgi/ /var/www/cgi-bin/ </IfModule>
-
Entonces en
/var/www/
He creado una carpeta cgi-bin y en esta carpeta dos archivos, para cada una de las dos versiones de php como sigue (muestro sólo el de la 5.3.17/var/www/php5317.fcgi
):#!/bin/sh # you can change the PHP version here. version="5.3.17" # php.ini file location, */php-5.2.13/lib equals */php-5.2.13/lib/php.ini. PHPRC=/etc/php/phpfarm/inst/php-${version}/lib/php.ini export PHPRC PHP_FCGI_CHILDREN=3 export PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_MAX_REQUESTS # which php-cgi binary to execute exec /etc/php/phpfarm/inst/php-${version}/bin/php-cgi
-
El último paso fue crear hosts virtuales. Al final tengo tres archivos en
/etc/apache2/sites-enabled
: 000-default, php5.3.17 y php5.4.7 con el siguiente contenido:por defecto:
<VirtualHost *:80> ServerName localhost DocumentRoot /var/www <Directory "/var/www"> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all AddHandler php-cgi .php Action php-cgi /php-fcgi/php5317.fcgi </Directory> </VirtualHost>
php5.3.17:
<VirtualHost *:80> ServerName 5317.localhost DocumentRoot /var/www <Directory "/var/www"> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all AddHandler php-cgi .php Action php-cgi /php-fcgi/php5317.fcgi </Directory> </VirtualHost>
php5.4.7:
<VirtualHost *:80> ServerName 547.localhost DocumentRoot /var/www <Directory "/var/www"> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all AddHandler php-cgi .php Action php-cgi /php-fcgi/php547.fcgi </Directory> </VirtualHost>
-
Finalmente cambié /etc/hosts para que dijera
127.0.0.1 localhost 127.0.0.1 547.localhost 127.0.0.1 5317.localhost # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters
Ahora esperaría que las cosas funcionaran, pero lamentablemente no es así. En lugar de que un archivo php se ejecuta a través de php sólo salidas del archivo crudo.
Debe haber algo que se me haya pasado por alto, pero he realizado el proceso muchas veces y no consigo averiguar dónde falla.