So testen Sie schnell Websites mit dem integrierten Webserver von PHP

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 -SFlag an die phpausfü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 8080im localhostobigen Beispiel verwendet. Jetzt können Sie http://localhost:8080zu 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 -tbeim Starten des Servers ein Flag setzen:

$ php -S localhost:8080 -t /home/$USER/public_docs

Das Dokumentenstammverzeichnis befindet sich nun /public_docsin 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 localhostlässt keine eingehenden Verbindungen von anderen Geräten in Ihrem Netzwerk zu. Sie können den Fernzugriff aktivieren, indem Sie sich 0.0.0.0an 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.phpauch nach index.htmlDateien 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-Typeauf 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-serverdas 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_WORKERSdie 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

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert