PHP: PHP 5 und PHP 4 auf einem Server
Mit der Veröffentlichung von PHP 5.1.1 habe ich auf meinem Entwicklungsrechner die installierten PHP-Versionen aufgeräumt und neu organisiert.
Damit PHP 4 und PHP 5 gleichzeitig als Modul auf dem Server laufen
gibt es zwei Apache als Webserver, die via mod_proxy
miteinander verbunden sind wie es John Coggeshall in
"Running
PHP 4 and PHP 5 Concurrently" beschreibt
und somit von außen aus wie ein Server wirken.
Vorne läuft derzeit der Apache mit PHP 4 auf Port 80 und dahinter
der mit PHP 5 auf Port 85. Weitergeleitet werden die Aufrufe
per ProxyPass
und für den umgekehrten Weg
mit ProxyPassReverse
.
<VirtualHost 192.168.0.2> Servername legs DocumentRoot /dev/null ProxyPass / http://php5:85/ ProxyPassReverse / http://php5:85/ </VirtualHost>
ProxyPassReverse
sorgt dafür, dass Umleitungen (Redirection)
per Loaction-Header vom hinteren Server wieder auf dem Namen des vorderen
Servers umgenannt werden aus:
Location: http://php5:85/phpinfo.php
wird dadurch
Location: http://legs/phpinfo.php
So funktionieren auch Umleitungen weiterhin transparent, die z.B. für Logins benutzt werden.
PHP-Version wechseln
Die einzelnen PHP-Versionen sind per configure --prefix /usr/local/php-5.1.1
in jeweils eigene Verzeichnisse compiliert. Zum Wechseln der PHP-Version
kopiere ich das passende libphp4.so
- bzw. libphp5.so
-Modul
ins Apache-Verzeichnis und starte den Server neu.
Zum Start von der Shell gibt es passende alias-Einträge für die einzelnen
PHP-Versionen wie alias php511=/usr/local/php-5.1.1/bin/php
.
PEAR mit Pfad auf .pearrc-Konfiguration
Beim Installieren von neuen PEAR-Komponenten hatte ich in der Vergangenheit schon einige Male das falsche PHP-Verzeichnis erwischt.
PEAR liest die Konfiguration aus der Datei des Benutzers .pearrc-Datei
,
der des Systems /etc/pear.conf
und der eingebauten Voreinstellung.
Die .pearrc-Datei
wird geschrieben, wenn mit config-set
Einstellungen geändert werden. Dabei werden alle Einstellungen gespeichert also
auch der Pfad zur Installation der
PEAR-Pakete. Beim Einstellen des Proxy-Servers hatte ich so
einen Installtionspfad gespeichert, der dann später auch für alle anderen Installationen
benutzt wurde, obwohl ich eigentlich inzwischen eine ganz andere PHP-Version
meinte (pear hatte ich mit /usr/local/php-4.3.10/bin/pear
aufgerufen).
Damit mir das nun nicht mehr passiert gibt es nun für jedes
alias php511=...
ein passendes alias pear511="/local/php-5.1.1/bin/pear -c ~/pearrc-5.1.1"
.
Die -c
-Option legt dabei die Konfigurationsdatei des Benutzers fest und
ist damit nun auch für die pear-Aufrufe immer eindeutig.
Weiterleitung mit mod_rewrite
Neben der oben beschriebenen Weiterleitung mit ProxyPass
kann auch
über die RewriteRules des mod_rewrite
-Moduls auf den hinteren
Server umgeleitet werden. Dazu beginnt das Ziel mit http://
und
es wird das P-Flag gesetzt.
RewriteRule ^/infoPHP5\.html$ http://php5:85/phpinfo.php [P]
Sofern für den Server zusätzlich ProxyPassReverse
gesetzt ist funktioniert auch bei dieser Art der Weiterleitung das
transparente Umbennen der Umleitungen.