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 Mac OS vor OS X) und fast jeden Webserver.
Um PHP zu installieren, folgen Sie bitte den Anweisungen im Installation und Konfiguration.
PHP ist Klebstoff. Es ist der Klebstoff, der verwendet wird, um coole Web-Anwendungen zu erstellen indem er dutzende von Bibliotheken von Drittanbietern zusammenklebt und sie über eine intuitiv und einfach erlernbare Schnittstelle als zusammenhängende Einheit erscheinen lässt. Die Flexibilität und die Mächtigkeit von PHP sind auf die Stabilität und Robustheit der zugrunde liegenden Plattform angewiesen. Es braucht ein funktionierendes Betriebssystem, einen funktionierenden Webserver und funktionierende Bibliotheken Dritter, um zusammen zu kleben. Wenn eines davon nicht mehr funktioniert, braucht PHP Wege, um die Probleme erkennen und schnell beheben zu können. Wenn Sie das zugrunde liegende Gerüst dadurch komplexer machen, dass Sie keine völlig voneinander getrennten Ausführungsthreads und Speichersegmente und keine starke Sandbox für jede einzelne Anfrage haben, lassen Sie weitere Schwachstellen ins System von PHP einfließen.
Falls Sie threaded MPM benutzen wollen, sollten Sie nach einer FastCGI-Konfiguration schauen, in der PHP in seinem eigenen Speicherbereich läuft.
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
--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.
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 ( preg_match() 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.
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_perl.c # Extra Modules LoadModule php_module modules/mod_php.so LoadModule php5_module modules/libphp5.so LoadModule perl_module modules/libperl.so
AddType application/x-httpd-php .php
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.
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.
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 zusammenhängen, die Sie dann nochmal genau überprüfen sollten.
[mybox:user /src/php5] 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.
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:
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.
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.
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.
Siehe auch php_ini_loaded_file().
Unter Windows NT+ und Windows Server 2000+:
Gehen Sie in die Systemsteuerung und öffnen Sie das System-Icon (Start -> Einstellungen -> Systemsteuerung -> System oder bei Windows XP/2003+ einfach Start -> Systemsteuerung -> System)
Gehen Sie zum Register 'Erweitert'
Klicken Sie auf den Button 'Umgebungsvariablen'
Schauen Sie in das Fenster 'Systemvariablen'
Suchen Sie nach dem Pfad-Eintrag PATH (Sie müssen evtl. blättern um ihn zu finden)
Doppelklicken Sie auf den Pfad-Eintrag
Geben Sie Ihr PHP-Verzeichnis mit vorangestelltem ';' am Ende ein (z.B. ;C:\php)
Drücken Sie auf OK
Unter Windows 98/Me müssen Sie die Datei autoexec.bat editieren:
Öffnen Sie den Editor (Start -> Ausführen und notepad eingeben)
Öffnen Sie die Datei C:\autoexec.bat
Finden Sie die Zeile mit PATH=C:\WINDOWS;C:\WINDOWS\COMMAND;..... und fügen Sie ;C:\php am Ende der Zeile hinzu
Speichern Sie die Datei und starten Sie Ihren Computer neu
Hinweis: Führen Sie einen Neustart durch, nachdem Sie die obigen Schritte befolgt haben, um sicher zu stellen, dass die PATH-Änderungen übernommen werden.
Das PHP Handbuch hat früher empfohlen, Dateien ins Windows-Systemverzeichnis zu kopieren, weil sich dieses Verzeichnis (C:\Windows, C:\WINNT, etc.) standardmäßig im Pfad (PATH) des Systems befindet. Dateien ins Windows-Systemverzeichnis zu kopieren könnte Probleme verursachen und es wird schon lange davon abgeraten.
Es gibt mehrere Möglichkeiten, das zu erreichen. Falls Sie Apache benutzen, lesen Sie die für die jeweilige Installation bestimmte Anleitung (Apache 1, Apache 2). Andernfalls müssen Sie die Umgebungsvariable PHPRC setzen:
Unter Windows NT, 2000, XP und 2003:
Gehen Sie in die Systemsteuerung und öffnen Sie das System-Icon (Start -> Einstellungen -> Systemsteuerung -> System oder bei Windows XP/2003 einfach Start -> Systemsteuerung -> System)
Gehen Sie zum Register 'Erweitert'
Klicken Sie auf den Button 'Umgebungsvariablen'
Schauen Sie in das Fenster 'Systemvariablen'
Klicken Sie auf 'Neu' und geben Sie 'PHPRC' als Name für die Variable ein und als Wert für die Variable das Verzeichnis, in dem sich die php.ini befindet (z.B. C:\php)
Drücken Sie auf OK und starten Sie Ihren Computer neu
Unter Windows 98/Me müssen Sie die Datei autoexec.bat editieren:
Öffnen Sie den Editor (Start -> Ausführen und notepad eingeben)
Öffnen Sie die Datei C:\autoexec.bat
Fügen Sie am Ende der Datei eine neue Zeile ein: set PHPRC=C:\php (ersetzen Sie C:\php mit dem Verzeichnis, in dem sich die php.ini befindet). Bitte beachten Sie, dass der Pfad keine Leerzeichen enthalten darf. Falls Sie PHP zum Beispiel in C:\Program Files\PHP installiert haben, müssen Sie stattdessen C:\PROGRA~1\PHP eingeben.
Speichern Sie die Datei und starten Sie Ihren Computer neu
If links to PHP files include extension, everything works perfect. This FAQ is only for the case when links to PHP files don't include extension and you want to use content negotiation to choose PHP files from URL with no extension. In this case, replace the line AddType application/x-httpd-php .php with:
AddHandler php5-script php AddType text/html php
Nein, es ist möglich, jede Anfragemethode zu bearbeiten, z.B. auch CONNECT. Ein korrekter Antwortstatus kann mit header() gesendet werden. Falls nur die Methoden GET und POST bearbeitet werden sollen, kann das mit dieser Apache-Konfiguration erreicht werden:
<LimitExcept GET POST> Deny from all </LimitExcept>