Kapitel 49. Installation

In diesem Abschnitt geht es um übliche Fragen zur Installation von PHP. PHP gibt es für fast jedes Betriebssystem (außer vielleicht für MacOS vor OSX) und fast jeden Webserver.

Um PHP zu installieren, folgen Sie Bitte den Anweisungen in der Datei INSTALL, die sie in der Distribution finden. Benutzer von Windows sollten auch die Datei install.txt lesen. Weitere hilfreiche Hinweie für Benutzer von Windows gibt es hier.

1. Unix/Windows: Wo sollte sich meine php.ini befinden?
2. Unix: I habe PHP installiert, aber jedesmal, wenn ich eine Seite aufrufe, bekomme ich die Meldung 'Document Contains No Data'! Woran liegt das?
3. Unix: Ich habe PHP mit RPM-Paketen installiert, aber Apache verarbeitet die PHP-Seiten nicht. Was ist da los?
4. Unix: Ich habe PHP 3 mit RPM-Paketen installiert, aber es läßt sich nicht mit der benötigten Datenbank-Unterstützung übersetzen. Was ist da los?
5. Unix: Ich habe Apache mit dem FrontPage-Erweiterungs-Patch versehen und plötzlich funktioniert PHP nicht mehr. Ist PHP zur FrontPage-Erweiterung für Apache inkompatibel?
6. Unix/Windows: Ich habe PHP installiert, aber wenn ich versuche, mit meinem Browser ein PHP-Script aufzurufen, erhalte ich eine leere Seite.
7. Unix/Windows: Ich habe PHP installiert, aber wenn ich versuche, mit meinem Browser ein PHP-Script aufzurufen, erhalte ich vom Server einen 500 Fehler.
8. Manche Betriebssysteme: Ich habe PHP ohne Fehlermeldungen installiert, aber wenn ich versuche, Apache zu starten, erhalte ich Fehler wegen undefinierter Symbole:
[mybox:user /src/php4] root# apachectl configtest
 apachectl: /usr/local/apache/bin/httpd Undefined symbols:
  _compress  
  _uncompress
9. Windows: Ich habe PHP installiert, aber wenn ich versuche, mit meinem Browser ein PHP-Script aufzurufen, erhalte ich die Fehlermeldung:
cgi error:
 The specified CGI application misbehaved by not
 returning a complete set of HTTP headers.
 The headers it did return are:
10. Windows: Ich habe alle Anweisungen befolgt, aber ich erreiche keine Zusammenarbeit zwischen PHP und den IIS.
11. Wenn Ich PHP mit IIS, PWS, OmniHTTPD oder Xitami als CGI laufen lasse, bekomme ich die folgende Fehlermeldung: Security Alert! PHP CGI cannot be accessed directly..
12. Wie kann ich herausfinden, ob meine php.ini gefunden und gelesen wird? Anscheinend ist das nicht der Fall, weil meine Änderungen nicht übernommen werden.

1. Unix/Windows: Wo sollte sich meine php.ini befinden?

Unter Unix sollte sie standardmäßig in /usr/local/lib sein, was <install-path>/lib ist. Die Meisten werden das beim Übersetzen mit der Option --with-config-file-path ändern wollen. Sie können das, z.B. mit
--with-config-file-path=/etc
festlegen. Dann kopieren Sie die php.ini-dist der Distribution nach /etc/php.ini und editieren sie, um alle gewünschten lokalen Änderungen vorzunehmen.

--with-config-file-scan-dir=PATH

Unter Windows ist der standardmäßige Pfad für die php.ini das Windows-Verzeichnis. Falls die den Apache Webserver verwenden, wird die php.ini zuerst im Apache-Installationsverzeichnis, z.B. c:\program files\apache group\apache, gesucht. Dadurch können Sie auf dem selben Rechner verschiedene php.ini-Dateien für verschiedene Apache-Versionen haben.

Siehe auch das Kapitel über die Konfigurationsdatei.

2. Unix: I habe PHP installiert, aber jedesmal, wenn ich eine Seite aufrufe, bekomme ich die Meldung 'Document Contains No Data'! Woran liegt das?

Das bedeutet wahrscheinlich, dass PHP irgend ein Problem hat und einen Core Dump (Speicherauszug) erzeugt. Schauen Sie in der Fehler-Logdatei Ihres Servers nach, ob das der Fall ist und versuchen Sie dann das Problem mit einem kleinen Test-Script zu reproduzieren. Falls Sie sich mit 'gdb' auskennen, ist es für die Entwickler beim Lokalisieren des Problems sehr hilfreich, wenn Sie Ihrem Fehlerbericht einen Backtrace hinzufügen. Falls Sie PHP als Apache-Modul verwenden, können Sie in etwa Folgendes versuchen:

  • Stoppen Sie Ihre httpd-Prozesse

  • gdb httpd

  • Stoppen Sie Ihre httpd-Prozesse

  • > run -X -f /pfad/zur/httpd.conf

  • Rufen Sie mit Ihrem Browser die URL auf, die das Problem verursacht

  • > run -X -f /path/to/httpd.conf

  • gdb sollte Sie jetzt darüber in Kenntnis setzen, falls Sie einen Core Dump bekommen

  • Geben Sie ein: bt

  • Sie sollten Ihren Backtrace in Ihren Fehlerbericht einfügen und diesen unter http://bugs.php.net/ abgeben.

Falls Sie in Ihrem Script Funktionen regulärer Ausdrücke (ereg() und Freunde) verwenden, sollten Sie sicherstellen, dass Sie PHP und Apache mit dem selben Programmpaket für reguläre Ausdrücke übersetzt haben. Mit PHP und Apache 1.3.x sollte das automatisch der Fall sein.

3. Unix: Ich habe PHP mit RPM-Paketen installiert, aber Apache verarbeitet die PHP-Seiten nicht. Was ist da los?

Unter der Annahme, dass Sie sowohl Apache als auch PHP mit RPM-Paketen installiert haben, müssen Sie einige oder alle der folgenden Zeilen in die Datei httpd.conf einfügen oder die Kommentarzeichen davor entfernen:
# Extra Modules
AddModule mod_php.c
AddModule mod_php3.c
AddModule mod_perl.c

# Extra Modules
LoadModule php_module         modules/mod_php.so
LoadModule php3_module        modules/libphp3.so     # fuer PHP 3
LoadModule php4_module        modules/libphp4.so     # fuer PHP 4
LoadModule perl_module        modules/libperl.so
Und fügen Sie
AddType application/x-httpd-php3 .php3    # fuer PHP 3
AddType application/x-httpd-php .php      # fuer PHP 4
... in die globalen Eigenschaften oder in die Eigenschaften der VirtualDomain, für die Sie PHP-Unterstützung benötigen, ein.

4. Unix: Ich habe PHP 3 mit RPM-Paketen installiert, aber es läßt sich nicht mit der benötigten Datenbank-Unterstützung übersetzen. Was ist da los?

Aufgrund des Aufbaus von PHP 3 ist es nicht einfach, ein vollständig flexibles PHP-RPM zu bauen. Dieses Problem wurde in PHP 4 angegangen. Für PHP 3 empfehlen wir Ihnen, dass Sie nach der Methode vorgehen, die in der Datei INSTALL.REDHAT der PHP-Distribution beschrieben wird. Falls Sie darauf bestehen, eine RPM-Version von PHP 3 zu verwenden, lesen Sie weiter...

Um die Installation zu vereinfachen und weil RPMs statt des Standardverzeichnisses /usr/local/ das Verzeichnis /usr/ benutzen, konfigurieren die RPM-Paketbauer die RPMs so, dass sie ohne Datenbank-Unterstützung installiert werden. Sie müssen in der RPM spec Datei also angeben, welche Datenbanken unterstützt werden sollen und wo sich die höchste Verzeichnisebene Ihres Datenbank-Servers befindet.

Dieses Beispiel erklärt die Vorgehensweise, mit der die Unterstützung für den beliebten MySQL Datenbank-Server bei gleichzeitiger Verwendung der Apache-Modul-Installation hinzugefügt wird.

