Ich möchte in der Lage sein, mehrere PHP-Versionen auf meiner Entwicklungsbox unter Ubuntu 12.04 auszuführen. Was ich erreichen möchte, ist, dass wenn ich localhost als Domain benutze, ein Standard verwendet wird (sagen wir PHP 5.3.17). Wenn ich 547.localhost als Domain benutze, wird PHP 5.4.7 verwendet. Ich habe einige Tutorials gesehen, um dies mit fastcgi zum Laufen zu bringen, aber bis jetzt war ich nicht in der Lage, es zum Laufen zu bringen. Ich habe mir diese Tutorials angesehen:
- 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/
Denn soweit ich sehen kann, habe ich alles getan, was nötig ist. Das Problem ist, dass PHP einfach nicht läuft. Wenn ich dorthin gehe, http://localhost/somephpfile.php
wird nur die Quelle der PHP-Datei ausgegeben. Das selbe für http://547.localhost/somephpfile.php
.
Ich werde aufschlüsseln, welche Schritte ich in der Hoffnung unternommen habe, dass jemand in der Lage ist, zu erkennen, was ich verpasst habe.
- Zuerst habe ich einen Standardlampenstapel mit installiert
sudo apt-get install lamp-server^ phpmyadmin
. Danach hatte ich einen funktionierenden Entwicklungsserver, auf dem die Repository-Version von PHP lief. - Dann habe ich mit phpfarm zwei PHP-Installationen erstellt, eine für 5.3.17 und eine für 5.4.7. Die Lokalisierung von phpfarm ist
/etc/php/phpfarm
, also sind die ausführbaren Dateien in/etc/php/phpfarm/inst/php-{version}/bin
- Dann aktiviere ich suaxec und fastcgi für apache und deaktiviere mod_php mit
sudo a2enmod fastcgi actions suexec && sudo a2dismod php5
Als nächstes habe ich bearbeitet, um
/etc/apache2/mods-enabled/fastcgi.conf
zu lesen:<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>
Dann habe
/var/www/
ich in einem Ordner cgi-bin und in diesem Ordner zwei Dateien für jede der beiden PHP-Versionen wie folgt erstellt (ich zeige nur die für 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
Der letzte Schritt bestand darin, virtuelle Hosts zu erstellen. Am Ende habe ich drei Dateien in
/etc/apache2/sites-enabled
: 000-default, php5.3.17 und php5.4.7 mit folgendem Inhalt:Standard:
<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>
Schließlich habe ich / etc / hosts zum Lesen geändert
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
Jetzt würde ich erwarten, dass die Dinge funktionieren, aber leider nicht. Anstatt dass eine PHP-Datei über PHP läuft, wird nur die Rohdatei ausgegeben.
Es muss etwas geben, das ich hier verpasst habe, aber ich habe den Prozess viele Male durchlaufen und kann nicht herausfinden, wo es schief geht.
/var/www/cgi-bin/php-cgi-5.4.7
zum/var/www/cgi-bin/php54.fcgi
Beispiel oder einfach nur umzubenennen/var/www/cgi-bin/php.fcgi
. Kannst du überprüfen, ob das hilft? Nur für die 5.4.7 Version.Action php-cgi /php-fcgi/php547.fcgi
Antworten:
In Ihren virtuellen Hosts haben Sie einen Handler hinzugefügt, aber den Handler nicht festgelegt, weshalb er nicht verarbeitet wird. Hinzufügen:
vorher
</Directory>
in jeder virtuellen Hosts-Datei.quelle
Ich mochte diese kurze Schritt-für-Schritt-Übersicht von SeeDoubleYou und wollte sie selbst ausprobieren. Was fehlte war
sudo chmod +x /var/www/cgi-bin/*
Action php-cgi /php-fcgi/php<version>.fcgi
in dervhost.conf
Datei benötigtsudo apt-get install apache2-suexec-pristine libapache2-mod-fastcgi
FastCgiWrapper /usr/lib/apache2/suexec
in derfastcgi.conf
Datei benötigtFastCgiIpcDir /var/lib/apache2/fastcgi
FastCgiIpcDir /var/lib/apache2/fastcgi: already defined as "/var/lib/apache2/fastcgi"
Für alle, die versuchen, php_admin_value und php_value über .htaccess- oder vhosts-Dateien festzulegen: Dies ist mit FCGI nicht möglich. Stattdessen können Sie .user.ini-Dateien verwenden , um verzeichnisspezifische php.ini-Konfigurationen festzulegen.
quelle