So testen Sie schnell Websites mit dem integrierten Webserver von PHP
Müssen Sie schnell einen Webserver starten, um eine PHP-Anwendung zu testen? Der PHP-Interpreter hat einen eingebaut! Sie können dies verwenden, um Ihre Arbeit schnell zu überprüfen, ohne Apache, NGINX oder eine Containerisierungslösung auszuführen.
Der integrierte PHP-Server hat relativ wenig Beachtung gefunden, ist aber für Entwicklungszwecke leistungsfähig genug. In diesem Tutorial zeigen wir, wie Sie es als Alternative zu anderen Mikroservern wie Pythons SimpleHTTPServer oder dem http-server npm-Paket verwenden können, die beide keine PHP-Skripte ausführen können.
Verwenden des eingebetteten Servers
Der eingebaute Server ist ein praktischer Mechanismus, der Ihnen hilft, PHP-Sites in Umgebungen zu testen, die keinen vollständigen HTTP-Server haben. Es ist in PHP 5.4 und allen späteren Versionen verfügbar. Sie können es direkt von Ihrem Arbeitsverzeichnis aus ausführen, ohne zuerst einen virtuellen Host einzurichten.
Denken Sie vor der Verwendung des Servers daran, dass er nur für die Entwicklung bestimmt ist. Die PHP-Dokumentation warnt ausdrücklich davor , diesen Server für Produktionsanwendungen bereitzustellen. Es ist nicht sicher genug, in öffentlichen Netzwerken offen zu sein.
Serverstart
Der Server wird gestartet, indem ein -S
Flag an die php
ausführbare Datei übergeben wird:
$ php -S localhost:8080
[Fri Jun 10 16:00:00 2022] PHP 8.1.5 Development Server (http://localhost:8080) started
Das an den Befehl übergebene Argument gibt die Empfangsadresse des Servers an. Wir haben den Port 8080
im localhost
obigen Beispiel verwendet. Jetzt können Sie http://localhost:8080
zu Ihrem Webbrowser gehen, um auf den Inhalt in Ihrem Arbeitsverzeichnis zuzugreifen. Alle PHP-Skripte werden auf Ihre Anfrage hin automatisch ausgeführt.
Sie können einen Pfad bereitstellen, der außerhalb Ihres Arbeitsverzeichnisses liegt, indem Sie -t
beim Starten des Servers ein Flag setzen:
$ php -S localhost:8080 -t /home/$USER/public_docs
Das Dokumentenstammverzeichnis befindet sich nun /public_docs
in Ihrem Home-Ordner.
Lassen Sie ein Terminalfenster geöffnet, während Sie den Webserver verwenden. Drücken Sie Strg+C, um den Vorgang zu stoppen, wenn Sie mit dem Testen Ihrer Website fertig sind. PHP protokolliert jede eingehende Anfrage in Ihrem Terminalfenster, einschließlich der URI- und HTTP-Methode. Alle nicht erfassten PHP-Fehler werden auch in den Protokollen angezeigt.
Fernzugriff aktivieren
Das Abhören localhost
lässt keine eingehenden Verbindungen von anderen Geräten in Ihrem Netzwerk zu. Sie können den Fernzugriff aktivieren, indem Sie sich 0.0.0.0
an Folgendes binden:
$ php -S 0.0.0.0:8080
Bitte beachten Sie, dass der Server nicht für den produktiven Einsatz geschützt ist und nicht der Öffentlichkeit zugänglich gemacht werden sollte. Erlauben Sie den Fernzugriff nur, wenn es unbedingt erforderlich ist, beispielsweise beim Testen einer bestimmten Funktion auf einem Mobilgerät. Stellen Sie sicher, dass der verwendete Port nicht für das Internet geöffnet ist.
Fordern Sie ein Fallback-Match an
PHP sucht index.php
auch nach index.html
Dateien im Stammverzeichnis des aktiven Dokuments, wenn die eingehende Anfrage keine URI-Komponente enthält. Wenn keine dieser Dateien vorhanden ist, bewegt sich der Server weiter im Verzeichnisbaum nach oben und sucht nach einem Index in einem der übergeordneten Root-Dokumente. Dies bedeutet, dass Sie möglicherweise versehentlich Inhalte bereitstellen, die sich außerhalb des von Ihnen angegebenen Verzeichnisses befinden. Der Status 404 Not Found wird ausgegeben, wenn die Spitze des Baums erreicht wurde, aber keine Indexdatei gefunden wurde.
Anforderungen, die einen URI enthalten (z. B. /file
), müssen genau mit der statischen Datei im Dokumentstamm übereinstimmen. Andernfalls wird ein Fehler 404 zurückgegeben.PHP setzt den Antwortheader automatisch Content-Type
auf den MIME-Typ der bereitgestellten Datei für die gängigsten Dateierweiterungen.
Verwenden eines Router-Skripts
Optional können Sie den Webserver so konfigurieren, dass er bei jeder Anfrage ein Skript aufruft. Auf diese Weise können Sie den Front-Controller Ihrer Anwendung verwenden, um erweitertes dynamisches Routing durchzuführen.
Die Router-Funktionalität wird aktiviert, indem beim Starten des Servers der PHP-Dateiname in der Befehlszeile angegeben wird:
$ php -S localhost:8080 router.php
PHP wird nun verwendet router.php
, um jede eingehende Anfrage zu verarbeiten. Sie können Benutzer an die entsprechende Stelle in Ihrer Anwendung leiten, indem Sie den Anforderungs-URI überprüfen:
Die von Ihrem Router-Skript generierte Ausgabe wird zur Antwort, die an den Client zurückgesendet wird. Die Ausnahme ist script return false
: In diesem Fall greift PHP darauf zurück, eine statische Datei zurückzugeben, die mit dem ursprünglichen Anforderungs-URI übereinstimmt.
Eingebettete Servererkennung aus Ihrem PHP-Code
Ihr PHP-Code kann feststellen, ob er vom integrierten Webserver aufgerufen wird, indem er den Namen der aktiven Schnittstelle überprüft. Die Funktion php_sapi_name()
liefert diesen Wert. Es wird gesetzt, wenn cli-server
das Skript von der integrierten Serverkomponente aufgerufen wird.
Bearbeitung mehrerer Anfragen gleichzeitig
Standardmäßig wird der Server im synchronen Einzelprozessmodus ausgeführt. Anfragen werden einzeln verarbeitet und blockieren die Ausführung der anderen, bis sie abgeschlossen sind. Dies ist einer der Gründe, warum der Server nicht für den Produktiveinsatz geeignet ist.
PHP 7.4 hat Unterstützung für die gleichzeitige Bearbeitung mehrerer Anfragen hinzugefügt. fork()
Dies ist verfügbarkeitsabhängig und funktioniert nicht unter Windows. Wenn dieser Modus aktiviert ist, erstellt der Server einen neuen Worker, um jede eingehende Anfrage zu bedienen. Sie können es aktivieren, indem Sie PHP_CLI_SERVER_WORKERS
die Umgebungsvariable auf die gewünschte Anzahl von Workern setzen:
$ PHP_CLI_SERVER_WORKERS=8 php -S localhost:8080
Diese Funktionalität ist in PHP 8.1 noch als experimentell gekennzeichnet.
Zusammenfassung
PHP verfügt über einen integrierten Webserver, mit dem Sie Ihre Anwendungen bequem testen und schnell auf den Inhalt des lokalen Dateisystems in Ihrem lokalen Netzwerk zugreifen können. Es unterstützt die Ausführung von PHP-Skripten, vollständiges Routing und statische Dateien mit den gängigsten MIME-Typen.
Obwohl der Server jetzt einen optionalen Fork-Modus unterstützt, wird es nicht empfohlen, ihn in einer Produktionsumgebung zu verwenden. Es soll bei der Entwicklung helfen und es fehlen die Anpassungs- und Sicherheitsfunktionen, die Sie für öffentliche Bereitstellungen benötigen. Wo es sich auszeichnet, ist es als leichte und integrierte Alternative zu herkömmlichen Entwicklungsplattformen wie WAMP , XAMPP und Docker-Containern.
Schreibe einen Kommentar