Dans l’écosystème PHP, il y a un « avant » et un « après » FrankenPHP. Conçu par Kévin Dunglas et l’équipe Les-Tilleuls.co, ce serveur d’application moderne bouscule les standards établis depuis des décennies. En intégrant l’interprète PHP directement dans le serveur Caddy, FrankenPHP élimine les lourdeurs de communication entre les processus et simplifie radicalement le déploiement. Que vous soyez un développeur en quête de rapidité ou un ingénieur DevOps cherchant à simplifier ses images Docker, FrankenPHP est la pièce manquante de votre stack.
-
Déployer Symfony 8 & FrankenPHP en Serverless (Guide 2026)
Introduction FrankenPHP et Symfony 8 : ce sont indéniablement les deux sujets techniques du moment, surtout après les 30 ans de PHP célébrés l’année dernière. Comme vous le savez, je m’oriente de plus en plus vers le DevOps. Je me suis donc dit : « Pourquoi ne pas vous proposer un tutoriel complet sur le déploiement de ce duo de choc…
-
Symfony Mercure et FrankenPHP : construire un chat en temps réel avec SSE sans WebSocket
Introduction Lors de notre précédente expérimentation, une question simple m’a obsédé : comment construire une “classroom” en temps réel avec Symfony, sans devoir recharger la page pour savoir quels élèves sont connectés ? La réponse s’est imposée d’elle-même : Mercure. Ce protocole de Server-Sent Events (SSE) est taillé pour la mise à jour instantanée, et, combiné à Symfony UX Turbo,…
-
Symfony 7 & FrankenPHP : sous-titres automatiques avec Symfony AI et Whisper

Introduction Ça y est, nous voilà déjà à la partie 4 de notre aventure technique ! Depuis le début, on a mis en place un vrai pipeline de streaming vidéo avec Symfony 7 et FrankenPHP : intégration de FFmpeg pour générer nos vidéos, un worker dédié orchestré par RabbitMQ pour traiter tout ça en asynchrone, et même une diffusion en HLS segmentée toutes les 6 secondes, parfaitement…
-
Symfony 7 & FrankenPHP : du streaming vidéo HLS à l’instantané grâce à Varnish

Introduction Comme nous l’avons vu dans les deux premières parties, mettre en place un service de streaming vidéo n’a rien d’évident. Pourtant, en s’appuyant sur une stack moderne autour de FrankenPHP et de l’encodeur FFmpeg, il est tout à fait possible de construire une architecture cohérente et performante. Nous avons déjà abordé la mise en place de la stack…
-
Symfony 7 & FrankenPHP : implémenter du streaming HLS avec FFmpeg et DRM
Introduction Dans le précédent article, on a posé les bases d’un POC de streaming vidéo… qui ressemblait déjà plus à une vraie plateforme qu’à une simple démo. Upload automatisé, pipeline asynchrone avec Symfony Messenger et RabbitMQ, workers dédiés grâce à FrankenPHP, compression vidéo intégrée : bref, un socle solide, scalable et fluide. Mais qui dit vidéo dit aussi poids, bande passante et…
Les question fréquentes :
103 Early Hints : Quel impact réel sur le LCP (Largest Contentful Paint) ?
FrankenPHP supporte nativement les Early Hints. En envoyant les liens de préchargement des assets (CSS, JS) avant même que la réponse HTML ne soit générée, on peut gagner plusieurs centaines de millisecondes sur le rendu critique.
Peut-on compiler un binaire statique incluant tout le code PHP ?
Oui, c’est l’une des prouesses de FrankenPHP via Go. On peut transformer une application PHP en un binaire unique auto-exécutable, incluant l’interprète, les extensions et le code source. Idéal pour des déploiements ultra-légers et sécurisés dans des environnements « distroless ».
Quelle est la plus-value de l’intégration native du protocole Mercure ?
En intégrant Mercure directement dans le binaire Caddy, FrankenPHP permet de pousser des mises à jour en temps réel vers les navigateurs sans avoir besoin d’un serveur de WebSocket séparé ou d’une infrastructure complexe.
Comment FrankenPHP gère-t-il l’isolation de la mémoire en Worker Mode ?
Contrairement au modèle « shared-nothing » classique de PHP, le Worker Mode maintient l’application en mémoire. Cela nécessite une attention particulière sur les fuites de mémoire (memory leaks) et la gestion de l’état (state) des services. Nous analysons ici comment réinitialiser vos conteneurs d’injection de dépendances entre chaque requête.