16 votos

Varias versiones de php al mismo tiempo en Ubuntu

Quiero ser capaz de ejecutar varias versiones de php en mi máquina de desarrollo con Ubuntu 12.04. Lo que quiero lograr es que cuando yo uso localhost como dominio predeterminado se utiliza (digamos php 5.3.17). Cuando yo uso 547.localhost como dominio de php 5.4.7 se utiliza. He visto algunos tutoriales para obtener este trabajo usando fastcgi, pero hasta ahora no he sido capaz de llegar al trabajo. He mirado en 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/

Tan lejos como puedo ver que he hecho todo lo que se necesita. El problema es que php no se ejecuta. Cuando voy a la http://localhost/somephpfile.php apenas salidas de la fuente del archivo php. El mismo para http://547.localhost/somephpfile.php.

Voy a romper ¿qué pasos me llevaron en la esperanza de que alguien es capaz de detectar lo que me perdí.

  1. Primero he instalado un defecto de la lámpara de la pila usando sudo apt-get install lamp-server^ phpmyadmin. Después de esto, yo tenía un trabajo de desarrollo del servidor que ejecuta el repositorio de la versión de php.
  2. Luego he utilizado phpfarm para crear dos de php se instala, uno para 5.3.17 y uno para 5.4.7. La ubicación de phpfarm es /etc/php/phpfarm, por lo que los ejecutables que se encuentran en /etc/php/phpfarm/inst/php-{version}/bin
  3. Luego de habilitar el suaxec y fastcgi para apache y disabe con mod_php sudo a2enmod fastcgi actions suexec && sudo a2dismod php5
  4. A continuación, editar /etc/apache2/mods-enabled/fastcgi.conf para que se lea:

    <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. A continuación, en /var/www/ he creado una carpeta cgi-bin y en esta carpeta los dos archivos, para cada una de las dos versiones de php de la siguiente manera (I mostrar sólo el uno por 5.3.17 /var/www/php5317.fcgi): #!/bin/sh # se puede cambiar la versión de PHP aquí. version="5.3.17" # php.ubicación del archivo ini, */php 5.2.13/lib equivale a */php 5.2.13/lib/php.ini. PHPRC=/etc/php/phpfarm/inst/php${version}/lib/php.ini exportación 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 la creación de las máquinas 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 he cambiado /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 yo esperaría a que las cosas funcionen, pero lamentablemente no lo hacen. En lugar de que un archivos php se ejecuta a través de php sólo salidas del archivo raw.

Debe haber algo que perder aquí, pero he pasado por el proceso muchas veces y no puedo averiguar de dónde sale mal.

2voto

user138869 Puntos 21

En su virtualhosts agregó un controlador, pero no configurar el controlador que es por eso que no es procesado. Añadir:

<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: