Eliminierung technischer Schulden mit PHPStan, Rector PHP und PHPUnit. Über 20 Jahre Praxiserfahrung in skalierbaren Backends.
- Erstellt:
- Aktualisiert:
- Autor:
- Roland Golla
Was ist FrankenPHP?
FrankenPHP ist ein moderner Application Server für PHP, der auf dem in Go geschriebenen Webserver Caddy aufbaut. Anders als klassische Setups mit Nginx und PHP-FPM vereint FrankenPHP Webserver und PHP Interpreter in einem einzigen Prozess. Dazu kommen automatisches HTTPS, HTTP/2 und HTTP/3 sowie der Worker Mode, der PHP Anwendungen dauerhaft im Speicher hält.
Seit Mai 2025 wird FrankenPHP offiziell von der PHP Foundation unterstützt. Der Code liegt in der PHP Organisation auf GitHub unter github.com/php/frankenphp. Hosting Anbieter wie Upsun, Laravel Cloud und Clever Cloud unterstützen FrankenPHP nativ. Gebaut hat es Kévin Dunglas, Gründer der Kooperative Les-Tilleuls.coop und Mitglied im Symfony Core Team.
FrankenPHP läuft mit jeder PHP Anwendung. Besonders eng ist die Integration mit Laravel über Laravel Octane und mit Symfony über die FrankenPHP Runtime. Das offizielle Symfony Docker Projekt liefert ein rootless Image für Production, das nur enthält, was FrankenPHP und Symfony brauchen. Wer seine Docker Infrastruktur für PHP modernisieren will, findet in FrankenPHP 2026 den schlanksten Weg.
FrankenPHP mit NCA: Schnelle Hilfe vom Experten
Wir arbeiten täglich mit Symfony, PHP und Docker auf eigenen Servern in Deutschland. Wir kennen den Weg vom klassischen Nginx und PHP-FPM Setup bis zum schlanken Container mit Worker Mode. Wir wissen, wo es hakt: Zustand zwischen Requests, Speicher, der langsam wächst, und Header hinter dem Reverse Proxy. Jeder Umbau läuft bei uns durch PHPUnit, PHPStan und Cypress Tests in der Pipeline.
Für den Umstieg auf FrankenPHP passen unser PHP Consulting und das PHP Update auf 8.4 und 8.5. Alte Projekte bringen wir mit der Legacy Modernisierung für PHP und Symfony und gezieltem PHP Refactoring auf Kurs. Den Rollout sichern wir mit einer CI CD Pipeline mit Docker und Staging ab.
Gesetzliche Konformität & Inklusion. Optimierung von Performance und Conversion durch radikal nutzerzentriertes, universelles Design.
Skalierbare KI-Systeme mit echtem Code Ownership. CI/CD, Backup-Strategien und Infrastruktur, die mit deinem Team wächst.
FrankenPHP 1.12.7: Aktueller Stand im Oktober 2026
Die aktuelle Version ist FrankenPHP 1.12.7 vom August 2026. Sie ist ein reines Fix Release. Im klassischen Modus ging Output verloren, der nach fastcgi_finish_request() oder frankenphp_finish_request() geschrieben wurde. Das ist behoben. Die Metriken zur Thread Anzahl zeigen wieder aktuelle Werte. Und ein Restart Hook, der Neustarts in Serie auslösen konnte, ist raus.
Spannender ist der Blick auf die ganze 1.12er Reihe. Sie hat mehrere ernste Themen abgeräumt:
- 1.12.3 (Mai 2026): schließt CVE-2026-45062, eingestuft als hoch mit CVSS 8.1. Unsichere Unicode Behandlung im CGI Path Splitting konnte eine Datei ohne php Endung als PHP ausführen. Betroffen sind 1.11.2 bis 1.12.2.
- 1.12.4 (Juni 2026): Hardening Release. Caddy springt auf 2.11.4, Mercure auf 0.24.2. Dazu Schutz gegen Underscore Header Spoofing und Fixes für Crashes und Data Races im Worker Mode.
- 1.12.5 (Juli 2026): Security Release. Die Docker Images zeigen kein
phpinfo()mehr als Startseite. Session IDs leaken im Worker Mode nicht mehr zwischen Requests, wenn die Session Extension als Shared Module geladen ist. Neu ist ein Schutz gegen langsame POST Requests mit 60 Sekunden Idle Timeout. - 1.12.6 (Juli 2026): behebt einen Crash unter HTTP/2 beim Lesen von
php://inputnach dem Ende des Requests.
Underscore Header Spoofing ist der wichtigste Punkt für Teams mit Reverse Proxy. CGI macht aus Bindestrichen Unterstriche. Aus Foo-Bar wird HTTP_FOO_BAR. Ein Client kann also einen Header Foo_Bar schicken, der in $_SERVER nicht mehr von einem echten Foo-Bar zu unterscheiden ist. Wer Headern wie forwarded-for oder Auth Headern vertraut, hat damit ein Problem. Caddy 2.11.4 ignoriert Header mit Unterstrichen jetzt direkt auf Server Ebene.
Für den Betrieb heißt das: Version pinnen, auf 1.12.7 gehen, danach messen. Wir helfen Teams bei PHP Versionswechseln, prüfen Abhängigkeiten mit Composer Audit und bauen den Rollout über PHP Deployer und saubere Docker Images.
Worker Mode: Persistente PHP Prozesse für mehr Performance
Das Herzstück von FrankenPHP ist der Worker Mode. Im klassischen PHP Setup bootet bei jedem Request die ganze Anwendung neu: Framework, Konfiguration, Container, Datenbankverbindung. Im Worker Mode startet die Anwendung einmal und bleibt im Speicher. Jeder weitere Request nutzt den fertigen Zustand. Der Overhead pro Request sinkt deutlich.
Ein paar Zahlen aus dem Projekt und der Community:
- Version 1.3: mit korrekt konfiguriertem Worker Mode 54 % mehr Requests auf gleicher Hardware als Version 1.2.5
- Windows: der erste Community Benchmark nach dem nativen Windows Support zeigte einen 3,6 fachen Vorsprung gegenüber einem optimierten Nginx und PHP-FPM Setup
Solche Werte hängen stark von der Anwendung ab. Messt immer mit eurem eigenen Code.
Symfony und Laravel unterstützen den Worker Mode nativ:
- Symfony: ab Symfony 7.4 direkt eingebaut. Das frühere Zusatzpaket
runtime/frankenphp-symfonybraucht ihr nicht mehr. Ältere Versionen nutzen weiter dieses Paket. - Laravel: über Laravel Octane mit dem FrankenPHP Driver
Seit Version 1.11 gibt es Native Hot Reloading im Worker Mode. FrankenPHP erkennt geänderte Dateien und startet die Worker im Hintergrund neu. Ein manueller Neustart ist nicht nötig.
# FrankenPHP Worker Mode in der Caddyfile konfigurieren
{
frankenphp {
worker {
file /path/to/app/public/index.php
watch
}
}
}
FrankenPHP und Docker: Rootless Images für Production
FrankenPHP bringt Webserver und PHP in einen Container. Klassische Setups brauchen mindestens zwei: einen für Nginx, einen für PHP-FPM. Mit FrankenPHP reicht ein einzelner Docker Container. Deployment, Monitoring und Ressourcenplanung werden einfacher.
Das offizielle Symfony Docker Projekt (github.com/dunglas/symfony-docker) nutzt FrankenPHP als Runtime. Das Image für Production ist rootless und schlank. Die wichtigsten Punkte:
- Multi Stage Builds: Entwicklung und Production sauber getrennt, Xdebug nur im Dev Image
- Rootless: der Container läuft als Benutzer ohne Rechte, die Angriffsfläche sinkt
- Hardened Images: Distroless oder Docker Hardened Base Images sind möglich
- Automatisches HTTPS: Let's Encrypt Zertifikate werden erzeugt und erneuert
- Composer im Build: Abhängigkeiten werden beim Bauen aufgelöst, nicht zur Laufzeit
# Rootless FrankenPHP Dockerfile
FROM dunglas/frankenphp
ARG USER=appuser
RUN useradd ${USER} && \
setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/frankenphp && \
chown -R ${USER}:${USER} /config/caddy /data/caddy
USER ${USER}
Für Teams mit Symfony oder Laravel im Container ist das eine schlankere und sicherere Alternative zum klassischen Nginx und PHP-FPM Stack. Statt Nginx Konfiguration, FPM Pool und Supervisor gibt es nur noch eine Caddyfile.
Installation von FrankenPHP 2026
FrankenPHP läuft 2026 auf Linux, macOS und Windows. Seit Version 1.11.3 steckt PHP 8.5 in den statischen Binaries. PHP 8.2 bis 8.4 werden ebenfalls unterstützt.
Standalone Binary (Linux und macOS): Ein Befehl installiert FrankenPHP samt PHP. Weitere Abhängigkeiten braucht es nicht. Die Linux Binaries sind statisch gelinkt und laufen auf jeder Distribution.
# One-Line-Installation (Linux/macOS)
curl https://frankenphp.dev/install.sh | sh
# PHP-Dateien im aktuellen Verzeichnis servieren
frankenphp php-server
# CLI-Skript ausführen
frankenphp php-cli /path/to/script.php
Homebrew (macOS und Linux):
brew install dunglas/frankenphp/frankenphp
APT Pakete (Debian und Ubuntu):
VERSION=85
sudo curl https://pkg.henderkes.com/api/packages/${VERSION}/debian/repository.key \
-o /etc/apt/keyrings/static-php${VERSION}.asc
echo "deb [signed-by=/etc/apt/keyrings/static-php${VERSION}.asc] \
https://pkg.henderkes.com/api/packages/${VERSION}/debian php-zts main" \
| sudo tee -a /etc/apt/sources.list.d/static-php${VERSION}.list
sudo apt update && sudo apt install frankenphp
Docker:
docker run -v .:/app/public \
-p 80:80 -p 443:443 -p 443:443/udp \
dunglas/frankenphp
Windows (seit März 2026): Seit Version 1.11.3 läuft FrankenPHP nativ unter Windows, inklusive Worker Mode und Hot Reloading. Die Binaries werden gegen die offiziellen PHP Builds aus Visual Studio gelinkt. Möglich machen das neue CGO Fähigkeiten in Go 1.26. Die Downloads liegen auf der Release Seite auf GitHub.
FrankenPHP und Nginx mit PHP-FPM im Vergleich
Nginx als Reverse Proxy plus PHP-FPM als Process Manager hat sich über Jahre bewährt. FrankenPHP geht einen anderen Weg. In vielen Fällen bringt das klare Vorteile:
- Ein Prozess statt zwei: kein separater Nginx und FPM Prozess, weniger Overhead, einfacheres Debugging
- Kein Unix Socket: Requests laufen direkt, ohne Umweg zwischen Webserver und PHP
- Worker Mode: kein Bootstrapping bei jedem Request, die größte Bremse im klassischen FPM Setup
- Automatisches HTTPS: Caddy erzeugt und erneuert TLS Zertifikate, Certbot entfällt
- HTTP/3: direkt eingebaut, bei Nginx braucht es dafür ein eigenes Modul und extra Konfiguration
- Early Hints (103): der Browser lädt Assets vor, bevor die Response fertig ist
Wo FrankenPHP nicht immer passt: bei sehr speziellen Proxy Setups mit Lua Modulen oder bei Legacy Anwendungen, die auf Apache und .htaccess bauen. Hier braucht es einen Migrationspfad. Auch lokal mit DDEV klappt die Integration, ist aber noch nicht so ausgereift wie die klassische FPM Anbindung.
Für Symfony und Laravel Projekte, die Performance und einfaches Deployment wollen, ist FrankenPHP 2026 die erste Wahl. Das ist nicht nur Community Meinung: Die PHP Foundation steht offiziell hinter dem Projekt.
FrankenPHP und die PHP Foundation
Im Mai 2025 kam FrankenPHP offiziell unter das Dach der PHP Foundation. Der Code wanderte in die PHP Organisation auf GitHub (github.com/php/frankenphp). Das Team der Foundation arbeitet aktiv mit. Die Governance bleibt bei den Maintainern Kévin Dunglas, Robert Landers und Alexander Stecher.
Damit ist klar: FrankenPHP ist kein Nebenprojekt mehr, sondern eine anerkannte Laufzeit für PHP. PHP-FPM und andere SAPIs bleiben voll unterstützt. FrankenPHP kommt als moderne Option dazu.
Die wichtigsten Meilensteine:
- Oktober 2022: erste Version von Kévin Dunglas
- Dezember 2024: Version 1.3 mit 54 % mehr Durchsatz und Watcher Mode
- Mai 2025: Aufnahme in die PHP Foundation
- August 2025: 10.000 Sterne auf GitHub
- Dezember 2025: Version 1.11 mit Native Hot Reloading und Structured Logging
- Februar 2026: Version 1.11.2 mit Go 1.26 und schnelleren CGO Calls
- März 2026: nativer Windows Support mit Version 1.11.3, kurz danach die 1.12er Reihe
- Mai bis Juli 2026: Security Releases 1.12.3 bis 1.12.5
- August 2026: Version 1.12.7 als aktueller Stand
I hope FrankenPHP will become the default runtime for PHP.
Continuous Delivery für PHP und Symfony: GitLab CI Pipeline mit Docker, Staging und einer Preview URL pro Feature Branch. Codeanalyse, Cypress E2E Tests, Backups.
Mehr erfahrenNCA Erfahrung mit PHP Laufzeit und Deployment
FrankenPHP ist selten das einzige Thema. Meist hängt der Umstieg an der ganzen Kette: Image, Tests, Abhängigkeiten, Rollout. Dabei helfen wir Teams mit diesen Bausteinen:
- Container: schlanke Docker Images und lokale Umgebungen mit DDEV
- Webserver: Caddy als Webserver mit Auto HTTPS, die Basis von FrankenPHP
- Qualität: PHPStan und PHPUnit fangen Fehler im Worker Mode früh ab
- Sicherheit: Composer Audit prüft Pakete vor jedem Release
- Rollout: PHP Deployer für Updates ohne Ausfall
Für Symfony Projekte schauen wir nach jedem Update auf Session und Request Verhalten im Worker Mode. Welche PHP Version dazu passt, zeigt unser Vergleich der PHP 8 Versionen.
Wir sind Experten für PHP und helfen Ihnen, Ihre digitalen Herausforderungen zu meistern. Unser erfahrenes Team unterstützt Sie bei PHP Updates, PHP Refactoring und berät Sie remote zu allen Fragen rund um PHP. Mit unseren vollautomatischen CI/CD Deployments und einer robusten Docker-Infrastruktur bringen wir Ihre PHP-Projekte auf das nächste Level. Vertrauen Sie auf unsere Expertise für zuverlässige und skalierbare PHP-Lösungen.
Häufige Fragen zu FrankenPHP
Die wichtigsten Antworten rund um FrankenPHP: Installation, Performance, Sicherheit und DSGVO.
FrankenPHP ist ein moderner Application Server für PHP auf Basis des Webservers Caddy, geschrieben in Go. Er vereint Webserver und PHP Interpreter in einem Prozess und bringt Worker Mode, automatisches HTTPS, HTTP/3 und Early Hints mit. 2026 setzen Teams FrankenPHP vor allem für schnelle und schlanke Deployments von Symfony und Laravel Anwendungen im Container ein.
FrankenPHP spart den separaten FPM Prozess und die Socket Kommunikation. Der Worker Mode hält die Anwendung im Speicher, das Bootstrapping pro Request entfällt. Automatisches HTTPS, HTTP/3 und eine einzige Caddyfile statt mehrerer Konfigurationsdateien machen den Betrieb einfacher. Wie groß der Performance Gewinn ist, hängt von eurer Anwendung ab, deshalb immer selbst messen.
Ja. FrankenPHP ist Open Source unter der MIT Lizenz, Lizenzkosten fallen nicht an. Statische Binaries, Docker Images und Pakete für Homebrew oder APT sind frei verfügbar. Kosten entstehen nur für euren eigenen Betrieb, also Server, Wartung und Updates. Professionellen Support bietet die Kooperative Les-Tilleuls.coop an, die hinter dem Projekt steht.
Unter Linux und macOS reicht ein Befehl: curl https://frankenphp.dev/install.sh | sh. Für macOS gibt es zusätzlich Homebrew, für Debian und Ubuntu APT Pakete. Seit März 2026 gibt es native Windows Binaries auf der Release Seite bei GitHub. Docker Images unter dunglas/frankenphp sind der schnellste Weg für Container Setups.
Ja. FrankenPHP selbst sendet keine Daten an Dritte. Die Software läuft auf eurem eigenen Server, bei uns zum Beispiel in Deutschland. Für Let's Encrypt Zertifikate gibt es einen kleinen Datenaustausch mit der Zertifizierungsstelle, das ist DSGVO konform machbar. Alternativ lassen sich eigene Zertifikate einbinden, etwa aus einer internen Zertifizierungsstelle.
Aktuell ist FrankenPHP 1.12.7 vom August 2026. Das Release behebt verlorenen Output nach fastcgi_finish_request() im klassischen Modus und korrigiert Metriken. Wichtiger ist der Abstand zu älteren Versionen: 1.12.3 bis 1.12.5 haben mehrere Sicherheitslücken geschlossen. Wer noch auf 1.11.2 bis 1.12.4 läuft, sollte das Update zeitnah einplanen.
Ja, wenn ihr eine Version zwischen 1.11.2 und 1.12.2 betreibt. CVE-2026-45062 ist mit CVSS 8.1 als hoch eingestuft. Ursache ist eine unsichere Unicode Behandlung im CGI Path Splitting. Dadurch konnte eine Datei ohne php Endung als PHP laufen. Der Fix steckt in Version 1.12.3. Ein Update auf die aktuelle 1.12.7 deckt das mit ab.
CGI macht aus Bindestrichen in Header Namen Unterstriche. Aus Foo-Bar wird HTTP_FOO_BAR. Ein Client kann deshalb einen Header Foo_Bar senden, der in $_SERVER nicht vom echten Foo-Bar zu unterscheiden ist. Anwendungen, die Headern wie forwarded-for oder Auth Headern vertrauen, lassen sich so täuschen. Das in 1.12.4 enthaltene Caddy 2.11.4 ignoriert solche Header.
Ja. Seit Version 1.11.3 enthalten die offiziellen Binaries PHP 8.5 mit allen neuen Features, etwa dem Pipe Operator und Backtraces bei Fatal Errors. PHP 8.2 bis 8.5 werden parallel unterstützt. Für ältere Projekte heißt das: Erst das PHP Update sauber testen, dann auf FrankenPHP umsteigen. So bleibt jeder Schritt klein und prüfbar.
Der Worker Mode startet die PHP Anwendung einmal und hält sie im Speicher. Folgende Requests nutzen den fertigen Zustand, ohne neues Bootstrapping. Das spart den größten Teil der Arbeit pro Request. Das Prinzip ähnelt Node.js oder Go. Wichtig: Globale Zustände und Services mit Zustand müssen zwischen Requests sauber zurückgesetzt werden.
Ja. Seit Symfony 7.4 unterstützt das Framework den Worker Mode von FrankenPHP direkt, ein Zusatzpaket ist nicht mehr nötig. Ältere Versionen binden FrankenPHP über runtime/frankenphp-symfony an. Das Projekt Symfony Docker liefert ein fertiges, rootless Image mit FrankenPHP. Nach dem Umstieg lohnt ein Blick auf Sessions und Services mit Zustand.
FrankenPHP bündelt die Angriffsfläche in einem Prozess statt mehreren Diensten. Rootless Container, automatische TLS Zertifikate und Distroless Images erhöhen die Sicherheit. Das Projekt reagiert schnell auf Lücken, wie die Releases 1.12.3 bis 1.12.5 zeigen. Entscheidend ist, dass ihr Versionen pinnt und Updates zügig ausrollt.
Ja. Seit Mai 2025 gehört FrankenPHP zur PHP Foundation. Der Code liegt in der offiziellen PHP Organisation auf GitHub. Das Team der Foundation arbeitet aktiv mit, die bisherigen Maintainer behalten die Governance. Für Unternehmen ist das ein wichtiges Signal: Das Projekt hat eine stabile Basis und ist kein Experiment einzelner Entwickler.
Für Symfony geht es am schnellsten: Symfony Docker als Vorlage nehmen, auf Symfony 7.4 oder neuer gehen und die Caddyfile anlegen. Nginx Regeln wie location Blöcke werden zu Caddy Direktiven. Die meisten Anwendungen laufen ohne Code Änderungen. Den Worker Mode schaltet ihr erst ein, wenn Tests und Staging grün sind.
Wir analysieren euer bestehendes Setup mit Nginx und PHP-FPM, planen die Migration und bauen schlanke Docker Images. Den Rollout sichern wir mit einer CI CD Pipeline samt PHPStan, PHPUnit und Cypress Tests ab. Den Aufwand schätzen wir vorab im kostenlosen Kennenlernen, abgerechnet wird transparent nach Minuten.