16 votos

Múltiples versiones de php simultáneamente en Ubuntu

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:

  1. http://dbforch.wordpress.com/2010/05/21/apache2-fastcgi-multiple-php-versions-ubuntulucid-10-04/
  2. 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.

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

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

  3. Luego habilito suaxec y fastcgi para apache y desabe mod_php con sudo a2enmod fastcgi actions suexec && sudo a2dismod php5

  4. 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>
  5. 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
  6. 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>
  7. 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.

2voto

user138869 Puntos 21

En tus virtualhosts has añadido un manejador, pero no lo has configurado y por eso no se procesa. Añade:

<FilesMatch "\.php$">
    SetHandler php-cgi
</FilesMatch>

antes de </Directory> en cada archivo de hosts virtuales.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: