Kurz gesagt: Um PHP lokal zu entwickeln, gibt es drei gängige Wege: den eingebauten Webserver (php -S) für schnelle Versuche, die offiziellen PHP-Docker-Images für nachbaubare Umgebungen und Werkzeuge wie DDEV, die fertige Projektumgebungen für WordPress, TYPO3, Shopware oder Laravel erzeugen. Entscheidend ist weniger das Werkzeug als die Übereinstimmung: Lokal sollte dieselbe PHP-Version mit denselben Erweiterungen laufen wie live. Für die Sicherheit zählt am Ende aber immer die Laufzeit auf dem Server.
Warum eine eigene Entwicklungsumgebung?
Änderungen direkt auf dem Live-Server zu machen, ist riskant: Jeder Tippfehler ist sofort für Kunden sichtbar, und Testdateien bleiben gern liegen. Eine lokale Umgebung trennt Ausprobieren von Betrieb. Sie ist zugleich der Ort, an dem neue PHP-Versionen und Sicherheitsupdates zuerst getestet werden.
Für Geschäftsführung und IT-Leitung ist die Frage daher nicht, ob es eine Entwicklungsumgebung gibt, sondern ob sie dem Live-System entspricht. Eine lokale Umgebung mit PHP 8.4, während live noch 8.1 läuft, verschleiert Probleme statt sie zu zeigen. Dasselbe gilt für Datenbankversion, Webserver und Erweiterungen wie intl, gd oder pdo_mysql: Schon eine fehlende Erweiterung kann dazu führen, dass ein Fehler erst live auffällt.
Die Optionen im Überblick
| Option | Geeignet für | Stärken | Grenzen |
|---|---|---|---|
Eingebauter Server php -S |
kurze Versuche, kleine Skripte | ohne Installation weiterer Software | kein Ersatz für Nginx oder Apache, nicht für öffentliche Netze |
| Offizielles Docker-Image | Teams, nachbaubare Umgebungen | Version per Tag festlegbar, nah an Container-Betrieb | Konfiguration und Zusammenspiel mehrerer Container selbst bauen |
| DDEV | CMS- und Framework-Projekte | fertige Projekttypen, Datenbank und Webserver inklusive | setzt Docker voraus, eigene Konventionen |
| Lokal installiertes PHP | Einzelentwickler | schnell, direkt | Versionen mehrerer Projekte schwer parallel zu halten |
Der eingebaute Webserver
Seit PHP 5.4 enthält die Kommandozeile einen kleinen Webserver. Er startet im aktuellen Verzeichnis oder mit -t in einem anderen Dokumentenverzeichnis:
php -S localhost:8000 -t public/
Optional übergeben Sie ein Router-Skript, das bei jeder Anfrage zuerst läuft. Das Handbuch ist bei der Einordnung eindeutig: Der Server soll die Entwicklung unterstützen, ist kein vollwertiger Webserver und soll nicht in einem öffentlichen Netz verwendet werden. Binden Sie ihn deshalb an localhost, nicht an 0.0.0.0, sonst ist er unter Umständen im Firmen- oder Hotel-WLAN erreichbar. Mehr zur Kommandozeile unter PHP auf der Kommandozeile.
Docker: offizielle PHP-Images
Die offiziellen Images gibt es in mehreren Varianten: cli für die Kommandozeile, apache mit Apache und mod_php, fpm für den Betrieb hinter Nginx oder einem anderen Proxy, dazu Alpine-Varianten für kleine Images. Ein schneller Start mit Apache:
docker run --rm -p 8080:80 -v "$PWD":/var/www/html php:8.4-apache
Die Images enthalten die Vorlagen php.ini-development und php.ini-production im Verzeichnis $PHP_INI_DIR. Lokal ist die Entwicklungsvorlage sinnvoll, weil sie Fehler anzeigt. Für Produktion empfiehlt die Image-Dokumentation ausdrücklich die Produktionsvorlage. Erweiterungen installieren Sie mit den mitgelieferten Hilfsskripten docker-php-ext-configure, docker-php-ext-install und docker-php-ext-enable. Wie Tags und Digests funktionieren, erklärt Offizielle PHP-Docker-Images.
DDEV: fertige Umgebungen für CMS und Frameworks
DDEV baut auf Docker auf und richtet für ein Projekt Webserver, PHP, Datenbank und Hilfsdienste ein. Die Schnellstartanleitungen folgen fast immer demselben Muster:
ddev config --project-type=wordpress --docroot=web
ddev start
ddev composer install
ddev launch
Als Projekttypen kennt DDEV unter anderem wordpress, typo3, shopware6, laravel, symfony, drupal11, magento2 und den allgemeinen Typ php. Die PHP-Version legen Sie in .ddev/config.yaml fest; laut Dokumentation sind Versionen von 5.6 bis 8.5 möglich, Standard ist 8.4:
# .ddev/config.yaml (Auszug)
php_version: "8.3"
webserver_type: nginx-fpm # alternativ apache-fpm
So entspricht die lokale Umgebung der Live-Version, auch wenn diese noch nicht die neueste ist.
Lokale Entwicklung, Patchstand und PHP2Shell
Nach PHP2Shell haben mehrere Plattformanbieter auf einen typischen Denkfehler hingewiesen. Vercel betont laut Bulletin, dass ein Update der lokalen Entwicklungsumgebung, des Anwendungscodes oder der Plugins nicht reicht; entscheidend ist die PHP-Laufzeit, die tatsächlich ausliefert. Lokal PHP 8.4.27 zu haben, schützt den Server mit 8.4.26 nicht.
Umgekehrt bringt die Entwicklungsumgebung eigene Risiken mit, die in die Produktion wandern können:
- Entwicklungs-ini in der Produktion:
display_errorsist inphp.ini-developmenteingeschaltet. Gelangt diese Datei auf den Server, sehen Besucher Pfade und Fehlermeldungen. Siehe Fehlerausgaben in der Produktion abschalten. - Vergessene Testdateien:
phpinfo()-Dateien, Datenbank-Dumps oder.env-Dateien mit Zugangsdaten gehören nicht ins Deployment. - Offene Entwicklungsserver:
php -Soder Container mit veröffentlichten Ports auf Rechnern im Netz. - Veraltete Images: Lokale Images werden nicht von selbst aktualisiert; nach einem PHP-Sicherheitsrelease gehört auch die Entwicklungsumgebung neu gebaut, damit Tests mit der korrigierten Version laufen.
Legen Sie die PHP-Version an einer Stelle fest, etwa im Dockerfile oder in .ddev/config.yaml, und ändern Sie sie bei Updates gemeinsam mit der Serverkonfiguration.
Wie hilft PHP SOS konkret?
Im Security-Wartungsvertrag sorgen wir dafür, dass Entwicklung und Betrieb zusammenpassen:
- Abgleich: Wir vergleichen PHP-Version und Erweiterungen von Entwicklungs-, Test- und Live-Umgebung.
- Update-Ablauf: Neue PHP-Releases werden zuerst in der Testumgebung eingespielt, dann live, jeweils mit Neustart.
- Deployment prüfen: Wir achten darauf, dass keine Entwicklungs-ini, Testdateien oder Zugangsdaten auf den Server gelangen.
- Dokumentation: Sie wissen jederzeit, welche Version wo läuft.
Häufige Fragen
Darf ich den eingebauten PHP-Webserver öffentlich nutzen?
Nein. Das PHP-Handbuch sagt ausdrücklich, dass der mit php -S gestartete Server der Entwicklung dient und nicht in einem öffentlichen Netz verwendet werden soll. Für den Betrieb gehören PHP-FPM mit Nginx oder Apache dazu.
Was ist DDEV?
DDEV ist ein Werkzeug, das auf Docker aufbaut und fertige Entwicklungsumgebungen für PHP-Projekte erzeugt. Es kennt Projekttypen für WordPress, TYPO3, Shopware 6, Laravel, Drupal und weitere Systeme.
Reicht es, die lokale PHP-Version zu aktualisieren?
Nein. Gegen Lücken wie PHP2Shell zählt die PHP-Laufzeit, die tatsächlich ausliefert, also die auf dem Server. Die lokale Umgebung sollte aber dieselbe Version haben, damit Tests aussagekräftig sind.
Welche php.ini nutze ich lokal?
Lokal ist php.ini-development sinnvoll, weil sie Fehler anzeigt. In der Produktion gehört php.ini-production verwendet. Die offiziellen Docker-Images bringen beide Vorlagen mit.