Più versioni php contemporaneamente su Ubuntu


16

Voglio essere in grado di eseguire più versioni php sul mio box di sviluppo con Ubuntu 12.04. Quello che voglio realizzare è che quando uso localhost come dominio viene utilizzato un valore predefinito (diciamo php 5.3.17). Quando uso 547.localhost come dominio php 5.4.7 viene utilizzato. Ho visto alcuni tutorial per farlo funzionare usando fastcgi ma fino ad ora non sono stato in grado di farlo funzionare. Ho visto questi tutorial:

  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/

Per quanto posso vedere, ho fatto tutto il necessario. Il problema è che php semplicemente non funziona. Quando ci vado http://localhost/somephpfile.php, genera l'output del file php. Lo stesso per http://547.localhost/somephpfile.php.

Analizzerò quali passi ho fatto nella speranza che qualcuno sia in grado di individuare ciò che ho perso.

  1. Per prima cosa ho installato uno stack di lampade predefinito utilizzando sudo apt-get install lamp-server^ phpmyadmin. Dopo questo ho avuto un server di sviluppo funzionante con la versione del repository di php.
  2. Quindi ho usato phpfarm per creare due installazioni php, una per 5.3.17 e una per 5.4.7. La localizzazione di phpfarm è /etc/php/phpfarm, quindi gli eseguibili sono dentro/etc/php/phpfarm/inst/php-{version}/bin
  3. Quindi abilito suaxec e fastcgi per apache e disabe mod_php con sudo a2enmod fastcgi actions suexec && sudo a2dismod php5
  4. Successivamente, ho modificato /etc/apache2/mods-enabled/fastcgi.confper leggere:

    <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. Quindi in /var/www/ho creato una cartella cgi-bin e in questa cartella due file, per ciascuna delle due versioni php come segue (mostro solo quella per 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. L'ultimo passo è stato quello di creare host virtuali. Alla fine ho tre file in /etc/apache2/sites-enabled: 000-default, php5.3.17 e php5.4.7 con i seguenti contenuti:

    predefinito:

    <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. Alla fine ho cambiato / etc / hosts per leggere

    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
    

Ora mi aspetto che le cose funzionino, ma purtroppo non lo fanno. Invece che un file php passa attraverso php, genera semplicemente il file raw.

Deve esserci qualcosa che mi mancava qui, ma ho affrontato il processo molte volte e non riesco a capire dove vada storto.


1 cosa che ho riscontrato è che se ho chiamato i file cgi come te non ha funzionato. Prova a rinominare /var/www/cgi-bin/php-cgi-5.4.7ad /var/www/cgi-bin/php54.fcgiesempio o semplicemente /var/www/cgi-bin/php.fcgi. Puoi controllare se questo aiuta? Solo per la versione 5.4.7.

Ho controllato e sfortunatamente questo non aiuta. Ho cambiato il virtualhost per riflettere anche questo cambiamento, quindi la linea di azione ha lettoAction php-cgi /php-fcgi/php547.fcgi

Ho aggiornato il post per riflettere questi cambiamenti poiché penso che sia bello averlo così comunque

Hmm, allora verificherò altre possibilità. :)

Mi chiedevo, probabilmente non ho bisogno delle cose suexec poiché non ho bisogno di utenti diversi per ogni versione di php, giusto?

Risposte:


2

Nei tuoi host virtuali hai aggiunto un gestore, ma non hai impostato il gestore, motivo per cui non viene elaborato. Inserisci:

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

prima </Directory>in ogni file di host virtuali.


0

Mi è piaciuta questa breve panoramica passo-passo di SeeDoubleYou e volevo provarla da solo. Ciò che mancava era

  • sudo chmod +x /var/www/cgi-bin/*
    • Poiché questo non è stato eseguito, apache non è stato in grado di eseguire gli script cgi
    • Ciò è necessario per la riga Action php-cgi /php-fcgi/php<version>.fcgi nel vhost.conffile
  • sudo apt-get install apache2-suexec-pristine libapache2-mod-fastcgi
    • Mancavano il file eseguibile suexec e il modulo fastcgi, dovevano essere installati per primi
    • L'eseguibile suexec è necessario per la riga FastCgiWrapper /usr/lib/apache2/suexecnel fastcgi.conffile
  • Ho anche dovuto rimuovere la linea FastCgiIpcDir /var/lib/apache2/fastcgi
    • altrimenti ho ricevuto il messaggio di errore FastCgiIpcDir /var/lib/apache2/fastcgi: already defined as "/var/lib/apache2/fastcgi"

Per chiunque cerchi di impostare php_admin_value e php_value tramite file .htaccess o vhosts: questo non è possibile con FCGI. Invece è possibile utilizzare i file .user.ini per impostare configurazioni php.ini specifiche della directory.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.