Einbindung von PHP in die Apache-Konfiguration

Einbindung von PHP in die Apache-Konfiguration

Es gibt zwei Möglichkeiten, PHP-Scripts von Apache ausführen zu lassen: entweder als Apache-Modul oder als CGI-Scripts. Die Lösung als Apache-Modul ist dann vorzuziehen, wenn PHP intensiv eingesetzt werden soll und auch Priorität gegenüber anderen Script-Sprachen auf dem Server haben soll. Außerdem entfallen bei der Variante "PHP als Modul" die typischen CGI-Merkmale wie Beschränkung auf bestimmte Verzeichnisse usw. Nachteil ist jedoch, dass Apache damit insgesamt mehr Arbeitsspeicher pro Prozess benötigt, und zwar auch dann, wenn gar keine PHP-Scripts ausgeführt werden müssen. Wenn PHP als Apache-Modul läuft, laufen PHP-Scripts auf Unix-/Linux-Umgebungen auch unter dem Benutzernamen von Apache, sie haben also die gleichen Rechte wie dieser.

Auf den meisten öffentlichen Server-Rechnern ist PHP als Apache-Modul konfiguriert.

Einbindung unter Unix/Linux

Um PHP als Apache-Modul zu konfigurieren, müssen Sie die Installation von PHP korrigieren, indem Sie in dem Verzeichnis, in dem Sie PHP dekomprimiert und entpackt haben, das .configure-Script erneut aufrufen mit:

./configure --with-apxs=[Pfad/zu/apxs]

Dabei ist apxs eine ausführbare Datei von Apache. Wo sie genau liegt, können Sie herausbekommen durch Eingabe von:

find / -name apxs

Nachdem das .configure-Script durchgelaufen ist, müssen Sie erneut make und make install ausführen.

Wechseln Sie nun in das Verzeichnis, in dem der Apache Webserver installiert ist, also z.B. in /usr/local/bin/apache, und dort ins Unterverzeichnis libexec. Dort sollte sich nun eine Datei libphp4.so oder libphp5.so befinden, je nachdem, ob Sie PHP 4.x oder PHP 5.x installiert haben.

Sind diese Voraussetzungen erfüllt, müssen Sie in der httpd.conf, also in der zentralen Konfigurationsdatei des Apache Webservers, folgende Einträge vornehmen:

  • Das Apache-Modul von PHP muss geladen werden. Das geschieht für PHP 4.x durch folgenden Eintrag:
LoadModule php4_module  libexec/libphp4.so

Und für PHP 5.x durch folgenden Eintrag:

LoadModule php5_module  libexec/libphp5.so

Notieren Sie die Einträge innerhalb der httpd.conf dort, wo LoadModule-Einträge für dynamische Module (DSO) stehen sollten.

  • Suchen Sie als Nächstes in der httpd.conf nach AddType. Notieren Sie zusätzlich zu eventuell vorhandenen Einträgen dieser Art den folgenden:
AddType application/x-httpd-php .php
  • Bei der Direktive DirectoryIndex sollte ein Dateiname des Typs .php mit aufgenommen werden, in den meisten Fällen index.php. Das gilt auch für eventuell definierte virtuelle Hosts.

Möchten Sie dagegen PHP nicht als Apache-Modul einbinden, sondern einfach als möglichen Handler für CGI-Scripts, sind folgende Änderungen in der httpd.conf erforderlich:

  • Überprüfen Sie, ob das CGI-Modul des Apache geladen wird. Dazu muss folgende Zeile ohne Kommentarzeichen davor existieren:
LoadModule cgi_module modules/mod_cgi.so
  • Stellen Sie sicher, dass mindestens eine geeignete ScriptAlias-Direktive existiert, z. B.: ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
  • Suchen Sie nach folgender Zeile: AddHandler cgi-script .cgi. Notieren Sie daran anschließend folgende beiden Zeilen:
Action php-script /cgi-bin
AddHandler php-script .php

Nachdem Sie die httpd.conf geändert haben, speichern Sie die Datei und führen Sie einen Neustart des Apache Webservers durch

hammer 128

Einbindung unter MS Windows

Unter MS Windows sollten Sie zunächst die Dateien php4apache.dll bzw. php4apache2.dll (je nach Apache-Version) aus dem PHP-Unterverzeichnis sapi in Ihr Windows-Systemverzeichnis kopieren, also z.B. in c:\windows\system32 oder c:\winnt\system32. Dadurch liegen diese Dateien zusätzlich im Pfad und mögliche Probleme des Apache Webservers beim Laden dieser Bibliotheken werden vermieden.

Auch unter Windows können Sie PHP wahlweise als Apache-Modul oder als Handler für CGI-Scripts einbinden. In beiden Fällen müssen Sie die zentrale httpd.conf des installierten Apache Webservers bearbeiten.

Um PHP als Apache-Modul zu installieren, sind folgende Einträge erforderlich:

  • Das Apache-Modul von PHP muss geladen werden. Das geschieht für PHP 4.x durch folgenden Eintrag:
LoadModule php4_module  [Pfad zu PHP]/sapi/php4apache*.dll

Und für PHP 5.x durch folgenden Eintrag:

LoadModule php5_module  [Pfad zu PHP]/sapi/php5apache*.dll

Dabei ist [Pfad zu PHP] der vollständige Laufwerkspfad zum Programmverzeichnis von PHP, also etwa c:/php oder c:/Programme/php. Benutzen Sie einfache Schrägstriche zur Verzeichnistrennung, nicht den unter Windows üblichen Backslash. Welche Datei Sie genau adressieren müssen, hängt von der PHP- und der Apache-Version ab. Bei PHP 4.x und Apache 1.3.x heißt sie php4apache.dll, bei PHP 4.x und Apache 2.0.x php4apache2.dll, bei PHP 5.x und Apache 1.3.x php5apache.dll und bei PHP 5.x und Apache 2.0.x php5apache2.dll.

Notieren Sie die Einträge innerhalb der httpd.conf dort, wo LoadModule-Einträge für dynamische Module (DSO) stehen sollten.

  • Suchen Sie als Nächstes in der httpd.conf nach AddType. Notieren Sie zusätzlich zu eventuell vorhandenen Einträgen dieser Art den folgenden:
AddType application/x-httpd-php .php
  • Bei der Direktive DirectoryIndex sollte ein Dateiname des Typs .php mit aufgenommen werden, in den meisten Fällen index.php. Das gilt auch für eventuell definierte virtuelle Hosts.

Möchten Sie dagegen PHP nicht als Apache-Modul einbinden, sondern einfach als möglichen Handler für CGI-Scripts, sind folgende Änderungen in der httpd.conf erforderlich:

  • Überprüfen Sie, ob das CGI-Modul des Apache geladen wird. Dazu muss folgende Zeile ohne Kommentarzeichen davor existieren:
LoadModule cgi_module modules/mod_cgi.so
  • Stellen Sie sicher, dass mindestens eine geeignete ScriptAlias-Direktive existiert, z. B.: ScriptAlias /cgi-bin/ "c:/webdocs/cgi-bin/"
  • Suchen Sie nach folgender Zeile: AddHandler cgi-script .cgi. Notieren Sie daran anschließend folgende beiden Zeilen:
Action php-script /cgi-bin
AddHandler php-script .php

Nachdem Sie die httpd.conf geändert haben, speichern Sie die Datei und führen Sie einen Neustart des Apache Webservers durch.

light_bulb 128

Austesten von PHP unter Apache: ein erstes Script

Wenn Sie alles richtig installiert haben, sollten PHP-Scripts nun ausführbar sein. Wir nehmen in unseren nachfolgenden Beispielen an, dass PHP als Apache-Modul installiert ist. PHP-Dateien können dann überall unterhalb der Document Root, also unterhalb des Startverzeichnisses für Webdokumente, abgelegt werden. Erstellen und bearbeiten lassen sie sich mit jedem Texteditor. Bestens geeignet sind auch code-basierte HTML-Editoren. Viele davon unterstützen von Haus aus Syntax-Highlighting für PHP-Code, was in der Praxis sehr hilfreich ist.

Folgendes Listing eignet sich, unter einem Dateinamen wie php-test.php irgendwo unterhalb der Document Root abgespeichert, zu einem ersten Test, ob PHP korrekt funktioniert:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="de">
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<title>PHP-Test</title>
</head>
<body>
<h1><?php echo "Hier ist PHP!" ?></h1>
</body>
</html>

php_in_apache_einbinden

Wenn es in Ihrem Browser so aussieht wie abgebildet, ist PHP korrekt installiert und in Apache eingebunden.

Das Beispiel zeigt auch schon, wie simpel PHP sein kann. Unser Listing sieht aus wie eine gewöhnliche HTML-Datei. Nur an einer Stelle, nämlich im Elementinhalt der h1-Überschrift, ist ein Bereich notiert, der mit <?php beginnt und mit ?> endet. Innerhalb davon kann PHP-Code stehen. In unserem Beispiel wird einfach nur etwas Text ausgegeben.

Wenn Sie sich im Browser den HTML-Quelltext ansehen ("view source"), dann werden Sie feststellen, dass von dem PHP-Script-Bereich nichts mehr zu sehen ist. Dort steht innerhalb von <h1>...</h1> nur noch der von PHP ausgegebene Text.

Genau das ist das Prinzip serverseitiger Scripts.

Die Scripts werden ausgeführt, bevor die Daten zum Browser übertragen werden. Ein serverseitiges Script muss dafür sorgen, dass sinnvolle Daten zum Browser gelangen, also z.B. HTML-Code. Beim Browser selbst kommt dann nur noch der ausgegebene HTML-Code an, aber nichts mehr vom Programmcode des Scripts. Der Browser weiß nicht einmal, dass ein Script den HTML-Code erzeugt hat, bzw. es ist ihm völlig egal. Er erhält seine Daten vom Webserver genauso, als würde es sich um eine statische HTML-Datei handeln.

Umgekehrt ist es Aufgabe des Webservers, richtig zu reagieren. Versuchen wir zu verstehen, was genau passiert:

  • Der Webserver erhält vom Browser eine Anfrage, in der dieser mit GET oder POST dazu auffordert, ihm die Daten einer Datenressource namens php-test.php zu senden.
  • Der Webserver erkennt an der Endung, dass in diesem Fall der PHP-Interpreter ausgeführt werden muss. Die Endung ist ihm durch seine Konfiguration bekannt.
  • Zunächst muss der Webserver prüfen, ob er PHP-Scripts im angeforderten Verzeichnis überhaupt ausführen darf. Angenommen, PHP ist als Modul konfiguriert, dann darf es in allen Webverzeichnissen ausgeführt werden.
  • Der Webserver startet den als Modul geladenen PHP-Interpreter mit der angeforderten Scriptdatei. Der PHP-Interpreter führt das Script aus und reicht den vom Script erzeugten Datenoutput an den Webserver durch.
  • Der Webserver sendet den Datenoutput an den anfragenden Browser.