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: