Apache mit PHP4 und PHP5

Aus Fedorawiki.de

Wechseln zu: Navigation, Suche
Alt.png Dieser Artikel ist veraltet und Bedarf einer Aktualisierung.
Dieser Artikel ist Teil der HOWTO Sammlung

Seit bereits längerer Zeit ist PHP 5 offiziell freigegeben und wird als stabil deklariert. PHP 5 bringt viele neue Features (SQLite, verbesserte XML-Unterstützung, Erweiterungen für die objektorienterte Programmierung) mit und ist so gesehen als äusserst interessant und attraktiv zu betrachten.

In diesem HOWTO beschreibe ich, wie PHP 5 zusätzlich zu PHP 4 (oft für das Testen von Internetseiten, die bei Providern ohne PHP 5-Unterstützung gehostet werden, notwendig) installiert und genutzt werden kann.

Ist PHP 5 bereits als RPM vorinstalliert (z.B. bei FC4), gilt folgendes:

Wenn PHP 5 bereits als RPM installiert ist, läuft das Spielchen genau anders herum. Mit ziemlicher Sicherheit kann man dabei nach dem selben Schema vorgehen. Ein Paket für PHP 4 würde wahrscheinlich PHP 5 ersetzen wollen, deshalb dürfte es notwendig sein, mindestens eine der Versionen von Hand zu installieren.

Inhaltsverzeichnis

Voraussetzungen

  • Ein installierter Apache-Server der Serie 2.0. Mit rpm -qa | grep httpd kann dessen Existenz auf dem Rechner überprüft werden. Achtung: Die Serie 1.3 wurde nicht getestet!
  • Ein auf dem PC installiertes PHP 4.x. Ggfs. überprüfen mit rpm -qa | grep php.
  • Ein paar andere Development-Pakete (paketxyz-devel), abhängig von der PHP 5-Konfiguration (siehe unten)
  • root-Zugriff auf dem PC. Loggt euch direkt am Anfang mit su - als root ein


Installationsanleitung für PHP 5

Zurzeit ist die Version 5.0.4 aktuell. Diese könnt ihr euch von hier herunterladen: http://de3.php.net/get/php-5.0.4.tar.bz2/from/this/mirror

Mit wget wäre das:

wget http://de3.php.net/get/php-5.0.4.tar.bz2/from/this/mirror

Anschließend müsst ihr die Datei entpacken:

tar xvjf php-5.0.4.tar.bz2

Dann wechselt ihr in das beim Entpacken automatisch erstelte Verzeichnis:

cd php-5.0.4/

Jetzt wird es etwas komplizierter: Da es für PHP 5 kein RPM gibt, muss es aus den Quellen kompiliert und installiert werden. Das ist etwas knifflig. Es wäre jetzt zuviel, wenn ich weit ausholen und alles im Detail erklären würde, deshalb rate ich euch, die Liste der verfügbaren Optionen für das Kompilieren anzusehen.

Dies macht ihr am Besten mit,

./configure --help | more

Eine Beispielkonfiguration:

./configure --with-apxs2=/usr/sbin/apxs --prefix=/usr/php5 --disable-cgi --enable-debug 
--with-conf-file-path=/etc/php5 --with-openssl --with-zlib --enable-bcmath --with-bz2 --enable-calendar 
--enable-exif --enable-ftp --with-gd --with-ttf --with-gettext --with-iconv --with-kerberos --with-imap-ssl 
--with-ldap --enable-mbstring --with-mycrypt --with-mime-magic --with-mysql --enable-sqlite-utf8 --with-tidy 
--enable-memory-limit
<b>Wichtig</b> <b>Wichtig:</b> Die Optionen --with-apxs2=/usr/sbin/apxs und --prefix=/usr/php5 und --with-conf-file-path=/etc/php5 müssen für diesen Weg aktiviert sein.

Wenn ihr eure Optionen zusammengestellt habt, ruft ihr ./configure mit diesen Optionen (sieht dann so ähnlich aus wie die Beispielkonfiguration oben) auf. Dabei kann es zu Fehlermeldungen kommen. Sehr oft sind das dann fehlende Abhängigkeiten, d.h. fehlende Development-Pakete. Die müsst ihr dann über Synaptic/apt, Yum oder irgendeine RPM-Suchmaschine suchen und installieren - oder ihr entscheidet euch, die Option, für die die Abhängigkeit nicht erfüllt ist, wegzulassen.

Nach Abschluss von ./configure führt ihr nun make aus. Meine Erfahrung ist, dass es da auch immer mal wieder zu Abbrüchen kommt - ich habe dann immer mal wieder entweder ein/zwei weniger wichtige Optionen aus meiner Liste entfernt und

./configure <Parameterliste> && make clean && make

ausgeführt, oder den Vorgang mit

[root]# make clean && make

noch einmal gestartet - so, oder so: irgendwann sollte es ohne Fehler durchlaufen.

Danach braucht ihr nur noch

[root]# make install

ausführen und PHP 5 ist höchstwahrscheinlich installiert.

Skript zum Umschalten zw. PHP 4 und 5

Ursprünglich hatte ich bei mir auf dem lokalen Server vor, PHP 4 und PHP 5 gleichzeitig zu nutzen und die Endungen .php und .php4 PHP 4 und die Endung .php5 PHP 5 zuzuweisen. Das hat nach einer Anleitung (s. Alternativen) nicht geklappt. Deshalb habe ich mir den folgenden Weg überlegt:

Im Verzeichnis /etc/httpd/conf.d liegt eine Datei php.conf, die vom Apache-Server in die globale Server-Konfigurationsdatei /etc/httpd/conf/httpd.conf eingebunden wird.

Diese solltet ihr nun entfernen, wir werden sie gleich ersetzen

[root]# rm -f /etc/httpd/conf.d/php.conf

Nun legt ihr zwei neue Dateien an:

[root]# touch /etc/httpd/php4.conf && touch /etc/httpd/php5.conf

In die php4.conf schreibt ihr Folgendes:

# Configuration file for PHP 4.x
# --
# It may be linked to /etc/httpd/conf.d/php.conf
# in order to switch to PHP 4.x from PHP 5.x

LoadModule php4_module modules/libphp4.so
AddType application/x-httpd-php .php .php4
DirectoryIndex index.php index.php4

In die php5.conf schreibt ihr das hier:

# Configuration file for PHP 5.x
# --
# It may be linked to /etc/httpd/conf.d/php.conf
# in order to switch to PHP 5.x from PHP 4.x

LoadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .php .php5
DirectoryIndex index.php index.php5

Damit werden später Dateien mit den Endungen .php und .php4 PHP 4 zugewiesen und Dateien mit den Endungen .php und .php5 PHP 5. Wie ihr seht, könnt ihr .php-Dateien dann sowohl von PHP 4 als auch von PHP 5 interpretieren lassen. In diesen beiden Dateien könnt ihr die Endungen natürlich auch anpassen, z.B. so, dass PHP 5 nur die Endung .php5 interpretiert - ganz, wie ihr wollt.

Da der Server jetzt aber noch keine php.conf finden würde, weil keine existiert, erstellen wir zunächst eine symbolische Verknüpfung:

ln -s /etc/httpd/php5.conf /etc/httpd/conf.d/php.conf

Damit wird PHP 5 zunächst als PHP-Modul für den Server festgelegt.

Jetzt müsst ihr aus der Apache-Konfigurationsdatei (z.B. /etc/httpd/conf/httpd.conf) noch die Zeilen für das Laden der PHP-Module entfernen. Einfach nach php in der Datei suchen und Zeilen, die ähnlich aussehen wie die folgenden, entfernen:

LoadModule php5_module        /usr/lib/httpd/modules/libphp5.so
LoadModule php4_module        /usr/lib/httpd/modules/libphp4.so

Was jetzt nur noch fehlt, ist ein Skript, das die Verknüpfung auffrischt, wenn man von PHP 5 auf PHP 4 (oder umgekehrt) umschalten will. Ein solches Skript ist schnell geschrieben.

Ihr speichert es bitte unter /usr/local/bin oder /usr/bin mit dem Namen httpd-switch-php ab und definiert es als ausführbar:

[root]# chmod 755 /usr/local/bin/httpd-switch-php oder chmod 755 /usr/bin/httpd-switch-php

Hier der Quellcode:

 #!/bin/sh
 #
 # PHP switching tool for httpd
 # Links php4.conf or php5.conf to php.conf
 # and restarts a running httpd server
 # Makes use of sudo, rm, ln and /sbin/service httpd
 
 # Default PHP interpreter version
 DEFAULT_VERSION=5
 
 # Get first parameter
 if [ ! $1 ]; then
 	USE="$DEFAULT_VERSION"
 else
 	USE="$1"
 fi
 
 # Invalid input
 if [ ! "$USE" == "4" ] && [ ! "$USE" == "5" ]; then
 	echo "Usage: httpd-switch-php <4|5>"
 	exit
 fi
 
 # Link $USE-Config file to php.conf
 sudo rm -f /etc/httpd/conf.d/php.conf
 sudo ln -s /etc/httpd/php$USE.conf /etc/httpd/conf.d/php.conf
 
 # Restart httpd
 sudo /sbin/service httpd restart
 
 # Finished!

Dieses Skript könnt ihr nun bequem wie folgt aufrufen: httpd-switch-php 4 (um PHP 4 zu nutzen) oder httpd-switch-php (bzw. httpd-switch-php 5) für PHP 5.

<b>Wichtig</b> <b>Wichtig:</b> Das Neustarten des Servers erfordert root-Rechte!

Als normaler User müsst ihr euch dafür in {{Dateiname|/etc/[[sudoers}} eintragen:

(...)
# User privilege specification
testbenutzer ALL=(ALL) ALL
root ALL=(ALL) ALL
(...)

Damit seid ihr unter normalen Umständen fertig und könnt das Ganze mit einem kleinen PHP-Skript (z.B. <?php phpinfo(); ?>) überprüfen.

Alternativen

Auf meiner Suche nach einer Lösung bin ich, bevor ich mich entschlossen habe, diesen Weg zu gehen, auf die folgenden Anleitungen gestoßen (die bei mir z.T. nicht funktioniert haben):