Facebook
Twitter
Google+
Kommentare
1

Der eingebaute Webserver in PHP 5.4

Mit PHP 5.4 kommt ein kleiner eingebauter Webserver mitgeliefert, der allerdings nur für Testzwecke genutzt werden soll, auf Produktionsmaschienen soll man ihn nicht einsetzen, die Performance ist nicht so der Hit (single threaded) und auch Features wie .htaccess Support (mod_rewrite etc.) und einiges andere fehlen.

Falls bei der Entwicklung oder auf einer Testmachine “mal eben schnell” ein Script via Webserver getestet werden soll kann man sich die Installation eines “richtigen” Webservers sparen, und einfach PHP selbst nutzen:

php -S localhost:8000

Damit wird das aktuelle Verzeichnis auf localhost Port 8000 verfügbar gemacht. Im aktuellen Verzeichnis liegt eine index.php. Rufe ich dies nun auf im Browser:

http://localhost:8000/

The requested resource / was not found on this server.

Eigentlich sollte nun die index.php ausgeführt werden. Unter Linux funktioniert das auch wunderbar, unter Windows war das wohl ein Bug den ich gefunden habe, der auch innerhalb eines Tages behoben wurde. Dann also direkt:

http://localhost:8000/index.php

Dies ist eine Test PHP Datei

Auf der Konsole sehe ich die folgende Ausgabe:

PHP 5.4.0beta2 Development Server started at Sat Oct 22 12:50:09 2011
Listening on localhost:8000
Document root is C:\Temp\php54beta2\public
Press Ctrl-C to quit.
[Sat Oct 22 12:50:18 2011] ::1:3216 [404]: / - No such file or directory
[Sat Oct 22 12:50:18 2011] ::1:3218 [404]: /favicon.ico - No such file or directory
[Sat Oct 22 12:50:18 2011] ::1:3219 [404]: /favicon.ico - No such file or directory
[Sat Oct 22 12:50:18 2011] ::1:3220 [404]: /favicon.ico - No such file or directory
[Sat Oct 22 12:50:24 2011] ::1:3227 [200]: /index.php
[Sat Oct 22 12:50:40 2011] ::1:3239 [404]: / - No such file or directory
[Sat Oct 22 12:50:51 2011] ::1:3249 [404]: / - No such file or directory

Soll nicht das aktuelle Verzeichnis genommen werden kann dies mit dem Parameter -t geändert werden:

php -S localhost:8000 -t C:/Temp/php54beta2/public

Da es keine .htaccess Unterstützung gibt, viele Projekte aber eine Regel haben die alle Requests auf ein Router-Script umbiegt, bietet der eingebaute Webserver diese Möglichkeit per Parameter:

php -S localhost:8000 C:/Temp/php54beta2/public/index.php

Im PHP Script kann man übrigens erkennen ob es durch den eingebauten Webserver aufgerufen wurde:

if (php_sapi_name() == 'cli-server') {

Zum Schluss noch 2 schnelle Performance-Tests mittels Apache Bench auf eine statische Datei und eine 1-zeilige PHP Datei (10000 Requests, 30 parallel, beides ohne APC):

PHP CLI Webserver:
index.php (24 Byte): 424 Requests/s
bild.png (185 Byte): 450 Requests/s

Apache Webserver:
index.php (24 Byte): 718 Requests/s
bild.png (185 Byte): 845 Requests/s

Bei diesen kleinen Dateien ist es also durchaus schnell, aber bei komplexeren Scripten und vielen parallelen Zugriffen wird er schnell langsamer, da sie wie gesagt seriell abgearbeitet werden.

Ähnliche Artikel:

  1. UDP Nachrichten versenden und empfangen
Über den Autor

PHP Gangsta

Der zweitgrößte deutsche, eher praxisorientierte PHP-Blog von Michael Kliewe veröffentlicht seit Mitte 2009 Artikel für Fortgeschrittene.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen