Retour au Blog

Concrètement c’est quoi FrankenPHP ?

Concrètement c’est quoi FrankenPHP ?

Concrètement c’est quoi FrankenPHP ? 

PHP a la réputation de commencer à dater, pourtant avec Laravel, Symfony, et Wordpress, le langage n’est pas prêt d'être écarté de la course, il reste incontournable pour créér des applications Web et des APIs.

Avec docker, mercure, redis, varnish, Nginx php n’a cessé de grandement s’améliorer au fil des années.

Dans les serveurs, il n’en est pas moins qu’on expose l’app via un serveur web tiers (NGINX, Apache), qui délègue l’exécution des scripts à PHP-FPM, via le protocole FastCGI. Ce qui peut rester encore complexe pour un site web.

C’est là qu'est apparu FrankenPHP.

FrankenPHP, c'est un serveur d'application spécialement conçu pour PHP qui est écrit en Go. Il est bâti sur Caddy (un serveur web), et embarque directement un interpréteur PHP dans le serveur. 

En gros, il rend possible de construire des binaires autonomes, auto-exécutables et sans dépendances pour les applications PHP.

Il permet de déployer de manière native plusieurs frameworks et CMS PHP tels que Drupal, Sulu, WordPress, Laravel, Symfony, API Platform, ou tout autre outil développé sur PHP.

Les Fonctionnalités

FrankenPHP donné également à PHP des fonctionnalités qui vont faire rougir les autres langages : 

  • Il prend en charge nativement HTTP/1, HTTP/2 et de HTTP/3 comme Nginx et Apache sur les versions récentes
  • génération et renouvellement automatique des certificats TLS grâce à Let's Encrypt ou à ZeroSSL, ce qui simplifie le processus pour les administrateurs système
  • support des Early Hints (fonctionnalité HTTP/2 qui permet au serveur d'envoyer des informations préliminaires (pré-hint) au client avant que la réponse principale ne soit disponible. Cela peut être utile pour optimiser les performances en préchargeant certaines ressources.)
  • mode "worker" qui permet de court-circuiter l'architecture share nothing de PHP et de diviser par trois (ou plus) les temps de réponse comparé à PHP-FPM
  • support du temps réel avec support natif du protocole Mercure, une alternative aux WebSockets basée sur les SSE
  • Support natif de Xdebug et OpCache
  • images Docker légères, simples d'utilisation et faites pour la prod (compatibles avec Kubernetes)

Techniquement comment ça fonctionne ?

FrankenPHP utilise cgo pour permettre au code Go d'appeler le code de l'interpréteur PHP écrit en C, et inversement. Cela revient à faire exécuter la machine virtuelle de PHP elle-même au sein d'un process géré par le runtime Go. Cette technique offre des opportunités immenses :

  • simplifier vos déploiements en embarquant directement un serveur web, l'interpréteur PHP et votre code source dans un seul binaire ;
  • conserver les services des applications Symfony ou Laravel chargés dans la mémoire du serveur web et s'en servir pour traiter plusieurs requêtes HTTP ;
  • écrire des fonctions en Go (ou en C, voir même en assembleur) et les appeler directement depuis le code PHP ou encore.

Plus d’infos

Si vous souhaitez en savoir plus sur l’outil n'hésitez pas à aller voir la documentation. Lors de la sortie au ForumPHP, Kévin Dunglas a également partagé ses slides que vous pouvez retrouver ici et le lien github de FrankenPHP GitHub!

https://youtu.be/aAwBrz8zdbY?list=PL9zDdgiGjkIcN0fBpm7NX3ZC5Fh7e00Mj

En résumé

FrankenPHP semble être une solution complète pour déployer des applications PHP de manière moderne et efficace, tirant parti de technologies récentes tout en offrant des performances améliorées et une configuration simplifiée.

Contactez-nous !
Je veux en savoir plus !