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:
- 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/
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.
- 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. - 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
- Quindi abilito suaxec e fastcgi per apache e disabe mod_php con
sudo a2enmod fastcgi actions suexec && sudo a2dismod php5
Successivamente, ho modificato
/etc/apache2/mods-enabled/fastcgi.conf
per 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>
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
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>
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.
Action php-cgi /php-fcgi/php547.fcgi
/var/www/cgi-bin/php-cgi-5.4.7
ad/var/www/cgi-bin/php54.fcgi
esempio o semplicemente/var/www/cgi-bin/php.fcgi
. Puoi controllare se questo aiuta? Solo per la versione 5.4.7.