Selbstverständlich kann die gesamte Information für jeden Datenbank-Server angepasst werden, den PHP unterstützt. Es wird bei diesem Beispiel davon ausgegangen, dass Sie MySQL und Apache komplett mit RPMs installiert haben.

  • Entfernen Sie zuerst mod_php3 :
    rpm -e mod_php3

  • Holen Sie sich dann das Source-RPM und INSTALLIEREN Sie es, NICHT --rebuild
    rpm -Uvh mod_php3-3.0.5-2.src.rpm

  • Editieren Sie als Nächstes die Datei /usr/src/redhat/SPECS/mod_php3.spec

    Fügen Sie im %build Abschnitt die gewünschte Datenbank-Unterstützung und den Pfad hinzu.

    Für MySQL wäre das
    --with-mysql=/usr \
    Der %build Abschnitt sieht in etwa so aus:
    ./configure --prefix=/usr \
            --with-apxs=/usr/sbin/apxs \
            --with-config-file-path=/usr/lib \
            --enable-debug=no \
            --enable-safe-mode \
            --with-exec-dir=/usr/bin \
            --with-mysql=/usr \
            --with-system-regex

  • Nachdem Sie die Änderung vorgenommen haben, bauen Sie das Binary-RPM folgendermaßen:
    rpm -bb /usr/src/redhat/SPECS/mod_php3.spec

  • Dann installieren Sie das RPM
    rpm -ivh /usr/src/redhat/RPMS/i386/mod_php3-3.0.5-2.i386.rpm

Wenn Sie nun den Apache neu starten, haben Sie PHP 3 mit MySQL-Unterstützung unter Verwendung von RPMs. Beachten Sie, dass es mit dem Tarball der PHP 3 Distribution unter Befolgen der Anweisungen in INSTALL.REDHAT, das sich in dieser Distribution befindet, wahrscheinlich wesentlich einfacher zu bauen ist.

5. Unix: Ich habe Apache mit dem FrontPage-Erweiterungs-Patch versehen und plötzlich funktioniert PHP nicht mehr. Ist PHP zur FrontPage-Erweiterung für Apache inkompatibel?

Nein, PHP funktioniert bestens mit der FrontPage-Erweiterung. Das Problem liegt darin, dass der FrontPage-Patch mehrere Apache-Strukturen verändert, auf die sich PHP verlässt. Eine Neuübersetzung von PHP (mittels 'make clean ; make'), nachdem der Patch angewandt wurde, löst das Problem.

6. Unix/Windows: Ich habe PHP installiert, aber wenn ich versuche, mit meinem Browser ein PHP-Script aufzurufen, erhalte ich eine leere Seite.

Wenn Sie sich im Browser den Quelltext der Seite anschauen, werden Sie vermutlich den Quellcode Ihres PHP-Scripts sehen können. Das bedeutet, dass der Webserver das Script nicht zur Interpretation an PHP übergeben hat. Mit Ihrer Server-Konfiguration ist etwas nicht in Ordnung - überprüfen Sie Ihre Server-Konfiguration nochmal genau anhand der PHP-Installationsanleitung.

7. Unix/Windows: Ich habe PHP installiert, aber wenn ich versuche, mit meinem Browser ein PHP-Script aufzurufen, erhalte ich vom Server einen 500 Fehler.

Beim Versuch des Servers PHP zu starten ist etwas schiefgegangen. Wechseln Sie auf der Kommandozeile (in der Eingabeaufforderung) in das Verzeichnis, das die ausführbare PHP-Datei (unter Windows php.exe) enthält und lassen Sie php -i laufen, um eine sinnvolle Fehlermeldung zu bekommen. Falls PHP irgendwelche Probleme bei der Ausführung hat, werden entsprechende Fehlermeldungen ausgegeben, die Ihnen Hinweise darauf liefern, was zu tun ist. Falls sich der Bildschirm mit HTML-Quelltext füllt (die Ausgabe der Funktion phpinfo()), funktioniert PHP und Ihr Problem könnte mit Ihrer Server-Konfiguration zusammen hängen, die Sie dann nochmal genau überprüfen sollten.

8. Manche Betriebssysteme: Ich habe PHP ohne Fehlermeldungen installiert, aber wenn ich versuche, Apache zu starten, erhalte ich Fehler wegen undefinierter Symbole:
[mybox:user /src/php4] root# apachectl configtest
 apachectl: /usr/local/apache/bin/httpd Undefined symbols:
  _compress  
  _uncompress

Das hat nichts mit PHP zu tun, sondern mit den MySQL-Client-Bibliotheken. Manche benötigen --with-zlib, manche nicht. Auf diese Frage wird in den MySQL FAQ eingegangen.

9. Windows: Ich habe PHP installiert, aber wenn ich versuche, mit meinem Browser ein PHP-Script aufzurufen, erhalte ich die Fehlermeldung:
cgi error:
 The specified CGI application misbehaved by not
 returning a complete set of HTTP headers.
 The headers it did return are:

