Die alte Geschichte:
- Wir wollen gerne die neue Version PHP 5.3 testen.
- Oder ein Webhosting-Kunde braucht diese Version dringend (!!!) für sein Projekt.
- ...
Lösungs-Ansatz:
Unter Apache kann man immer nur eine PHP-Version als Modul laufen lassen. Aber wir haben die Möglichkeit mit Hilfe der CGI-Schnittstelle eine andere Version aufzurufen. Wie das zu realisieren ist, zeige ich im folgenden Lösungsansatz.
Vorweg noch: Es gibt dutzende Möglichkeiten zur Verfeinerung. Ich möchte hier nur das grundsätzliche Prinzip vorstellen.
Installation & Konfiguration:
Die Umsetzung besteht aus zwei Schritten:
1.) PHP kompilieren
2.) Apache konfigurieren
PHP kompilieren
Wir fangen erstmal mit der altbekannten Kompilierung des neuen PHP an:
(Link ggf. von der Seite www.php.net/downloads.php aktualisieren!)
cd /usr/local/src
wget http://de2.php.net/distributions/php-5.3.0.tar.gz
tar xzfv php-5.3.*.tar.gz
cd php-5.3.0/
Erster Schritt ist wie üblich der Aufruf von ./configure
. Am einfachsten ist es jeweils die Parameter der bestehenden PHP-Installation zu nehmen. Diesen findet man i.d.R. in der Ausgabe von phpinfo()
.
echo '' | php | less
Da wir diese PHP-Version parallel installieren wollen, müssen wir ein paar Änderungen vornehmen, indem wir alle Verzeichnisse mit dem Namen php5
in php53
umbenennen:
./configure --prefix=/usr/share/php53\ --datadir=/usr/share/php53\ --mandir=/usr/share/man\ --bindir=/usr/bin/php53\ --with-libdir=lib64\ --includedir=/usr/include\ --sysconfdir=/etc/php53/apache2\ --with-config-file-path=/etc/php53/cli\ --with-config-file-scan-dir=/etc/php53/conf.d\ --enable-libxml\ --enable-session\ --with-pcre-regex=/usr\ --enable-xml\ --enable-simplexml\ --enable-filter\ --disable-debug\ --enable-inline-optimization\ --disable-rpath\ --disable-static\ --enable-shared\ --with-pic\ --with-gnu-ld
Hierbei muss jetzt auf die Fehlermeldungen geachtet werden. Denn häufig fehlen einem die nötigen Devel-Pakete der einzelnen Libraries oder gar der C-Compiler selbst. Diese müssen jeweils mit der Paketverwaltung gesucht und installiert werden.
Wer den "configure-Test" dann bestanden hat, kann an das eigentliche Kompilieren gehen:
make
make test
make install
Der letzte Befehl sorgt dafür dass alle nötigen Verzeichnisse, die wir oben in php53
geändert haben, erstellt werden, die erste php.ini
-Datei erstellt wird und alle nötigen Binaries an Ihre Zielorte kopiert werden.
Damit ist PHP nun auch in der Version 5.3 auf dem Rechner verfügbar.
Apache konfigurieren
Wie oben schon angedeutet wurde, wird hier nur eine rudimentäre Methode angesprochen. Und zwar konfigurieren wir den Apache global auf die Datei-Endung .php53
.
Es stehen aber auch andere Möglichkeiten zur Auswahl:
- Ein einzelnes Web ohne PHP-Modul dafür mit PHP 5.3 als CGI mit der Dateiendung
.php
- Einrichtung eines
cgi-php53
-Verzeichnisses. - Nutzung von FastCGI.
- ...
Wir legen die Datei /etc/apache2/conf.d/php53.conf
an:
# Alias auf das PHP 5.3-Verzeichnis setzten: ScriptAlias /bin-php53 /usr/bin/php53/ # MIME-Type und Action definieren: AddHandler php53-cgi .php53 Action php53-cgi /bin-php53/php-cgi # Zugriff auf das PHP 5.3-Verzeichnis regeln: <Directory /usr/bin/php53> # Für Sicherheitsfanatiker: AllowOverride None # Wir wollen hier CGI-Schnittstelle nutzen und ggf. Softlinks auflösen: Options +ExecCGI +FollowSymLinks # Den Zugriff auf das Verzeichnis überhaupt erlauben: Order allow,deny Allow from all </Directory>
Nach einem Apache-Reload sollte nun eine Datei mit der Endung .php53
durch die neue Version interpretiert werden. Einfach mal mit einer Datei phpinfo.php53
versuchen.
Bemerkungen:
Wer aufgepasst hat, weiß dass sich die php.ini
unter /etc/php53/cli/
befindet. Das hatte ich so gewählt, weil wir eine Commandozeilen-Version kompilieren wollten. Wer PHP 5.3 als Modul kompilieren möchte, muss die configure
-Parameter sowieso nochmal modifizieren.