Pregunta Múltiples versiones php simultáneamente en Ubuntu


Quiero poder ejecutar varias versiones de php en mi cuadro de desarrollo que ejecuta 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 php 5.4.7 se usa. He visto algunos tutoriales para hacer que esto funcione con fastcgi, pero hasta ahora no he podido hacerlo funcionar. 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 puedo ver, he hecho todo lo necesario. El problema es que PHP simplemente no se ejecuta. Cuando voy a http://localhost/somephpfile.php simplemente genera la fuente del archivo php. Lo mismo para http://547.localhost/somephpfile.php.

Voy a desglosar los pasos que tomé con la esperanza de que alguien sea capaz de detectar lo que me perdí.

  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 en funcionamiento que ejecutaba la versión de 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 localidad de phpfarm es. /etc/php/phpfarm, entonces los ejecutables estan en /etc/php/phpfarm/inst/php-{version}/bin
  3. Luego habilito suaxec y fastcgi para apache y disabe mod_php con sudo a2enmod fastcgi actions suexec && sudo a2dismod php5
  4. A continuación, edité /etc/apache2/mods-enabled/fastcgi.conf 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/ Creé una carpeta cgi-bin y en esta carpeta dos archivos, para cada una de las dos versiones de php de la siguiente manera (muestro solo la 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
    
  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 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>
    
  7. 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 eso, un archivo php se ejecuta a través de php, solo genera el archivo en bruto.

Debe haber algo que me perdí aquí, pero he pasado por el proceso muchas veces y no puedo entender dónde está mal.


16
2017-09-25 11:35


origen


Una cosa que encontré fue que si nombraba los archivos cgi como lo hizo, no funcionó. Intenta cambiar el nombre /var/www/cgi-bin/php-cgi-5.4.7 a /var/www/cgi-bin/php54.fcgi por ejemplo o simplemente /var/www/cgi-bin/php.fcgi. ¿Puedes comprobar si eso ayuda? Sólo para la versión 5.4.7.
He comprobado y lamentablemente esto no ayuda. He cambiado el host virtual para reflejar este cambio, así que la línea de acción se lee Action php-cgi /php-fcgi/php547.fcgi
He actualizado la publicación para reflejar estos cambios ya que creo que es bueno tenerla así de todos modos
Hmm, voy a comprobar otras posibilidades entonces. :)
Me preguntaba, probablemente no necesito las cosas de suexec ya que no necesito diferentes usuarios para cada versión de php, ¿verdad?


Respuestas:


En sus hosts virtuales, agregó un controlador, pero no configuró el controlador, por lo que no se procesa. Añadir:

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

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


2
2017-09-28 14:21





Me gustó este breve resumen paso a paso por VerDoubleYou Y quería probarlo yo mismo. Lo que faltaba era

  • sudo chmod +x /var/www/cgi-bin/*
    • Como esto no se ejecutó, Apache no pudo ejecutar los scripts cgi
    • Esto es necesario para la línea. Action php-cgi /php-fcgi/php<version>.fcgi  en el vhost.conf expediente
  • sudo apt-get install apache2-suexec-pristine libapache2-mod-fastcgi
    • Faltaban el ejecutable suexec y el módulo fastcgi, tenían que instalarse primero
    • El ejecutable suexec es necesario para la línea. FastCgiWrapper /usr/lib/apache2/suexec en el fastcgi.conf expediente
  • También tuve que quitar la línea. FastCgiIpcDir /var/lib/apache2/fastcgi
    • de lo contrario me aparece el mensaje de error FastCgiIpcDir /var/lib/apache2/fastcgi: already defined as "/var/lib/apache2/fastcgi"

Para cualquiera que intente establecer php_admin_value y php_value a través de archivos .htaccess o vhosts: Esto no es posible con FCGI. En su lugar puedes usar archivos .user.ini para configurar el directorio específico de configuraciones php.ini.


0
2017-08-06 09:48