Diese Fehlermeldung bedeutet, dass PHP daran gescheitert ist, überhaupt irgendwas auszugeben. Wechseln Sie auf der Kommandozeile (in der Eingabeaufforderung) in das Verzeichnis, das die ausführbare PHP-Datei (unter Windows php.exe) enthält und lassen Sie php -i laufen, um eine sinnvolle Fehlermeldung zu bekommen. Falls PHP irgendwelche Probleme bei der Ausführung hat, werden entsprechende Fehlermeldungen ausgegeben, die Ihnen Hinweise darauf liefern, was zu tun ist. Falls sich der Bildschirm mit HTML-Quelltext füllt (die Ausgabe der Funktion phpinfo()), funktioniert PHP.

Funktioniert PHP erst mal auf der Kommandozeile, versuchen Sie nochmal, das Script mit dem Browser aufzurufen. Falls das immer noch misslingt, könnte das eine der folgenden Ursachen haben:

  • Die Zugriffsberechtigungen Ihres PHP-Scripts, Ihrer php.exe, php4ts.dll, php.ini oder irgendeiner PHP-Erweiterung die Sie versuchen zu laden, sind für den anonymen Internetbenutzer ISUR_<machinename> nicht ausreichend.

  • Die Scriptdatei existiert nicht (oder ist vielleicht, bezogen auf Ihr Web-Wurzelverzeichnis, nicht da, wo Sie denken). Beachten Sie, dass Sie beim IIS diesen Fehler aufspüren können, wenn Sie im Internet Services Manager beim Einstellen der script mappings die Option 'check file exists' ankreuzen. Falls dann eine Scriptdatei nicht existiert gibt der Server stattdessen einen 404 Fehler zurück. Das hat außerdem den zusätzlichen Vorteil, dass der IIS die erforderlichen Authentisierungen an Ihrem Script auf Grundlage der NTLanMan-Berechtigungen für Sie durchführt.

10. Windows: Ich habe alle Anweisungen befolgt, aber ich erreiche keine Zusammenarbeit zwischen PHP und den IIS.

Stellen Sie sicher, dass jeder Benutzer, der ein PHP-Script ausführt, die Berechtigung hat php.exe auzuführen! Der IIS verwendet den Benutzer anonymous, der bei der Installation des IIS hinzugefügt wird. Dieser Benutzer benötigt die entsprechenden Berechtigungen für php.exe. Außerdem benötigt auch jeder angemeldete Benutzer die Berechtigung php.exe auszuführen. Dem IIS4 müssen Sie mitteilen, dass PHP eine Script-Engine ist. Lesen Sie auch diese FAQ.

11. Wenn Ich PHP mit IIS, PWS, OmniHTTPD oder Xitami als CGI laufen lasse, bekomme ich die folgende Fehlermeldung: Security Alert! PHP CGI cannot be accessed directly..

Sie müssen die cgi.force_redirect-Anweisung auf 0 setzen. Weil diese Anweisung standardmäßig auf 1 gesetzt ist, müssen Sie darauf achten, dass sie nicht mit einem ; auskommentiert ist. Wie alle Anweisungen wird auch diese in der php.ini gesetzt.

Wegen des standardmäßigen Werts von 1 ist es äußerst wichtig sicherzustellen, dass die richtige php.ini gelesen wird. Lesen Sie für Einzelheiten diese FAQ.

12. Wie kann ich herausfinden, ob meine php.ini gefunden und gelesen wird? Anscheinend ist das nicht der Fall, weil meine Änderungen nicht übernommen werden.

Rufen Sie phpinfo() auf, um zu überprüfen, ob Ihre php.ini von PHP gelesen wird. Fast ganz oben gibt es einen Punkt namens Configuration File (php.ini). Dort können Sie feststellen, wo PHP nach der php.ini sucht und ob sie gelesen wird oder nicht. Falls es dort nur einen VerzeichnisPFAD gibt, wird sie nicht gelesen und Sie sollten Ihre php.ini in dieses Verzeichnis legen. Falls der Pfad die php.ini beinhaltet, dann wird sie auch gelesen.

Wenn Ihre php.ini gelesen wird und Sie PHP als Modul benutzen, müssen Sie Ihren Webserver neu starten, nachdem Sie Änderungen an der php.ini vorgenommen haben.