Chcę mieć możliwość uruchamiania wielu wersji php na moim komputerze programistycznym z systemem Ubuntu 12.04. Chcę osiągnąć to, że kiedy używam localhost jako domeny, używana jest domyślna (powiedzmy php 5.3.17). Kiedy używam 547.localhost jako domeny, używa się php 5.4.7. Widziałem kilka samouczków, aby uruchomić to za pomocą fastcgi, ale do tej pory nie byłem w stanie uruchomić tego. Przejrzałem te samouczki:
- 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/
O ile wiem, zrobiłem wszystko, co potrzebne. Problem polega na tym, że php po prostu nie działa. Kiedy idę do http://localhost/somephpfile.php
niego, po prostu wyświetla źródło pliku php. To samo dotyczy http://547.localhost/somephpfile.php
.
Podzielę kroki, które podjąłem, mając nadzieję, że ktoś zauważy to, co przegapiłem.
- Najpierw zainstalowałem domyślny stos lamp za pomocą
sudo apt-get install lamp-server^ phpmyadmin
. Po tym miałem działający serwer programistyczny z uruchomioną wersją repozytorium php. - Następnie użyłem phpfarm do stworzenia dwóch instalacji php, jednej dla 5.3.17 i jednej dla 5.4.7. Lokalizacja phpfarm jest
/etc/php/phpfarm
taka, że pliki wykonywalne są w/etc/php/phpfarm/inst/php-{version}/bin
- Następnie włączam suaxec i fastcgi dla apache i dezaktywuję mod_php przy pomocy
sudo a2enmod fastcgi actions suexec && sudo a2dismod php5
Następnie zredagowałem,
/etc/apache2/mods-enabled/fastcgi.conf
aby przeczytać:<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>
Następnie
/var/www/
utworzyłem folder cgi-bin i w tym folderze dwa pliki, dla każdej z dwóch wersji php w następujący sposób (pokazuję tylko ten dla 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
Ostatnim krokiem było stworzenie wirtualnych hostów. Na koniec mam trzy pliki
/etc/apache2/sites-enabled
: 000-default, php5.3.17 i php5.4.7 o następującej treści:domyślna:
<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>
W końcu zmieniłem / etc / hosts na czytanie
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
Teraz oczekiwałbym, że wszystko zadziała, ale niestety nie. Zamiast tego, że pliki php biegną przez php, po prostu wyprowadza surowy plik.
Musi tu być coś, za czym tęskniłem, ale przeszedłem przez ten proces wiele razy i nie mogę zrozumieć, co poszło nie tak.
/var/www/cgi-bin/php-cgi-5.4.7
na/var/www/cgi-bin/php54.fcgi
na przykład lub po prostu/var/www/cgi-bin/php.fcgi
. Czy możesz sprawdzić, czy to pomaga? Tylko dla wersji 5.4.7.Action php-cgi /php-fcgi/php547.fcgi
Odpowiedzi:
W wirtualnych hostach dodałeś moduł obsługi, ale nie ustawiłeś modułu obsługi, dlatego nie jest on przetwarzany. Dodaj:
wcześniej
</Directory>
w każdym pliku wirtualnego hosta.źródło
Podobał mi się krótki przegląd SeeDoubleYou krok po kroku i chciałem go wypróbować samodzielnie. Brakowało
sudo chmod +x /var/www/cgi-bin/*
Action php-cgi /php-fcgi/php<version>.fcgi
wvhost.conf
plikusudo apt-get install apache2-suexec-pristine libapache2-mod-fastcgi
FastCgiWrapper /usr/lib/apache2/suexec
wfastcgi.conf
plikuFastCgiIpcDir /var/lib/apache2/fastcgi
FastCgiIpcDir /var/lib/apache2/fastcgi: already defined as "/var/lib/apache2/fastcgi"
Dla każdego, kto próbuje ustawić wartość php_admin_value i php_value za pomocą plików .htaccess lub vhosts: Z FCGI nie jest to możliwe. Zamiast tego możesz użyć plików .user.ini, aby ustawić specyficzne dla katalogu konfiguracje php.ini.
źródło