PHP 8.4.0 RC4 available for testing

Installation

In diesem Abschnitt geht es um übliche Fragen zur Installation von PHP. PHP gibt es für fast jedes Betriebssystem und fast jeden Webserver.

Um PHP zu installieren, folgen Sie bitte den Anweisungen im Installation und Konfiguration.

  1. Warum sollte ich Apache2 mit threaded MPM nicht in einer Produktionsumgebung verwenden?
  2. Unix/Windows: Wo sollte sich meine php.ini befinden?
  3. Unix: Ich 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 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-Skript aufzurufen, erhalte ich eine leere Seite.
  7. Unix/Windows: Ich habe PHP installiert, aber wenn ich versuche, mit meinem Browser ein PHP-Skript 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/php5] 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-Skript 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.
  13. Wie füge ich unter Windows mein PHP-Verzeichnis zu PATH hinzu?
  14. Wie mache ich unter Windows die Datei php.ini für PHP verfügbar?
  15. Windows: Wie kann ich überprüfen, ob PHP unter dem IIS in das temporäre Verzeichnis schreiben kann?
  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?
Warum sollte ich Apache2 mit threaded MPM nicht in einer Produktionsumgebung 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 zusammenzukleben. 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.

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-development 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 demselben Rechner verschiedene php.ini-Dateien für verschiedene Apache-Versionen haben.

Siehe auch das Kapitel über die Konfigurationsdatei.

Unix: Ich 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-Skript 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 » https://github.com/php/php-src/issues abgeben.

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

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_perl.c

# Extra Modules
LoadModule php_module         modules/mod_php.so
LoadModule php5_module        modules/libphp5.so
LoadModule perl_module        modules/libperl.so
Und fügen Sie
AddType application/x-httpd-php .php
... in die globalen Eigenschaften oder in die Eigenschaften der VirtualDomain, für die Sie PHP-Unterstützung benötigen, ein.

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.

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

Wenn Sie sich im Browser den Quelltext der Seite anschauen, werden Sie vermutlich den Quellcode Ihres PHP-Skripts sehen können. Das bedeutet, dass der Webserver das Skript 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.

Unix/Windows: Ich habe PHP installiert, aber wenn ich versuche, mit meinem Browser ein PHP-Skript 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.

Manche Betriebssysteme: Ich habe PHP ohne Fehlermeldungen installiert, aber wenn ich versuche, Apache zu starten, erhalte ich Fehler wegen undefinierter Symbole:
[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.

Windows: Ich habe PHP installiert, aber wenn ich versuche, mit meinem Browser ein PHP-Skript 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 Skript mit dem Browser aufzurufen. Falls das immer noch misslingt, könnte das eine der folgenden Ursachen haben:

  • Die Zugriffsberechtigungen Ihres PHP-Skripts, Ihrer php.exe, php5ts.dll, php.ini oder irgendeiner PHP-Erweiterung, die Sie versuchen zu laden, sind für den anonymen Internetbenutzer ISUR_<machinename> nicht ausreichend.
  • Die Skriptdatei 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 Skriptdatei 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 Skript auf Grundlage der NTLanMan-Berechtigungen für Sie durchführt.
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-Skript 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 Skript-Engine ist. Lesen Sie auch diese FAQ.

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.

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 verwenden, müssen Sie Ihren Webserver neu starten, nachdem Sie Änderungen an der php.ini vorgenommen haben.

Siehe auch php_ini_loaded_file().

Wie füge ich unter Windows mein PHP-Verzeichnis zu PATH hinzu?

Unter Windows:

  • Gehen Sie in die Systemsteuerung und öffnen Sie das System-Icon (Start → Systemsteuerung)

  • 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

Hinweis: Führen Sie einen Neustart durch, nachdem Sie die obigen Schritte befolgt haben, um sicher zu stellen, dass die PATH-Änderungen übernommen werden.

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 verwenden, sehen Sie in der Apache-Dokumentation nach, andernfalls müssen Sie die Umgebungsvariable PHPRC setzen.

Windows: Wie kann ich überprüfen, ob PHP unter dem IIS in das temporäre Verzeichnis schreiben kann?

  1. Klicken Sie im Datei-Explorer mit der rechten Maustaste auf das temporäre Verzeichnis (%TEMP%), um die Berechtigungen zu überprüfen. Das temporäre Verzeichnis kann über die Konfiguration oder über die Funktion phpinfo() ermittelt werden.

  2. Überprüfen Sie beim IIS, ob der Benutzer IIS_User die Berechtigung MODIFY hat.

Ist es möglich, die Apache Content-Negotiation (MultiViews Option) mit PHP zu verwenden?

Falls Links zu PHP-Dateien die Erweiterung enthalten, funktioniert alles perfekt. Diese FAQ ist nur für den Fall, dass Links zu PHP-Dateien keine Erweiterung enthalten und Sie die Content-Negotiation verwenden wollen, um PHP-Dateien von einer URL ohne diese Erweiterung zu wählen. Ersetzen Sie in diesem Fall die Zeile AddType application/x-httpd-php .php durch:

AddHandler php5-script php
AddType text/html php
Diese Lösung funktioniert nicht mit Apache 1, da das PHP-Modul kein php-Skript erfasst.

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>

add a note

User Contributed Notes 5 notes

up
19
per dot fikse at ipj dot no
19 years ago
Installing PHP 4 or 5 on Windows Server 2003 x64 results in http error 505. This is not a PHP bug. It is due to running a 32-bit ISAPI DLL under the 64-bit version of IIS 6, as documented here: http://support.microsoft.com/?id=895976

Solution: Flip the Metabase flag for Enable32bitAppOnWin64 as described in http://support.microsoft.com/?id=894435 ,
like this: CSCRIPT ADSUTIL.VBS SET W3SVC/AppPools/Enable32bitAppOnWin64 1

(Alternatively with full path: cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1)
up
8
charleslynch at xybersoftware dot com
16 years ago
One final note to the message below if you are getting the message about not having rights to execute...You need to use IIS right click on the website and choose 'Properties/Home Directory' then on the 'Execute Permissions' combo box you need to choose 'Scripts only'...Click ok...another dialog may appear asking which directories to apply the action too...choose any directories that you intend on using php in and click ok...It should work now...
up
9
emzeperx at emzeper dot hu
18 years ago
You do not have to restart the whole system make effect of changing the PATH env var. For me (sbs2003) worked automatically.
on older systems you can use

set $Path=%path%;c:\php

command to extend immediately the path var.
up
5
Curtis
17 years ago
I have some additional troubleshooting tips for 53.7, which deals with getting a blank screen on your browser when running a PHP script.

In addition to server misconfiguration, it may also be that PHP isn't configured to output errors to the browser, which is the case if you or your host uses a more secure php.ini. If this is the case, you need to find out where errors are being logged to find out if any errors are preventing normal output from being delivered to the client.

If you have access to php.ini, check the 'display_errors' directive, which is, by default, located under the 'error_reporting' directive. It's helpful to have 'display_errors' on during debugging phases, but best to have it off in production environments.

Related functions: http://php.net/ini_set | http://php.net/error_reporting | http://php.net/error_log
up
4
joerg at fenin dot de
17 years ago
To limit HTTP Request Methods on the Apache server running PHP you should use mod_rewrite or mod_security instead of LimitExcept, to give you more control over the handling of such http errors. Can go in .htaccess file or httpd.conf

# mod_rewrite
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} !^(GET|HEAD|POST)$
RewriteRule .* - [F,L]
</IfModule>

# mod_security
<IfModule mod_security.c>
SecFilterSelective REQUEST_METHOD "!^(GET|HEAD|POST)$" "deny,log,status:403"
</IfModule>

You can use the php request method scanner at askapache to see exactly how your server deals with various request methods, and check that your server is configured properly..

http://www.askapache.com/online-tools/request-method-scanner/
To Top