Quiero poder ejecutar múltiples versiones de php en mi caja de desarrollo con Ubuntu 12.04. Lo que quiero lograr es que cuando uso localhost como dominio se use un valor predeterminado (digamos php 5.3.17). Cuando uso 547.localhost como dominio se usa php 5.4.7. He visto algunos tutoriales para que esto funcione con fastcgi, pero hasta ahora no he podido hacerlo funcionar. He visto 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 puedo ver, he hecho todo lo necesario. El problema es que php simplemente no se ejecuta. Cuando voy a http://localhost/somephpfile.php
él, solo genera la fuente del archivo php. Lo mismo para http://547.localhost/somephpfile.php
.
Desglosaré los pasos que tomé con la esperanza de que alguien pueda detectar lo que me perdí.
- Primero instalé una pila de lámparas predeterminada usando
sudo apt-get install lamp-server^ phpmyadmin
. Después de esto, tenía un servidor de desarrollo en funcionamiento que ejecutaba la versión de repositorio de php. - Luego usé phpfarm para crear dos instalaciones de php, una para 5.3.17 y otra para 5.4.7. La ubicación de phpfarm es
/etc/php/phpfarm
, por lo que los ejecutables están en/etc/php/phpfarm/inst/php-{version}/bin
- Luego habilito suaxec y fastcgi para apache y desactive 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>
Luego
/var/www/
, creé una carpeta cgi-bin y en esta carpeta dos archivos, para cada una de las dos versiones de php de la siguiente manera (solo muestro el de 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 los siguientes contenidos: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 leer
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 funcionen, pero lamentablemente no lo hacen. En lugar de que un archivo php se ejecute a través de php, solo genera el archivo sin formato.
Debe haber algo que me perdí aquí, pero he pasado por el proceso muchas veces y no puedo entender dónde sale mal.
/var/www/cgi-bin/php-cgi-5.4.7
de/var/www/cgi-bin/php54.fcgi
, por ejemplo, o simplemente/var/www/cgi-bin/php.fcgi
. ¿Puedes comprobar si eso ayuda? Solo para la versión 5.4.7.Action php-cgi /php-fcgi/php547.fcgi
Respuestas:
En sus hosts virtuales, agregó un controlador, pero no configuró el controlador, por lo que no se procesa. Añadir:
antes
</Directory>
en cada archivo de hosts virtuales.fuente
Me gustó esta breve descripción paso a paso de SeeDoubleYou y quería probarla yo mismo. Lo que faltaba era
sudo chmod +x /var/www/cgi-bin/*
Action php-cgi /php-fcgi/php<version>.fcgi
en elvhost.conf
archivosudo apt-get install apache2-suexec-pristine libapache2-mod-fastcgi
FastCgiWrapper /usr/lib/apache2/suexec
en elfastcgi.conf
archivoFastCgiIpcDir /var/lib/apache2/fastcgi
FastCgiIpcDir /var/lib/apache2/fastcgi: already defined as "/var/lib/apache2/fastcgi"
Para cualquiera que intente configurar php_admin_value y php_value a través de archivos .htaccess o vhosts: esto no es posible con FCGI. En su lugar, puede usar archivos .user.ini para establecer configuraciones específicas de directorio php.ini.
fuente