|
|
Kapitel 53. Installation FAQ
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 im Teil II in dem PHP Handbuch.
- 1.
Warum sollte ich Apache2 mit threaded MPM nicht in einer
Produktions-Umgebung verwenden?
- 2.
Unix/Windows: Wo sollte sich meine php.ini befinden?
- 3.
Unix: I habe PHP installiert, aber jedesmal, wenn ich eine Seite
aufrufe, bekomme ich die Meldung 'Document Contains No Data'!
Woran liegt das?
- 4.
Unix: Ich habe PHP mit RPM-Paketen installiert, aber Apache
verarbeitet die PHP-Seiten nicht. Was ist da los?
- 5.
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?
- 6.
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?
- 7.
Unix/Windows: Ich habe PHP installiert, aber wenn ich versuche,
mit meinem Browser ein PHP-Script aufzurufen, erhalte ich eine
leere Seite.
- 8.
Unix/Windows: Ich habe PHP installiert, aber wenn ich versuche, mit
meinem Browser ein PHP-Script aufzurufen, erhalte ich vom Server einen
500 Fehler.
- 9.
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 |
- 10.
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: |
- 11.
Windows: Ich habe alle Anweisungen befolgt, aber ich erreiche
keine Zusammenarbeit zwischen PHP und den IIS.
- 12.
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..
- 13.
Wie kann ich herausfinden, ob meine php.ini gefunden und
gelesen wird? Anscheinend ist das nicht der Fall, weil meine
Änderungen nicht übernommen werden.
- 14.
Wie füge ich unter Windows PATH mein PHP-Verzeichnis
hinzu?
- 15.
Wie mache ich unter Windows die Datei php.ini für PHP verfügbar?
- 16.
Ist es möglich, die Apache Content-Negotiation (MultiViews Option) mit
PHP zu verwenden?
- 17.
Ist PHP auf die Bearbeitung von Anfragen mit der GET- und POST-Methode
beschränkt?
1.
Warum sollte ich Apache2 mit threaded MPM nicht in einer
Produktions-Umgebung verwenden?
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, stellen Sie das System von PHP
auf tönerne Füße.
Falls Sie das Gefühl haben, theaded MPM benutzen zu müssen, sollten Sie
nach einer FastCGI-Konfiguration schauen, in der PHP in seinem eigenen
Speicherbereich läuft.
Und schließlich: diese Warnung gegen die Verwendung von threaded MPM
gilt nicht so stark für Windows-Systeme, weil die Bibliotheken auf
dieser Plattform tendenziell threadsicher sind.
2.
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.
3.
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.
4.
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.
5.
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:
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.
6.
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.
7.
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.
8.
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
zusammenhängen, die Sie dann nochmal genau überprüfen sollten.
9.
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.
10.
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.
11.
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.
12.
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.
13.
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.
14.
Wie füge ich unter Windows PATH mein PHP-Verzeichnis
hinzu?
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'
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 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
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
Anmerkung:
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.
15.
Wie mache ich unter Windows die Datei php.ini für PHP verfügbar?
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
16.
Ist es möglich, die Apache Content-Negotiation (MultiViews Option) mit
PHP zu verwenden?
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:
# PHP 4
AddHandler php-script php
AddType text/html php
# PHP 5
AddHandler php5-script php
AddType text/html php |
This solution doesn't work for Apache 1 as PHP module doesn't catch
php-script.
17.
Ist PHP auf die Bearbeitung von Anfragen mit der GET- und POST-Methode
beschränkt?
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> |
| |