đ PHP en 2026, factuellement
Vous avez entendu pas mal de blagues sur PHP. Mais vous lâavez aussi vu dans de nombreuses offres dâemploi, dans la stack technique dâune entreprise respectable, dans le CMS dâun site qui nâest jamais en panne et qui rĂ©pond vite⊠Et vous vous demandez quel sens donner Ă tout ça. Qui croire ? Les PHP haters, ou les fanboys de PHP ?
Ce livre est lĂ pour donner du factuel, et vous permettre de vous faire une opinion sur PHP tel quâil est, pour savoir sâil est adaptĂ© Ă votre projet, votre entreprise, vos envies.
Vous verrez beaucoup de chiffres et de graphiques. Chaque Ă©lĂ©ment chiffrĂ© est sourcĂ© et datĂ© en annexe. Les comparaisons sont factuelles ; aucune nâest Ă©cartĂ©e parce quâelle mettrait PHP dans une situation inconfortable.
Comptez entre quatre-vingt-dix minutes et deux heures, et lâopinion que vous emporterez sera la vĂŽtre.
Comment lire ce livre
On vous demande de prendre PHP au sĂ©rieux, et vous vous en passeriez bien. Le langage a trente ans, on lâassocie au pire code quâon vous ait jamais mis sous les yeux, et personne nâen parle dans les confĂ©rences que vous suivez. Il revient pourtant sans cesse : dans la pile technique dâune entreprise que vous respectez, dans les offres dâemploi, derriĂšre un site qui encaisse plus de trafic que le vĂŽtre. Jâai Ă©crit ce livre pour rĂ©gler cette contradiction avec des preuves plutĂŽt quâavec de lâenthousiasme.
Chaque chiffre de ce livre a une source et une date, et lâannexe les recense pour que vous puissiez vĂ©rifier chacun dâeux. Un nombre dans le texte est suivi de sa provenance et de sa date, entre parenthĂšses. Un chiffre de fournisseur, une Ă©tude de cas auto-dĂ©clarĂ©e ou un benchmark synthĂ©tique sont signalĂ©s comme tels dans la phrase mĂȘme oĂč ils apparaissent, et quand je ne sais pas, je le dis. Vous ne devriez jamais avoir Ă vous demander si une phrase Ă©nonce un fait ou un souhait.
Pourquoi le doute est raisonnable
La rĂ©putation a Ă©tĂ© mĂ©ritĂ©e. Pendant sa premiĂšre dĂ©cennie, PHP a Ă©tĂ© permissif jusquâĂ la faute : les variables surgissaient de nulle part, "abc" == 0 valait vrai, les erreurs sâimprimaient dans la page et lâexĂ©cution continuait, les requĂȘtes vers la base de donnĂ©es se bricolaient par concatĂ©nation de chaĂźnes, et la bibliothĂšque standard grossissait une fonction Ă la fois, sous le nom que son auteur prĂ©fĂ©rait cette semaine-lĂ . Une gĂ©nĂ©ration a appris Ă programmer sur ce PHP-lĂ et en a Ă©crit Ă©normĂ©ment, et une bonne partie de ce code tourne encore. Lâessentiel de ce quâon vous a montrĂ© sous lâĂ©tiquette « PHP » date de cette pĂ©riode.
Le langage que vous Ă©valueriez aujourdâhui est un autre objet. PHP 7 (2015) a reconstruit le moteur et ajoutĂ© les dĂ©clarations de types scalaires. PHP 8 (2020) a apportĂ© les types union, match, les arguments nommĂ©s, les attributs, les Ă©numĂ©rations, les propriĂ©tĂ©s readonly, les callables de premiĂšre classe et un compilateur JIT, et il a appris Ă lâinterprĂ©teur Ă lever une exception lĂ oĂč il devinait. Une version est sortie chaque annĂ©e depuis, fin novembre ou dĂ©but dĂ©cembre. La PHP Foundation salarie des dĂ©veloppeurs du cĆur depuis 2021, le gestionnaire de paquets est universel, et deux analyseurs statiques vous donnent lâessentiel de ce quâun compilateur vous donnerait. La syntaxe actuelle est dans Le langage en 2026, et les gens qui la publient sont dans Gouvernance et pĂ©rennitĂ©.
Une partie de la rĂ©putation reste mĂ©ritĂ©e. Les chaĂźnes sont des suites dâoctets, la bibliothĂšque standard garde ses noms historiques, il nây a ni gĂ©nĂ©riques ni threads en espace utilisateur, et le runtime est synchrone par dĂ©faut. Une grande part du PHP qui tourne sur le web public est vieille, parce que lâhĂ©bergement qui la fait tourner est vieux. Chacune de ces limites se trouve dans le chapitre oĂč vous iriez la chercher, Ă cĂŽtĂ© de la pratique qui lâentoure aujourdâhui, et LĂ oĂč PHP est le mauvais choix rassemble les cas oĂč le conseil honnĂȘte est de choisir autre chose.
Les questions, dans lâordre
Chaque chapitre rĂ©pond Ă une question que vous poseriez, dans lâordre dâune revue de due diligence, de lâextĂ©rieur vers lâintĂ©rieur.
Empreinte demande qui tourne sur PHP et Ă quelle Ă©chelle, et rĂ©pond par les parts de marchĂ© du web, par les plateformes bĂąties dessus et par les organisations qui dĂ©crivent leur production PHP avec leurs propres mots. Le runtime explique le modĂšle dâexĂ©cution, parce que lâessentiel de ce que PHP fait bien et de ce quâil ne sait pas faire en dĂ©coule. DĂ©bit et latence et Concurrence donnent les chiffres de performance, avec le round du benchmark, le matĂ©riel et le test nommĂ©s, et avec, sur le mĂȘme graphique, les langages qui battent PHP sur le mĂȘme test.
Le langage en 2026 est le tour de la syntaxe le plus court possible, pour ceux qui jugent un langage en le lisant. LâĂ©cosystĂšme compte les paquets, les frameworks et les outils. Gouvernance et pĂ©rennitĂ© couvre le processus des RFC, le calendrier des versions, le processus de sĂ©curitĂ© et lâargent, et CoĂ»t de possession regarde le recrutement, lâhĂ©bergement et les mises Ă niveau.
LĂ oĂč PHP est le mauvais choix est le chapitre qui rend les autres crĂ©dibles. Une Ă©valuation en une semaine est un protocole, quoi installer, quoi mesurer, quoi lire, pour que la dĂ©cision que vous prendrez repose sur vos chiffres et non sur les miens.
Les rÚgles que je me suis fixées
Les comparaisons sont symĂ©triques. Quand un graphique montre PHP devant un langage sur une mesure, le texte nomme une mesure oĂč ce langage est devant, quand elle existe. Les options courantes que vous vous attendez Ă voir, Node.js, Python, Java, C#, Go, Ruby, ne sont jamais Ă©cartĂ©es dâun graphique parce quâelles y feraient bonne figure.
Les noms viennent avec des preuves. Une entreprise nâapparaĂźt ici que si ses propres ingĂ©nieurs, dans un billet de blog, une confĂ©rence, un dĂ©pĂŽt ou un rapport, disent quâelle fait tourner PHP en production, et lâannexe renvoie Ă ce document avec sa date. Les entreprises qui font tourner Hack sur HHVM, un langage issu dâun fork de PHP, ne sont pas prĂ©sentĂ©es comme des utilisatrices de PHP, si tentant que fĂ»t le logo.
Les frameworks et les outils sont listĂ©s, pas recommandĂ©s. Ils apparaissent par ordre alphabĂ©tique. La PHP Foundation, sous lâĂ©gide de laquelle ce livre paraĂźt, promeut le langage et ses standards plutĂŽt quâun fournisseur, et je fais de mĂȘme.
Comment le vérifier
Chaque chapitre se termine par quelque chose que vous pouvez vĂ©rifier en un aprĂšs-midi : un tableau de bord public Ă ouvrir, un benchmark Ă relancer sur votre matĂ©riel, une commande Ă taper. Prenez-les au sĂ©rieux. Un chiffre que jâai mal relevĂ©, ou qui a vieilli depuis que je lâai Ă©crit, est exactement ce que vous devriez trouver, et Sources vous donne lâURL pour le trouver.
Votre premiĂšre question est sans doute celle par laquelle jâai commencĂ© moi aussi : qui tourne vraiment lĂ -dessus ?
Empreinte
Votre premiĂšre question est de savoir qui tourne vraiment lĂ -dessus, Ă quelle Ă©chelle, et si la rĂ©ponse tient dans une liste de logos ou dans une liste de documents. PHP est le langage cĂŽtĂ© serveur dâenviron sept sites web sur dix parmi ceux dont le langage peut ĂȘtre dĂ©tectĂ©, et cette part baisse depuis dix ans. Les deux moitiĂ©s de cette phrase comptent, et aucune ne vaut grand-chose tant que vous ne savez pas ce que lâenquĂȘte compte.
Ce que mesure la part du web
W3Techs, la sociĂ©tĂ© dâĂ©tudes derriĂšre ce chiffre, inspecte chaque jour un Ă©chantillon de plus de vingt millions de sites web et dĂ©tecte le langage cĂŽtĂ© serveur Ă partir des en-tĂȘtes de rĂ©ponse, des cookies, des extensions de fichiers et dâautres traces du mĂȘme genre. Le pourcentage est calculĂ© sur les sites dont le langage a pu ĂȘtre dĂ©tectĂ©, si bien quâun site derriĂšre un framework qui ne laisse aucune trace nâest pas comptĂ©. Chaque site compte pour un, et lâensemble de wordpress.com ou de wix.com pĂšse autant quâun blog personnel. Un site peut aussi utiliser plusieurs langages, ce qui explique que les colonnes ne totalisent pas cent.
Ă la mĂȘme date, JavaScript cĂŽtĂ© serveur est Ă 7,5 %, Ruby Ă 7,1, Java Ă 5,4, Scala Ă 5,0, ASP.NET Ă 4,2 et Python Ă 1,1. Dans ses limites, lâenquĂȘte est stable dans ce quâelle dit : le gros du web adressable tourne sur PHP, surtout Ă travers WordPress, et les langages dont on parle davantage sont petits sur cette mesure. Scala devant ASP.NET rappelle que lâenquĂȘte compte ce que sa dĂ©tection voit, et que quelques plateformes laissent une signature sans rapport avec leur usage.
La part de PHP sur cette mesure Ă©tait de 80,6 % au 1er janvier 2015, de 75,2 au 1er janvier 2025 et de 72,4 au 1er janvier 2026, puis de 69,9 en septembre 2026. La tendance est Ă la baisse, et câest la premiĂšre chose Ă regarder. Le dĂ©clin sâest accĂ©lĂ©rĂ© en 2025 et 2026, et la part qui a quittĂ© PHP est allĂ©e pour lâessentiel vers JavaScript cĂŽtĂ© serveur, dont W3Techs a notĂ© en juillet 2026 quâil avait dĂ©passĂ© Ruby Ă la deuxiĂšme place. Deux faits se tiennent cĂŽte Ă cĂŽte : une base installĂ©e sur le web public que rien dâautre nâĂ©gale, et une courbe qui ne va pas dans le sens de PHP.
Les plateformes
Lâessentiel de cette base installĂ©e, ce sont des produits, pas du code sur mesure. WordPress Ă lui seul fait tourner 40,2 % de tous les sites web, soit 58,8 % des sites qui utilisent un systĂšme de gestion de contenu dĂ©tectable, et les systĂšmes PHP suivants, Joomla, Drupal, PrestaShop et TYPO3, sont chacun sous les deux pour cent. WooCommerce, lâextension de commerce de WordPress, Ă©quipe 8,0 % de tous les sites web et reprĂ©sente 47,7 % des systĂšmes de commerce en ligne dĂ©tectĂ©s.
Les plateformes publient aussi leurs propres dĂ©comptes, chacun avec son biais. Moodle, la plateforme dâapprentissage, dĂ©clare 146âŻ634 sites enregistrĂ©s et 531 millions dâutilisateurs, en ne comptant que les sites qui ont choisi de sâenregistrer. Nextcloud annonce plus de 500âŻ000 serveurs. Drupal compte 470âŻ795 sites qui remontent leur version par son module de mise Ă jour, ce qui oublie ceux qui lâont dĂ©sactivĂ©. PrestaShop revendique prĂšs de 250âŻ000 sites et plus de 22 milliards dâeuros de ventes passĂ©es par eux en 2024, un chiffre auto-dĂ©clarĂ©. Shopware cite une Ă©tude EHI qui le place sur 115 des 1âŻ000 plus grandes boutiques B2C allemandes en 2025, et Matomo, la plateforme dâanalyse dâaudience, annonce plus de 1,4 million de sites web. Adobe ne publie aucun dĂ©compte de marchands pour Adobe Commerce, donc je nâen donne aucun.
Aucun chiffre de cette liste ne compte autant que sa forme. La gestion de contenu, le commerce, lâapprentissage, le partage de fichiers et lâanalyse dâaudience sont les catĂ©gories oĂč lâon installe un produit sur un serveur et oĂč on le laisse tourner des annĂ©es, et ce sont celles que les logiciels PHP dominent. Câest de lĂ que vient la part de la section prĂ©cĂ©dente.
Les organisations qui le disent elles-mĂȘmes
Une entreprise nâapparaĂźt ici que si ses propres ingĂ©nieurs ou ses propres documents disent quâelle fait tourner PHP, et la date de ce document fait partie de la preuve.
Wikimedia Foundation. WikipĂ©dia et ses projets frĂšres tournent sur MediaWiki, une application PHP servie par PHP-FPM. Les Ă©tats financiers auditĂ©s de la fondation font Ă©tat de plus de 19,4 milliards de pages vues par mois sur lâensemble de ses projets. Sa production est passĂ©e de PHP 8.1 Ă PHP 8.3 le 25 novembre 2025, et au moment oĂč jâĂ©cris, la migration vers PHP 8.5 est prĂ©vue pour la fin 2026. La mĂȘme infrastructure a tournĂ© sur HHVM jusquâen 2019, annĂ©e oĂč la fondation a achevĂ© son retour Ă lâinterprĂ©teur PHP. La fondation rapporte aussi des pics de 800âŻ000 requĂȘtes par seconde sur ses sept centres de donnĂ©es, un chiffre comptĂ© en bordure, oĂč la couche de cache sert la plupart des requĂȘtes sans quâelles atteignent jamais PHP ; ne le lisez donc pas comme un dĂ©bit PHP.
Automattic. WordPress.com et Tumblr, selon Automattic, « tournent principalement sur PHP ». WordPress VIP, la branche dâhĂ©bergement pour grands comptes du groupe, publie 2âŻ400 milliards de requĂȘtes servies par an et 22 milliards de requĂȘtes la nuit de lâĂ©lection amĂ©ricaine de 2024, des chiffres qui incluent son CDN.
Etsy. La page carriĂšres de lâingĂ©nierie de la place de marchĂ© indique que ses ingĂ©nieurs « codent principalement en PHP et en JavaScript », aux cĂŽtĂ©s de Java, Go et Swift. Etsy a fait passer sa production Ă PHP 7 en 2016 et a documentĂ© le passage Ă lâĂ©poque, graphiques de production Ă lâappui.
Mailchimp. Le blog dĂ©veloppeurs de lâentreprise dĂ©crit son exĂ©cuteur de tĂąches et son monolithe applicatif en PHP, et ses offres dâemploi en ingĂ©nierie de 2025 et 2026 demandent PHP aux cĂŽtĂ©s de React et de Go. Aucun chiffre dâĂ©chelle nâest publiĂ©.
Bumble (Badoo). Le blog dâingĂ©nierie dĂ©crivait, en 2017, plus de trois millions de lignes de PHP et des centaines de serveurs applicatifs passĂ©s Ă PHP 7, avec une Ă©conomie annoncĂ©e dâun million de dollars en matĂ©riel. Ce chiffre a neuf ans et vous devez le peser comme tel ; les offres dâemploi actuelles de lâentreprise listent toujours PHP Ă cĂŽtĂ© de Go.
Secteur public. Les sites web de la Commission europĂ©enne tournent sur Drupal, ce que leurs pages dĂ©clarent dans leurs mĂ©tadonnĂ©es. Des agents de la Commission ont prĂ©sentĂ© la plateforme Ă Drupal4Gov EU en janvier 2026, avec 770 sites en ligne, un chiffre rapportĂ© par des participants et que je nâai pas pu confirmer dans une publication de la Commission. Le site de la Maison-Blanche tourne sur WordPress, hĂ©bergĂ© chez WordPress VIP sous une autorisation FedRAMP Moderate. Le Government Site Builder fĂ©dĂ©ral allemand, le CMS standard des administrations fĂ©dĂ©rales, est bĂąti sur TYPO3 et sert plus de 80 administrations et 250 sites web. La plateforme australienne GovCMS dĂ©clare plus de 370 sites gouvernementaux sur Drupal, et 77 collectivitĂ©s locales du Royaume-Uni partagent la distribution LocalGov Drupal.
Qui est parti, et qui nây a jamais Ă©tĂ©
La liste des entreprises qui ont abandonné PHP est aussi instructive que celle qui précÚde, et elle est plus courte que la réputation ne le laisse croire.
Meta et Slack sont les deux noms quâon cite le plus souvent pour PHP Ă grande Ă©chelle, et ni lâun ni lâautre ne fait tourner PHP. Les deux font tourner Hack, un langage que Facebook a annoncĂ© en 2014, sur HHVM, une machine virtuelle quâil dĂ©veloppait pour PHP depuis 2011 et qui a abandonnĂ© la compatibilitĂ© avec PHP en 2019. Slack a retirĂ© son dernier code PHP lors du passage Ă HHVM 4 et maintient aujourdâhui environ cinq millions de lignes de Hack. Les deux entreprises montrent quâune base de code commencĂ©e en PHP peut devenir trĂšs grande, et aucune des deux ne dit quoi que ce soit sur lâinterprĂ©teur PHP, donc je ne les compte jamais.
Zalando a réécrit sa boutique Magento en Java en 2010, dâaprĂšs le tĂ©moignage dâun ancien ingĂ©nieur. Trivago a remplacĂ© une grande base de code PHP par une application TypeScript entre 2020 et 2021. Dailymotion, qui servait son site avec PHP et Symfony depuis 2005, indique dans une offre dâemploi de 2026 quâelle « rĂ©duit progressivement PHP » et que les nouveaux dĂ©veloppements se font en Go, Java et Python. BlaBlaCar, une maison Symfony en 2015, dĂ©crit dans ses offres une migration « dâune pile PHP/Symfony vers une pile dominĂ©e par Java et JS ». VoilĂ les cas que jâai trouvĂ©s avec une source primaire, et ils ont un motif commun : une entreprise dont le produit avait dĂ©passĂ© le cadre dâun monolithe web a dĂ©placĂ© ses services vers un langage compilĂ© ou vers la JVM, comme le font au mĂȘme stade les entreprises qui quittent Ruby ou Python.
La population de développeurs
La part du web mesure des serveurs. Les enquĂȘtes mesurent des personnes, et elles placent PHP plus bas.
| Mesure | OĂč se situe PHP | Source et date |
|---|---|---|
| UtilisĂ© au cours de lâannĂ©e Ă©coulĂ©e, dĂ©veloppeurs professionnels | 19,1 %, 12e langage | EnquĂȘte Stack Overflow, 2025 |
| UtilisĂ© au cours de lâannĂ©e Ă©coulĂ©e, Ă©chantillon pondĂ©rĂ© | 17 %, 13e langage | JetBrains Developer Ecosystem, 2025 |
| Langage principal | 9Â %, 9e | JetBrains Developer Ecosystem, 2025 |
| Contributeurs mensuels sur GitHub | 6e langage, inchangé depuis 2023 | GitHub Octoverse, octobre 2025 |
| Pull requests et tags Stack Overflow | 4e, à égalité avec C# | RedMonk, janvier 2026 |
| Mentions dans les moteurs de recherche | 14e, 1,04Â % | TIOBE, septembre 2026 |
Chacune de ces mesures porte sur autre chose, et chacune a un biais connu : lâĂ©chantillon de Stack Overflow est auto-sĂ©lectionnĂ© parmi ses utilisateurs, celui de JetBrains est pondĂ©rĂ© vers ses clients, GitHub compte lâactivitĂ© open source et TIOBE compte des rĂ©sultats de recherche. Lues ensemble, elles disent quâentre un dĂ©veloppeur sur six et un sur cinq a Ă©crit du PHP dans lâannĂ©e, que PHP est un premier langage pour moins de gens quâil nâest un second, et que son activitĂ© sur les dĂ©pĂŽts publics ne bouge pas. JetBrains dĂ©crit PHP comme en « dĂ©clin de long terme » aux cĂŽtĂ©s de Ruby et dâObjective-C, tandis que lâenquĂȘte consacrĂ©e Ă PHP du mĂȘme rapport a trouvĂ© que 58 % des dĂ©veloppeurs PHP ne prĂ©voient pas de migrer vers un autre langage. Ce que cela veut dire pour le recrutement est une question pour CoĂ»t de possession.
La limite : lâempreinte est large et vieille. Sa largeur vient des produits plus que des applications sur mesure, son Ăąge se lit dans la part de la base installĂ©e encore sur des versions non maintenues, et la part du langage parmi les dĂ©veloppeurs est plus petite que sa part des serveurs en service. Si vous choisissez un langage pour un nouveau service, donnez au second fait plus de poids quâau premier.
Ce que vous pouvez vĂ©rifier vous-mĂȘme
Ouvrez les pages W3Techs des langages cĂŽtĂ© serveur et des systĂšmes de gestion de contenu ; elles sont mises Ă jour chaque jour et la vue historique est publique. Pour Wikimedia, les tĂąches Phabricator que je cite se lisent sans compte et montrent le travail de migration tel quâil sâest dĂ©roulĂ©, dates comprises. Pour toute entreprise nommĂ©e ici, allez fouiller vous-mĂȘme son blog dâingĂ©nierie et ses offres dâemploi, et traitez lâabsence de PHP dans les offres rĂ©centes comme le signal quâelle est.
LâĂ©chelle du dĂ©ploiement ne dit rien de la façon dont une requĂȘte est servie. Câest lĂ que le runtime entre en scĂšne.
Le runtime
Lâessentiel de ce que PHP fait bien, et lâessentiel de ce quâil ne sait pas faire, dĂ©coule de la façon dont il sert une requĂȘte. Une requĂȘte PHP dĂ©marre sans rien, exĂ©cute votre code de haut en bas, envoie sa rĂ©ponse et est jetĂ©e ; la concurrence vient dâun pool de processus, chacun traitant une requĂȘte Ă la fois. Rien ne survit dâune requĂȘte Ă la suivante Ă lâintĂ©rieur du processus, et câest pour cela quâon appelle ce modĂšle shared-nothing : aucun objet application ne reste en vie, pas de boucle dâĂ©vĂ©nements, pas de thread.
Une requĂȘte, un processus
Le dĂ©ploiement standard, câest PHP-FPM, le gestionnaire de processus FastCGI, derriĂšre un serveur web comme nginx, Apache ou Caddy. Le gestionnaire entretient un pool de processus worker, confie chaque requĂȘte entrante Ă un worker libre, et le worker exĂ©cute le script, Ă©crit la rĂ©ponse et revient dans le pool la mĂ©moire vidĂ©e. La taille du pool tient en une ligne de configuration. Une machine avec plus de cĆurs fait tourner plus de workers, et plus de machines derriĂšre un rĂ©partiteur de charge font tourner plus de pools, sans la moindre coordination entre eux.
Une Ă©quipe plateforme remarque dâabord le bon cĂŽtĂ© de ce modĂšle. Une requĂȘte qui plante, qui fuit ou qui dĂ©passe son temps emporte un worker avec elle et rien dâautre ; le gestionnaire remplace le worker et les autres requĂȘtes nâen voient rien. Une fuite mĂ©moire ne peut pas sâaccumuler au-delĂ dâune requĂȘte, si bien quâune application PHP qui tourne longtemps ne se dĂ©grade pas au fil des jours comme peut le faire un processus qui vit longtemps. DĂ©ployer, câest copier des fichiers puis vider un cache, parce quâil nây a aucun processus Ă redĂ©marrer proprement et aucun Ă©tat en mĂ©moire Ă drainer.
Le mĂȘme modĂšle a ses coĂ»ts, et câest un ingĂ©nieur performance qui les voit en premier. Chaque requĂȘte paie lâamorçage de lâapplication : lire la configuration, cĂąbler les dĂ©pendances, enregistrer les routes. Il nây a pas de cache en processus dâune requĂȘte Ă lâautre, si bien quâune table calculĂ©e une fois par processus dans un autre langage lâest ici une fois par requĂȘte, Ă moins de la ranger en mĂ©moire partagĂ©e via lâextension APCu ou dans un cache externe. Les connexions Ă la base de donnĂ©es sâouvrent et se ferment Ă chaque requĂȘte, sauf Ă les configurer comme persistantes, si bien quâun pool de connexions, quand il en faut un, vit hors de PHP. Une charge qui doit garder un Ă©tat entre les requĂȘtes, un serveur WebSocket ou un salon de jeu, nâentre pas du tout dans ce modĂšle, et Concurrence explique ce qui y entre Ă la place.
OPcache, le préchargement et le JIT
Lâobjection Ă©vidente Ă un amorçage Ă chaque requĂȘte, câest le coĂ»t dâanalyser et de compiler le source Ă chaque fois, et PHP lâa levĂ©e en 2013. OPcache garde la forme compilĂ©e de chaque fichier en mĂ©moire partagĂ©e, si bien quâun fichier est compilĂ© une fois par dĂ©ploiement et non une fois par requĂȘte. Il fait partie de la distribution standard depuis PHP 5.5 et il est activĂ© dans le modĂšle php.ini-production livrĂ© avec elle ; un benchmark lancĂ© sans lui ne mesure rien de PHP.
Le prĂ©chargement, arrivĂ© avec PHP 7.4, va un cran plus loin. Une liste de fichiers est compilĂ©e et liĂ©e au dĂ©marrage du gestionnaire puis gardĂ©e en mĂ©moire, si bien que les classes existent avant la premiĂšre requĂȘte et quâaucun autoloading nâa lieu. La RFC qui lâa introduit a mesurĂ© un gain de 30 % sur la page hello-world dâun framework et de 50 % sur celle dâun autre, et prĂ©cise dans le mĂȘme paragraphe que les gains en conditions rĂ©elles « seront probablement plus faibles » et dĂ©pendent du rapport entre lâamorçage et le travail effectif.
Le compilateur JIT, ajoutĂ© dans PHP 8.0 Ă lâintĂ©rieur dâOPcache, compile les chemins de code chauds en code machine, et ses propres notes de version sont plus sobres que les gros titres. php.net indique que le JIT traçant « montre des performances environ 3 fois meilleures sur des benchmarks synthĂ©tiques et une amĂ©lioration de 1,5 Ă 2 fois sur certaines applications spĂ©cifiques de longue durĂ©e », et que « les performances dâune application typique sont au niveau de PHP 7.4 ». La mesure de la RFC elle-mĂȘme sur WordPress donnait 326 requĂȘtes par seconde avec le JIT contre 315 sans. Le JIT nâa jamais Ă©tĂ© activĂ© par dĂ©faut : avant PHP 8.4, la taille de son tampon Ă©tait zĂ©ro, et depuis 8.4 un tampon de 64 mĂ©gaoctets est rĂ©servĂ© mais opcache.jit vaut disable, si bien quâil faut lâactiver explicitement. Une application web en tire peu, un script limitĂ© par le CPU peut en tirer beaucoup.
Les runtimes worker
Le seul coĂ»t quâOPcache ne supprime pas est lâamorçage de lâapplication, et une seconde famille de runtimes le supprime en gardant lâapplication en mĂ©moire. En mode worker, un processus amorce lâapplication une fois, puis traite les requĂȘtes en boucle, une Ă la fois, pendant des milliers de requĂȘtes avant dâĂȘtre recyclĂ©. Par ordre alphabĂ©tique : FrankenPHP, un serveur dâapplication Ă©crit en Go au-dessus du serveur web Caddy, qui propose aussi bien le mode classique dâune requĂȘte par processus quâun mode worker ; RoadRunner, un serveur dâapplication lui aussi Ă©crit en Go, qui garde en vie un pool de workers PHP et leur transmet les requĂȘtes par un protocole ; et Swoole, ou son fork OpenSwoole, une extension en C qui donne Ă PHP sa propre boucle dâĂ©vĂ©nements et son propre serveur HTTP. FrankenPHP est hĂ©bergĂ© sous lâorganisation php sur GitHub depuis le 8 juin 2025, avec une gouvernance inchangĂ©e.
Ce que le changement rapporte dĂ©pend entiĂšrement du prix de lâamorçage, et la façon honnĂȘte de le montrer est de prendre le mĂȘme code avec le runtime pour seule variable. Sur un script hello-world nu, oĂč il nây a aucun amorçage Ă Ă©viter, Tideways, un Ă©diteur de profileur PHP et membre fondateur de la PHP Foundation sans intĂ©rĂȘt dans lâun ou lâautre runtime, a trouvĂ© FrankenPHP en mode classique et PHP-FPM Ă moins dâun demi pour cent lâun de lâautre, autour de 18âŻ400 requĂȘtes par seconde sur une machine virtuelle Ă huit cĆurs. Sur un framework complet, la suite de benchmarks que DĂ©bit et latence lit en dĂ©tail montre lâentrĂ©e Symfony passer de 26âŻ000 requĂȘtes par seconde sous PHP-FPM Ă 74âŻ000 sous FrankenPHP et 111âŻ000 sous Swoole sur son test Fortunes, sans une ligne changĂ©e dans le framework. Les Ă©diteurs et les auteurs de frameworks publient des rapports plus Ă©levĂ©s sur leurs propres pages. Je mâen tiens Ă ces deux chiffres parce que vous pouvez reproduire lâun et lâautre Ă partir de documents publiĂ©s.
Le prix, câest la perte de la garantie shared-nothing. Un worker qui garde lâapplication amorcĂ©e garde aussi tout ce quâelle a laissĂ© fuir, si bien que propriĂ©tĂ©s statiques, caches et ressources ouvertes persistent dĂ©sormais dâune requĂȘte Ă lâautre, et quâune classe de bugs que PHP-FPM rendait impossible redevient possible. La documentation de FrankenPHP le dit sans dĂ©tour : PHP « nâa pas Ă©tĂ© conçu Ă lâorigine pour des processus de longue durĂ©e », et le mode worker est livrĂ© avec un compteur de requĂȘtes maximum qui recycle les processus par prĂ©caution. Une Ă©quipe qui choisit le mode worker endosse la discipline que les Ă©quipes Node.js ou Java ont dĂ©jĂ .
Ce que coûte un processus
Vous voudrez un point de rĂ©fĂ©rence avant dâajouter le moindre framework. Sur la machine oĂč jâai Ă©crit ce livre, un processus PHP 8.3 en ligne de commande, sans script, alloue 2 mĂ©gaoctets pour son propre tas, atteint 33 mĂ©gaoctets de mĂ©moire rĂ©sidente en comptant lâinterprĂ©teur et ses extensions chargĂ©es, et dĂ©marre puis se termine en 20 millisecondes, mesurĂ© avec memory_get_usage(true) et /usr/bin/time. Reproduisez ces mesures sur votre matĂ©riel, et souvenez-vous quâun worker PHP-FPM partage avec ses frĂšres les pages en lecture seule de lâinterprĂ©teur, si bien quâun worker de plus coĂ»te moins que le chiffre ne le suggĂšre. La configuration de production de Wikimedia, publiĂ©e dans son gestionnaire de tĂąches, fait tourner huit workers PHP-FPM par conteneur MediaWiki, avec un OPcache de 500 mĂ©gaoctets et un cache APCu de 768 mĂ©gaoctets, dans un Ă deux gigaoctets de mĂ©moire par conteneur.
La limite : le modĂšle shared-nothing nâa ni threads, ni Ă©tat partagĂ© en processus, ni travail en arriĂšre-plan Ă lâintĂ©rieur dâune requĂȘte. Tout ce qui doit survivre Ă une requĂȘte, un pool de connexions, un cache chaud, une tĂąche planifiĂ©e, vit dans un autre processus ou un autre systĂšme, et lâarchitecture autour dâune application PHP en porte la marque. Câest une vraie contrainte, et câest aussi ce qui rend lâexploitation simple.
Ce que vous pouvez vĂ©rifier vous-mĂȘme
Installez PHP-FPM et un serveur web sur une petite machine virtuelle, activez la page de statut de FPM, et regardez le pool sous un gĂ©nĂ©rateur de charge comme wrk ou ab : le nombre de processus, la mĂ©moire par worker et le temps de requĂȘte sont lĂ , sous vos yeux. Lancez ensuite le mĂȘme hello-world sous FrankenPHP en mode worker et comparez. Un aprĂšs-midi de ce rĂ©gime vous apprend plus sur le runtime que je ne viens de le faire, et les chiffres seront les vĂŽtres.
Un chiffre de dĂ©bit ne veut dire quelque chose quâune fois que vous savez lequel de ces runtimes lâa produit.
Débit et latence
Ă quelle vitesse va-t-il, sur quelle mesure, et face Ă qui ? Câest votre deuxiĂšme question, et câest celle oĂč la hype fait le plus de dĂ©gĂąts. Sur le plus grand benchmark public qui compare des frameworks web de tous langages, les entrĂ©es PHP sâĂ©talent sur deux ordres de grandeur selon le runtime qui les fait tourner, des quarante premiĂšres places au dernier dixiĂšme. Le langage seul ne prĂ©dit rien ; le dĂ©ploiement prĂ©dit presque tout. Un Ă©cart pareil ne vous sert que si chaque chiffre vient avec son round, son matĂ©riel et son test, et ceux de ce chapitre les ont tous les trois.
Lâhistoire du moteur
Sur du code qui occupe le processeur, lâinterprĂ©teur a fait un grand pas une fois, puis des petits pas depuis. Le grand pas, câest PHP 7.0, en dĂ©cembre 2015, qui a remplacĂ© les structures de donnĂ©es internes du moteur. Son Ă©diteur affirmait alors que le temps dâexĂ©cution Ă©tait « souvent divisĂ© par deux » par rapport Ă PHP 5.6, dans un livre blanc sans mĂ©thodologie publiĂ©e. Une mesure indĂ©pendante, faite sur une seule machine avec toutes les versions de lâinterprĂ©teur de 5.6 Ă une build de dĂ©veloppement de PHP 8.0, retrouve la mĂȘme forme. Le score PHPBench, une suite synthĂ©tique de micro-benchmarks de lâinterprĂ©teur, passe de 288âŻ000 sur PHP 5.6 Ă 620âŻ000 sur PHP 7.0, puis monte par petites marches, entre rien et treize pour cent par version, jusquâĂ 876âŻ000 sur la build 8.0.
Depuis PHP 8.0, la vitesse de lâinterprĂ©teur sur une application web ne bouge plus, et ceux qui la mesurent le disent eux-mĂȘmes. Un hĂ©bergeur qui publie des benchmarks chaque annĂ©e a mesurĂ© WordPress Ă 146 requĂȘtes par seconde sur PHP 8.2 et Ă 148 sur PHP 8.5, sur la mĂȘme machine, et il Ă©crit que « les versions incrĂ©mentales produisent rarement de grands sauts de vitesse Ă elles seules ». Câest sa propre mesure, lancĂ©e Ă quinze requĂȘtes simultanĂ©es sur une machine de trente cĆurs ; elle dit donc le temps de rĂ©ponse, pas la capacitĂ©. Retenez ceci : une version actuelle de PHP est Ă peu prĂšs deux fois plus rapide que PHP 5 sur le travail propre de lâinterprĂ©teur, et une montĂ©e de version mineure ne vous apportera rien dâautre que des corrections et des fonctionnalitĂ©s.
Le benchmark multi-langages
Le Framework Benchmarks de TechEmpower est une suite publique qui a fait passer des centaines de frameworks web, dans des dizaines de langages, par les six mĂȘmes tests sur le mĂȘme matĂ©riel, chaque implĂ©mentation Ă©tant contribuĂ©e et entretenue par des volontaires dans un dĂ©pĂŽt public. Son dernier round achevĂ© est le Round 23, datĂ© du 24 fĂ©vrier 2025, exĂ©cutĂ© sur un serveur Ă processeur Xeon Gold 6330, 28 cĆurs et 56 threads, avec un rĂ©seau Ă 40 gigabits. Le dĂ©pĂŽt du projet a Ă©tĂ© archivĂ© le 24 mars 2026 : le Round 23 est donc le dernier, et ses chiffres sont les derniers de leur espĂšce. Rien dâautre ne compare autant de frameworks sous un mĂȘme protocole, câest pourquoi je les garde. Et comme les tests ne mesurent pas la mĂȘme chose, chaque chiffre nomme le sien.
Le test Fortunes est celui qui ressemble le plus Ă une page web : une requĂȘte en base qui renvoie une douzaine de lignes, un gabarit HTML rendu avec Ă©chappement. Sur ce test, 510 entrĂ©es ont terminĂ© le Round 23. Le graphique en retient seize, les leaders toutes catĂ©gories, le framework grand public de chaque langage majeur et les entrĂ©es PHP de chaque type de runtime. Le tableau brut avec toutes les entrĂ©es est rangĂ© Ă cĂŽtĂ© des donnĂ©es de graphiques du livre, pour que vous puissiez faire votre propre sĂ©lection.
Lisez les barres PHP de haut en bas. Les entrĂ©es PHP les plus rapides, sur les runtimes workerman et Swoole, en SQL brut et sans framework, occupent les rangs 31 Ă 38 sur 510, au-dessus de 730âŻ000 requĂȘtes par seconde, devant lâentrĂ©e ASP.NET Core de base, les entrĂ©es Go et Spring. Un framework PHP complet avec un ORM complet sur un runtime worker, lâentrĂ©e Ubiquity, atteint 428âŻ000 au rang 92. PHP nu sous PHP-FPM et nginx, le dĂ©ploiement standard, atteint 146âŻ000 au rang 248, environ un tiers devant Gin et FastAPI. Les deux frameworks PHP les plus utilisĂ©s, sous PHP-FPM, sont prĂšs du bas : Symfony Ă 26âŻ000 et Laravel Ă 16âŻ000, derriĂšre Rails Ă 43âŻ000 et Django Ă 32âŻ000. Un mĂȘme benchmark soutient donc Ă la fois que PHP peut compter parmi les runtimes web les plus rapides et quâune application PHP typique compte parmi les plus lentes. Quand on ne vous dit que lâun des deux, on vous vend quelque chose.
Une partie de lâĂ©cart tient au runtime. Une entrĂ©e qui garde lâapplication chargĂ©e entre deux requĂȘtes supprime le coĂ»t de dĂ©marrage, et câest lui qui domine le temps de requĂȘte dâun framework.
Le mĂȘme code Symfony passe de 26âŻ000 requĂȘtes par seconde sous PHP-FPM Ă 74âŻ000 sous FrankenPHP et 111âŻ000 sous Swoole, et le mĂȘme code Laravel de 16âŻ000 Ă 50âŻ000 sous workerman. Le reste de lâĂ©cart tient Ă lâentrĂ©e elle-mĂȘme. Chez TechEmpower, une entrĂ©e est entretenue par qui veut bien sâen occuper, et une entrĂ©e lente peut reflĂ©ter une configuration datĂ©e autant que le framework. LâentrĂ©e Laravel sous RoadRunner, Ă 8âŻ000, est plus lente que sous PHP-FPM ; je nâai pas dâexplication et je la rapporte telle quâelle a Ă©tĂ© mesurĂ©e.
Les autres tests dĂ©placent les rangs, pas lâhistoire. Sur le test de sĂ©rialisation JSON, qui nâa pas de base de donnĂ©es, lâentrĂ©e Swoole atteint 2,5 millions de requĂȘtes par seconde au rang 73, PHP-FPM nu 428âŻ000 et Laravel sous PHP-FPM 27âŻ000, tandis quâASP.NET Core est Ă 1,4 million, Node.js Ă 1,1 million, Spring Ă 328âŻ000 et Django Ă 167âŻ000. Sur le test Ă vingt requĂȘtes SQL, que le pilote de base de donnĂ©es bride, les leaders de tous les langages se rejoignent sous 90âŻ000, et les entrĂ©es PHP les plus rapides sont Ă 56âŻ000, devant FastAPI Ă 37âŻ000 et Spring Ă 32âŻ000.
La latence
Le dĂ©bit dit combien de requĂȘtes une machine peut absorber. La latence dit combien de temps un utilisateur attend, et ce qui la domine, câest ce que la requĂȘte attend, pas lâinterprĂ©teur. Tideways, un Ă©diteur de profileur et membre fondateur de la PHP Foundation, a mesurĂ© un hello-world PHP-FPM derriĂšre nginx sur une machine virtuelle Ă huit cĆurs, et relevĂ© un 99e centile de 0,9 milliseconde Ă 18âŻ000 requĂȘtes par seconde. Câest le plancher : lâinterprĂ©teur et le gestionnaire de processus coĂ»tent ensemble moins dâune milliseconde quand il nây a rien dâautre Ă faire, et tout ce qui vient au-dessus, câest lâapplication et ses dĂ©pendances.
Les chiffres de latence publics les plus utiles viennent dâune organisation qui publie ses propres objectifs et ses propres tableaux de bord. Les rĂšgles dâingĂ©nierie de Wikimedia exigent quâune requĂȘte GET sâachĂšve en 50 millisecondes Ă la mĂ©diane et en 200 millisecondes au 99e centile du temps passĂ© dans PHP, et en 500 millisecondes au 99e centile pour un POST. Son instance Grafana est publique et montre la distribution mesurĂ©e pour les requĂȘtes qui atteignent les serveurs applicatifs, câest-Ă -dire les dĂ©fauts de cache et les utilisateurs connectĂ©s, autrement dit les requĂȘtes chĂšres. Le jour oĂč jâai vĂ©rifiĂ©, la mĂ©diane Ă©tait dâenviron 170 millisecondes et la queue de distribution bien au-dessus de lâobjectif, pour des pages qui incluent le rendu du wikitexte depuis un cache dâanalyse froid. Je vous donne le tableau de bord plutĂŽt que lâinstantanĂ©, parce quâune semaine vous en dira plus quâune heure.
LĂ oĂč PHP perd
Sur du calcul pur, sans entrĂ©es-sorties, PHP est un interprĂ©teur avec un JIT en option, et il est un ordre de grandeur plus lent quâun runtime compilĂ© Ă la volĂ©e comme V8. Le Computer Language Benchmarks Game, qui compare des programmes contribuĂ©s sur les mĂȘmes petites tĂąches, place le programme n-body mono-thread le plus rapide Ă 2,2 secondes en Rust, 3,1 en C#, 6,0 en Java, 6,4 en Go, 8,6 en Node.js, 167 en Ruby avec YJIT, 204 en PHP 8.4 et 360 en Python 3.13.
Le graphique a ses rĂ©serves. Les programmes PHP tournent avec un tampon JIT configurĂ© mais opcache.jit laissĂ© Ă sa valeur par dĂ©faut de PHP 8.4, câest-Ă -dire dĂ©sactivé : ils mesurent donc lâinterprĂ©teur seul. La RFC du JIT rapporte un gain de quatre fois sur Mandelbrot une fois le JIT activĂ©, ce qui resserrerait lâĂ©cart sans le combler. Les programmes sont aussi contribuĂ©s, donc ils mesurent le meilleur programme que quelquâun a pris la peine dâĂ©crire. Avec ces deux rĂ©serves, lâordre tient. Pour du calcul numĂ©rique, de la simulation, lâanalyse de gros fichiers en boucle ou tout ce qui occupe un cĆur, PHP est dans la classe de Python et de Ruby, pas dans celle de Node.js, et trente Ă cent fois derriĂšre Go, Java, C# et Rust sur ce programme. LĂ oĂč PHP est le mauvais choix en tire la consĂ©quence.
La limite : les bons chiffres de dĂ©bit de PHP viennent des runtimes worker et de lâaccĂšs brut Ă la base, ce quâune Ă©quipe ordinaire ne fait pas tourner dĂšs le premier jour. Ses chiffres typiques, un framework complet sous PHP-FPM, sont ceux de Rails et de Django, quelques dizaines de milliers de requĂȘtes par seconde sur une grosse machine, ce qui reste plus que ce que la plupart des applications recevront jamais. Et sur du calcul pur, lâinterprĂ©teur est un ordre de grandeur derriĂšre V8.
Ce que vous pouvez vĂ©rifier vous-mĂȘme
Lâoutillage TechEmpower tourne encore depuis son dĂ©pĂŽt archivĂ©, avec Docker, et les tableaux bruts du Round 23 pour six tests sont rangĂ©s en CSV dans le dossier charts/raw/ du livre : vous pouvez vĂ©rifier ma sĂ©lection et en faire une autre. Plus prĂšs de chez vous, prenez lâapplication que vous construiriez, ou un Ă©quivalent open source, faites-la tourner sous PHP-FPM puis sous un runtime worker sur la mĂȘme machine, et mesurez avec wrk Ă la concurrence que vous attendez en production. Le rapport que vous obtiendrez est le seul qui compte. Pour la latence, ouvrez le tableau de bord public « Backend Pageview Timing » de Wikimedia et lisez-en une semaine.
Le dĂ©bit suppose des requĂȘtes indĂ©pendantes. Que se passe-t-il quand elles ne le sont pas ? Câest la question suivante.
Concurrence
Dix mille connexions qui dorment, cent appels sortants Ă lancer dâun coup, un calcul qui devrait occuper tous les cĆurs : un jour ou lâautre, vos requĂȘtes cessent dâĂȘtre indĂ©pendantes les unes des autres, et câest lĂ que commence votre troisiĂšme question. PHP nâa ni threads dans sa version standard, ni boucle dâĂ©vĂ©nements intĂ©grĂ©e. La concurrence lui vient des processus, de bibliothĂšques bĂąties sur les coroutines que le langage a ajoutĂ©es en 8.1, et de runtimes qui apportent leur propre boucle dâĂ©vĂ©nements. Chacune de ces trois rĂ©ponses convient Ă certaines charges et Ă©choue sur dâautres, et câest cette diffĂ©rence quâil faut connaĂźtre avant de lui confier un service.
Beaucoup de requĂȘtes
Un worker qui attend 40 millisecondes une rĂ©ponse de la base occupe un processus pendant 40 millisecondes, et aucune autre requĂȘte ne sâen aperçoit. Tout le modĂšle tient lĂ , pour le cas ordinaire des requĂȘtes HTTP indĂ©pendantes : le pool de processus du chapitre Le runtime, oĂč chaque worker bloque sur sa requĂȘte SQL, sa lecture de cache ou son appel HTTP sortant pendant que le systĂšme dâexploitation fait tourner les autres. Un runtime Ă boucle dâĂ©vĂ©nements comme Node.js a besoin de code asynchrone pour quâun appel lent ne gĂšle pas toutes les connexions. PHP a prĂ©fĂ©rĂ© donner un processus Ă chaque connexion, et le code reste synchrone.
Cette simplicitĂ© se paie en mĂ©moire, connexion par connexion. Un worker qui garde un WebSocket ouvert, qui attend la fin dâun long poll ou qui diffuse une rĂ©ponse pendant une minute immobilise un processus entier tout ce temps, et un pool de quelques centaines de processus ne tiendra jamais dix mille connexions inactives. Pour cette charge-lĂ , le modĂšle par dĂ©faut de PHP est le mauvais.
Beaucoup de connexions
Pour les charges qui exigent de nombreuses connexions simultanĂ©es dans un seul processus, PHP dispose de runtimes asynchrones, et ce sont des bibliothĂšques ou des extensions, pas des fonctionnalitĂ©s du langage. Par ordre alphabĂ©tique : AMPHP, un ensemble de bibliothĂšques non bloquantes construites sur une boucle dâĂ©vĂ©nements et sur les fibers du langage ; ReactPHP, un ensemble de bibliothĂšques bas niveau pilotĂ©es par les Ă©vĂ©nements, avec sa propre boucle, son serveur HTTP et ses composants de flux ; Swoole enfin, ou son fork OpenSwoole, une extension en C qui donne Ă PHP une boucle dâĂ©vĂ©nements, des coroutines et un serveur HTTP et WebSocket intĂ©grĂ©, avec des appels dâentrĂ©es-sorties qui rendent la main au lieu de bloquer. FrankenPHP et RoadRunner, les runtimes worker du chapitre Le runtime, ne figurent pas dans cette liste parce quâils rĂ©pondent Ă un autre besoin : ils gardent lâapplication chargĂ©e entre deux requĂȘtes, toujours une requĂȘte Ă la fois par worker, et ne rendent pas le code concurrent.
Sous les deux premiers se trouve la Fiber, arrivĂ©e en PHP 8.1 : une fonction capable de se suspendre elle-mĂȘme, et que celui qui la tient peut reprendre plus tard. La RFC qui lâa introduite dit trĂšs prĂ©cisĂ©ment ce quâelle nâest pas : « toutes les fibers vivent dans un seul thread, une seule fiber sâexĂ©cute Ă la fois », et « le code bloquant, comme file_get_contents(), continuera de bloquer le processus entier, mĂȘme si dâautres fibers existent ». Le langage ne fournit aucun ordonnanceur. Câest une bibliothĂšque qui lâapporte, et chaque appel dâentrĂ©e-sortie du programme doit passer par elle pour rendre la main. Une application PHP asynchrone sâĂ©crit donc contre le client HTTP, le client de base de donnĂ©es et les fonctions de fichiers dâAMPHP ou de ReactPHP, et non contre les fonctions standard. Une seule bibliothĂšque synchrone glissĂ©e par mĂ©garde dans les dĂ©pendances bloque toute la boucle.
JusquâoĂč une boucle dâĂ©vĂ©nements porte PHP, le test plaintext du benchmark multi-langages le montre : il ne fait aucun travail applicatif et mesure seulement combien de connexions en pipeline une couche HTTP sait servir.
LâentrĂ©e Swoole sert 3,5 millions de requĂȘtes par seconde, devant Micronaut, Gin, Node.js et Spring, quand PHP nu sous PHP-FPM en sert 450âŻ000 et Laravel sous PHP-FPM 27âŻ000. Le plafond est ailleurs : ASP.NET Core Ă 11,5 millions, et tout en haut un serveur Python adossĂ© Ă du C et un serveur Rust, autour de 28 millions. Avec une boucle dâĂ©vĂ©nements, PHP joue dans le deuxiĂšme groupe, pas dans le premier. Sans, il joue dans le quatriĂšme.
Beaucoup de cĆurs
Le programme spectral-norm le plus rapide en PHP dans le Benchmarks Game termine en 18 secondes de temps rĂ©el pour 72 secondes de CPU rĂ©parties sur plusieurs cĆurs, contre 90 secondes pour le meilleur programme Python et 1,6 seconde pour Node.js. Cet Ă©cart entre temps CPU et temps rĂ©el, câest Ă cela que ressemble le calcul parallĂšle en PHP, et une fois de plus il vient des processus. LâinterprĂ©teur en ligne de commande forke avec pcntl_fork(), lance des sous-processus avec proc_open() ou fait tourner plusieurs scripts sous un superviseur, et les rĂ©sultats reviennent par des tubes, des fichiers, une base ou une file dâattente. Lâextension parallel propose bien des threads, mais sur la version thread-safe de lâinterprĂ©teur, que peu de distributions livrent. Le parallĂ©lisme par fork fonctionne, et il fonctionne dans la classe de vitesse de lâinterprĂ©teur dĂ©crite dans DĂ©bit et latence.
Lâordonnanceur entrera-t-il un jour dans le moteur ? La question est ouverte sur la liste internals. Une RFC intitulĂ©e « Concurrency Support in the PHP Engine », qui ajouterait un ordonnanceur et de la concurrence structurĂ©e au langage lui-mĂȘme, y Ă©tait en discussion au moment oĂč jâĂ©cris, sans vote, aprĂšs quâune premiĂšre proposition sur le mĂȘme sujet a Ă©tĂ© abandonnĂ©e en juillet 2026. En septembre 2026, le langage a des fibers, et lâordonnanceur est une bibliothĂšque.
Ce qui ne doit pas faire attendre lâutilisateur
La concurrence dont vous aurez besoin le plus souvent nâa rien de spectaculaire : câest le travail que lâutilisateur ne devrait pas avoir Ă attendre. Une requĂȘte a une durĂ©e limite et une rĂ©ponse Ă rendre, donc tout ce qui prend plus de temps doit en sortir. Lâidiome, câest une file dâattente et un processus worker. La requĂȘte dĂ©pose un travail dans une table ou un courtier de messages, puis rĂ©pond. De son cĂŽtĂ©, un script PHP en ligne de commande, maintenu en vie par un superviseur, dĂ©pile la file et exĂ©cute les travaux un par un. Ce script nâa ni limite de temps ni limite de mĂ©moire tant que vous ne lui en donnez pas, alors un worker de production fixe les deux et sâarrĂȘte proprement aprĂšs quelques milliers de travaux, pour que le superviseur relance un processus neuf. La plupart des frameworks full-stack livrent ce schĂ©ma avec un pilote pour les courtiers habituels, et cron couvre les tĂąches planifiĂ©es.
La limite : la concurrence de PHP est Ă gros grain. Des processus pour les requĂȘtes, des processus pour les cĆurs, une file dâattente pour le travail en arriĂšre-plan, et un runtime Ă part, avec ses propres bibliothĂšques dâentrĂ©es-sorties, pour le cas des connexions nombreuses. Si votre produit est un service temps rĂ©el avec des dizaines de milliers de connexions ouvertes, vous passerez votre premier mois Ă choisir puis Ă apprendre lâun des runtimes asynchrones, et vous dĂ©couvrirez que la plupart des bibliothĂšques de lâĂ©cosystĂšme nâont pas Ă©tĂ© Ă©crites pour lui. Si votre produit est fait de requĂȘtes et de rĂ©ponses, vous ne rencontrerez jamais la question.
Ce que vous pouvez vĂ©rifier vous-mĂȘme
Prenez le scĂ©nario Ă connexions nombreuses que vous avez vraiment, si vous en avez un, et Ă©crivez-le deux fois dans lâaprĂšs-midi : une fois avec AMPHP ou ReactPHP, une fois avec Swoole ou OpenSwoole. Comptez ensuite combien des bibliothĂšques dont vous dĂ©pendriez offrent un client non bloquant. Si câest la plupart, la voie asynchrone vous est ouverte. Si elles sont rares, la conclusion honnĂȘte est que PHP est le mauvais outil pour ce service-lĂ , et le reste de votre systĂšme est une dĂ©cision Ă part.
Reste Ă savoir si le langage lui-mĂȘme est de ceux que vous auriez envie dâĂ©crire, et cette question-lĂ , vous y rĂ©pondez en le lisant.
Le langage en 2026
Est-ce un langage que vous auriez envie dâĂ©crire pendant quelques annĂ©es ? Aucun benchmark ne rĂ©pond Ă cela ; vous y rĂ©pondez en lisant du code. PHP est aujourdâhui un langage orientĂ© objet, avec ramasse-miettes, aux types dĂ©clarĂ©s et appliquĂ©s Ă lâexĂ©cution aux frontiĂšres des fonctions et des propriĂ©tĂ©s, dotĂ© dâĂ©numĂ©rations, dâimmutabilitĂ©, de closures, dâattributs et dâun gestionnaire de paquets. Un exemple suffit pour le juger, et chaque construction plus jeune que 2022 porte la version qui lâa introduite, pour que vous sachiez ce quâun projet donnĂ© peut utiliser.
Un exemple complet
<?php
declare(strict_types=1);
enum Status: string
{
case Draft = 'draft';
case Published = 'published';
case Archived = 'archived';
public function isVisible(): bool
{
return $this === self::Published;
}
}
final readonly class Article
{
public function __construct(
public string $title,
public Status $status,
public ?\DateTimeImmutable $publishedAt = null,
) {
}
public function publish(\DateTimeImmutable $at): static
{
return new static($this->title, Status::Published, $at);
}
}
function summary(Article ...$articles): string
{
$visible = array_filter($articles, fn (Article $a): bool => $a->status->isVisible());
$titles = array_map(fn (Article $a): string => $a->title, $visible);
return match (count($titles)) {
0 => 'nothing published',
1 => $titles[array_key_first($titles)],
default => implode(', ', $titles),
};
}
$draft = new Article(title: 'Benchmarks', status: Status::Draft);
$live = $draft->publish(new \DateTimeImmutable('2026-09-01'));
echo summary($draft, $live), PHP_EOL; // Benchmarks
echo $draft->status->value, PHP_EOL; // draft
Lisez-le comme vous liriez une pull request. declare(strict_types=1) passe le fichier en typage strict : une chaĂźne passĂ©e lĂ oĂč un int est dĂ©clarĂ© lĂšve une TypeError au lieu dâĂȘtre convertie. Lâinterrupteur agit fichier par fichier, et un projet lâactive dans chacun. Lâenum est une vraie Ă©numĂ©ration, un ensemble fermĂ© dâobjets singletons qui peuvent porter des mĂ©thodes et une valeur sous-jacente. La classe readonly (PHP 8.2) rend chaque propriĂ©tĂ© immuable aprĂšs construction, et son constructeur dĂ©clare et affecte ces propriĂ©tĂ©s en un seul endroit.
Le reste de la syntaxe, vous le connaissez dĂ©jĂ par dâautres langages : les arguments nommĂ©s Ă lâappel, ? pour les types nullables, static comme type de retour, fn pour les closures dâune ligne, et un match qui compare strictement, ne tombe jamais dans la branche suivante et lĂšve une exception quand aucune branche ne correspond.
Ce que lâexemple ne montre pas compte tout autant. Chaque frontiĂšre y est typĂ©e, alors que le langage ne lâexige pas ; la lecture dâune variable non dĂ©finie est un avertissement en PHP 8, et les analyseurs statiques en font une erreur. Le signe $ sur les variables et la flĂšche -> pour lâaccĂšs aux membres sont les deux morceaux de syntaxe qui paraissent Ă©trangers Ă tout le monde, et au bout dâune heure on ne les voit plus.
Les ajouts récents
Les deux derniĂšres versions ont changĂ© la façon dâĂ©crire le code, et un projet sur PHP 8.4 ou plus rĂ©cent utilisera ce quâelles ont apportĂ©.
// PHP 8.4
final class Money
{
public function __construct(
public private(set) int $cents,
public string $currency,
) {
}
public string $formatted {
get => number_format($this->cents / 100, 2) . ' ' . $this->currency;
}
}
$price = new Money(1999, 'EUR');
echo $price->formatted, PHP_EOL; // 19.99 EUR
$price->cents = 5; // Error: Cannot modify private(set) property Money::$cents
public private(set) est la visibilitĂ© asymĂ©trique (PHP 8.4) : la propriĂ©tĂ© se lit de partout et ne sâĂ©crit que depuis lâintĂ©rieur de la classe, ce qui supprime la plupart des getters quâun dĂ©veloppeur Java ou C# sâattend Ă Ă©crire. Le bloc get sous $formatted est un hook de propriĂ©tĂ© (PHP 8.4), une logique attachĂ©e Ă une propriĂ©tĂ© sans changer ses sites dâappel, et cela supprime la plupart des autres. LâopĂ©rateur pipe (PHP 8.5) enchaĂźne les fonctions de gauche Ă droite :
// PHP 8.5
$slug = ' Hello, World '
|> trim(...)
|> strtolower(...)
|> (fn (string $s): string => preg_replace('/[^a-z0-9]+/', '-', $s))
|> (fn (string $s): string => trim($s, '-'));
echo $slug, PHP_EOL; // hello-world
La forme trim(...) est un callable de premiĂšre classe (PHP 8.1), une rĂ©fĂ©rence Ă une fonction sous forme de valeur, avec lâaritĂ© vĂ©rifiĂ©e par le moteur. Ajoutez les attributs, des mĂ©tadonnĂ©es structurĂ©es lues par rĂ©flexion et utilisĂ©es par tous les frameworks pour le routage, la validation et le mapping, et vous avez les constructions que vous croiserez le plus dans une base de code dĂ©marrĂ©e aprĂšs 2024.
Ce que le systĂšme de types fait et ne fait pas
Les types sont dĂ©clarĂ©s sur les paramĂštres, les valeurs de retour, les propriĂ©tĂ©s et les constantes de classe, et le moteur les applique Ă lâexĂ©cution. Les types union (int|string), les types intersection (Countable&Traversable), les types nullables, never, mixed et les Ă©numĂ©rations font tous partie du langage. Une erreur de type est une exception, pas un avertissement, et en mode strict il nây a aucune coercition implicite entre scalaires, Ă lâexception de lâĂ©largissement dâun int en float.
Ce qui manque, autant lâentendre de moi maintenant que le dĂ©couvrir la troisiĂšme semaine. Il nây a pas de gĂ©nĂ©riques dans le langage. Un list<Order> ne peut pas sâexprimer dans une signature ; le paramĂštre est array. LâĂ©cosystĂšme rĂ©pond par une syntaxe de docblock que les deux analyseurs statiques, PHPStan et Psalm, comprennent et appliquent. @param list<Order> $orders est vĂ©rifiĂ© au moment de lâanalyse, dans lâĂ©diteur et en intĂ©gration continue, avec les types template, les types conditionnels et les types de forme, plus riches que tout ce que le langage lui-mĂȘme sait exprimer ; un projet PHP typĂ© exĂ©cute donc un analyseur Ă son niveau le plus strict Ă chaque build et traite sa sortie comme des erreurs de compilation. Que ce soit un substitut acceptable Ă des gĂ©nĂ©riques dans le langage, câest Ă vous dâen juger, selon vos propres habitudes. Câest un substitut, et vous devriez le peser comme tel.
Lâautre absence vient du runtime plutĂŽt que du langage : pas de threads en userland ni de boucle dâĂ©vĂ©nements intĂ©grĂ©e. Concurrence dĂ©crit ce qui existe Ă la place.
La bibliothĂšque standard
strpos voisine avec str_replace, array_key_exists avec in_array, et certaines fonctions prennent lâaiguille en premier quand dâautres prennent la botte de foin. Cette incohĂ©rence est historique, elle est rĂ©elle, et elle ne disparaĂźtra pas. Depuis PHP 8.0, les nouvelles fonctions suivent un seul schĂ©ma de nommage (str_contains, array_is_list, array_find), les fonctions internes lĂšvent TypeError et ValueError sur une entrĂ©e invalide au lieu de retourner false, et tout Ă©diteur dotĂ© dâun serveur de langage PHP complĂšte les noms ; câest ainsi quâune Ă©quipe vit avec le reste. La seconde verrue, ce sont les chaĂźnes, qui sont des suites dâoctets : strlen('Ă©') vaut 2, et le traitement du texte passe par la famille mb_. VoilĂ les deux que vous rencontrerez en premier.
La limite : le systĂšme de types de PHP est appliquĂ© Ă lâexĂ©cution et aux frontiĂšres des fonctions et des propriĂ©tĂ©s, pas Ă lâintĂ©rieur des expressions ni Ă travers les conteneurs gĂ©nĂ©riques. Une Ă©quipe qui veut des garanties Ă la compilation sur ses collections les obtient dâun analyseur statique, pas du langage.
Ce que vous pouvez vĂ©rifier vous-mĂȘme
Installez PHP 8.5 (votre gestionnaire de paquets, ou lâimage Docker officielle php:8.5-cli), collez le premier exemple dans un fichier et lancez-le avec php file.php. Puis cassez-le : passez une chaĂźne lĂ oĂč lâĂ©numĂ©ration Status est attendue, retirez strict_types, Ă©crivez un match sur lâĂ©numĂ©ration en oubliant un cas, puis appelez-le avec ce cas. Les messages dâerreur sont la partie dâun langage avec laquelle on vit, et cinq minutes suffisent pour les juger. Pour le systĂšme de types, lancez PHPStan ou Psalm Ă son niveau le plus strict sur nâimporte quel projet PHP open source dâune taille qui vous parle, et lisez les vingt premiers rĂ©sultats ; ils vous montrent ce que lâanalyseur attrape et que le moteur laisse passer.
LâĂ©cosystĂšme
Personne nâadopte un langage seul ; on adopte avec lui ses bibliothĂšques, ses outils et ses conventions, et votre question est de savoir si ceux de PHP tiennent la comparaison avec ce que npm, pip ou Maven vous donnent ailleurs. PHP a un gestionnaire de paquets, un registre public, un organisme dâinteropĂ©rabilitĂ© qui publie des standards plutĂŽt que des produits, et au moins deux options mĂ»res dans chaque catĂ©gorie dâoutillage, dont aucune nâest cautionnĂ©e par le langage lui-mĂȘme. La taille et lâactivitĂ© se mesurent, et les chiffres sont ici ; la qualitĂ©, je ne peux que vous la dĂ©signer du doigt.
Composer et Packagist
Composer est le gestionnaire de dĂ©pendances, et il nây en a pas de second. Il lit un composer.json, rĂ©sout les versions selon des contraintes de versionnage sĂ©mantique, Ă©crit un composer.lock qui fige chaque dĂ©pendance transitive, et gĂ©nĂšre lâautoloader qui fait correspondre les noms de classes aux fichiers selon le standard PSR-4. Packagist, son registre par dĂ©faut, listait 468âŻ099 paquets et 5,8 millions de versions de paquets le 17 septembre 2026, et avait enregistrĂ© 199,6 milliards dâinstallations de paquets depuis avril 2012.
Les installations via Composer sont passĂ©es de 2,0 milliards en 2016 Ă 36,0 milliards en 2025, et le seul mois dâaoĂ»t 2026 en a enregistrĂ© 4,9 milliards, 91 % de plus quâen aoĂ»t 2025. Câest le signal dâactivitĂ©, et sa dĂ©finition appelle une rĂ©serve : une installation est un paquet installĂ© par Composer et signalĂ© au registre, si bien que les pipelines dâintĂ©gration continue et les builds dâimages de conteneurs en reprĂ©sentent une part large et inconnue. La courbe dit que les projets PHP sont construits, testĂ©s et dĂ©ployĂ©s en nombre croissant. Elle ne compte pas les projets, et vous ne pouvez pas non plus mettre le nombre de paquets dâun registre en face de celui dâun autre, parce que ce quâon appelle un « paquet » diffĂšre dâun Ă©cosystĂšme Ă lâautre.
Depuis Composer 2.4, sorti en aoĂ»t 2022, composer audit confronte chaque paquet installĂ© aux avis de sĂ©curitĂ© que Packagist sert par son API, et fait Ă©chouer le build quand il trouve une vulnĂ©rabilitĂ© connue, un paquet abandonnĂ© ou un paquet signalĂ© comme malveillant. Les avis viennent de la base partagĂ©e de lâĂ©cosystĂšme, qui en contenait 1âŻ649 en septembre 2026. Les extensions Ă©crites en C, que Composer nâa jamais gĂ©rĂ©es, ont reçu leur propre installeur en 2025 et 2026 : PIE, le PHP Installer for Extensions, financĂ© par une subvention publique et hĂ©bergĂ© sous lâorganisation php.
Frameworks et plateformes
Les frameworks full-stack en dĂ©veloppement actif sont CakePHP, Laminas, Laravel, Symfony et Yii ; les micro-frameworks, Mezzio et Slim ; les plateformes de contenu, Drupal, Joomla, TYPO3 et WordPress ; les plateformes de commerce, Adobe Commerce avec son Ă©dition Magento Open Source, PrestaShop, Shopware, Sylius et WooCommerce. Lâordre est alphabĂ©tique dâun bout Ă lâautre, et je nâen recommande aucun.
Ce quâils sont les uns pour les autres, en revanche, se dit avec une source. Symfony publie la liste des projets construits sur ses composants, et elle compte Drupal, Joomla, TYPO3, Magento, PrestaShop, Shopware et Sylius, ainsi que Composer lui-mĂȘme. Ces composants, et ceux de Laravel, sont ce que vous trouverez sous la plupart des plateformes du chapitre Empreinte, WordPress exceptĂ©, et câest pour cela que lâĂ©cosystĂšme est moins fragmentĂ© quâune liste de noms ne le laisse croire. Les chiffres dâusage viennent dâune enquĂȘte : parmi les dĂ©veloppeurs qui citent PHP comme langage principal, 64 % dĂ©clarent utiliser Laravel, 25 % WordPress et 23 % Symfony, plusieurs rĂ©ponses Ă©tant permises. LâĂ©chantillon penche vers les clients de lâĂ©diteur, alors lisez cela comme des rĂ©ponses dâenquĂȘte, pas comme un classement que je cautionne.
Outillage
Chaque catĂ©gorie a au moins deux options maintenues, et un aprĂšs-midi avec chacune est la bonne façon de choisir. Pour les tests, Pest et PHPUnit. Pour lâanalyse statique, PHPStan et Psalm, qui lisent tous deux une syntaxe de types en docblock plus riche que le langage et appliquent les gĂ©nĂ©riques, les formes et les types conditionnels que le moteur ne connaĂźt pas. Pour le style de code, PHP-CS-Fixer et PHP_CodeSniffer, tous deux capables dâappliquer le standard PER Coding Style. Pour lâĂ©dition, PhpStorm et VS Code avec une extension PHP, chacun avec un serveur de langage ; pour servir, FrankenPHP, PHP-FPM derriĂšre un serveur web et RoadRunner. Deux outils sont seuls dans leur catĂ©gorie : Xdebug, le dĂ©bogueur, qui profile aussi, et Rector, qui réécrit le code vers une syntaxe plus rĂ©cente et qui est le moyen de faire passer une grande base de code dâune version de PHP Ă lâautre.
Quelle part de cet outillage est rĂ©ellement utilisĂ©e est une autre affaire, et le chiffre dâenquĂȘte sur ce point est le moins flatteur de ce chapitre.
La moitiĂ© des dĂ©veloppeurs PHP de lâĂ©chantillon JetBrains utilisent PHPUnit, un tiers utilisent PHPStan, et un tiers nâĂ©crivent aucun test ; 42 % nâutilisent rĂ©guliĂšrement aucun outil de qualitĂ© de code. Est-ce pire que dans dâautres Ă©cosystĂšmes, lâenquĂȘte ne le dit pas, et je ne le devinerai pas. Lâoutillage existe ; quâil soit utilisĂ© est une propriĂ©tĂ© de lâĂ©quipe, pas du langage.
Standards
Une bibliothĂšque qui type son logger en Psr\Log\LoggerInterface fonctionne sous nâimporte quel framework, et câest Ă cela que sert le PHP Framework Interoperability Group, PHP-FIG. Il publie les standards qui permettent aux bibliothĂšques dâauteurs diffĂ©rents de sâemboĂźter : 14 PHP Standards Recommendations acceptĂ©es en septembre 2026, couvrant lâautoloading (PSR-4), la journalisation (PSR-3), les messages et gestionnaires HTTP (PSR-7, 15, 17), le cache (PSR-6, 16), les conteneurs (PSR-11), les Ă©vĂ©nements (PSR-14) et les horloges (PSR-20), plus le PER Coding Style, en version 3.1, qui a remplacĂ© PSR-12 comme standard de codage.
La distribution du langage lui-mĂȘme est la derniĂšre piĂšce. php.net publie des archives sources signĂ©es par les release managers depuis 2012, avec leurs sommes de contrĂŽle ; les images Docker officielles php:8.5-cli et php:8.5-fpm suivent chaque version ; et les distributions Linux grand public empaquettent une version quâelles corrigent elles-mĂȘmes, qui nâest pas toujours une version que php.net maintient encore.
La limite : lâĂ©cosystĂšme est un Ă©cosystĂšme web. Sa profondeur en HTTP, gabarits, ORM, files dâattente, paiement et contenu nâa pas dâĂ©quivalent en calcul numĂ©rique, apprentissage automatique, pipelines de donnĂ©es ou applications de bureau et mobiles, oĂč les paquets sont rares et la communautĂ© petite. Si votre produit en a besoin, vous utiliserez un autre langage pour cette partie, et LĂ oĂč PHP est le mauvais choix le dit en dĂ©tail.
Ce que vous pouvez vĂ©rifier vous-mĂȘme
Lancez composer create-project avec le squelette du framework de votre choix, puis composer audit, et lisez le fichier lock produit ; toute la chaĂźne dâapprovisionnement est devant vous en dix minutes. Cherchez ensuite sur Packagist les trois bibliothĂšques dont votre projet ne peut pas se passer, et regardez la date de leur derniĂšre version et le nombre de leurs tickets ouverts. Cette vĂ©rification vous en apprend plus que le nombre de paquets.
Sous tout cela tourne un interprĂ©teur, et qui lâentretient est une question Ă part entiĂšre.
Gouvernance et pérennité
Avant de miser une base de code sur quoi que ce soit, vous voulez savoir qui dĂ©cide de ce qui y entre, qui est payĂ© pour lâentretenir, et combien de temps une version reste maintenue. PHP Ă©volue par un processus de RFC public avec un vote aux deux tiers, livre une version mineure chaque annĂ©e et maintient chacune pendant quatre ans, et dispose depuis 2021 dâune fondation qui contractualise treize ingĂ©nieurs et a signĂ© 42 % des commits de lâinterprĂ©teur en 2025. Lâargent derriĂšre cette fondation est infĂ©rieur Ă un million de dollars par an, et ce chiffre fait autant partie de la rĂ©ponse que le reste.
Comment un changement entre
Chaque changement du langage passe par une Request for Comments sur wiki.php.net. La proposition est Ă©crite, discutĂ©e pendant au moins deux semaines sur la liste de diffusion internals, puis soumise Ă un vote ouvert pendant au moins deux semaines, et elle ne passe quâavec les deux tiers des voix exprimĂ©es ; les votants sont les contributeurs qui disposent dâun compte php.net et un petit nombre de reprĂ©sentants de la communautĂ©, et la rĂšgle des deux tiers est stricte depuis fĂ©vrier 2019. Chaque Ă©tape est publique, jusquâaux votes exprimĂ©s nominativement.
Les types intersection nullables ont Ă©tĂ© rejetĂ©s 12 Ă 26 en 2021. Les closures multi-instructions Ă capture automatique ont obtenu une majoritĂ© de 27 Ă 16 en 2022 et ont Ă©tĂ© refusĂ©es quand mĂȘme, faute dâatteindre la barre des deux tiers. La visibilitĂ© asymĂ©trique a Ă©tĂ© refusĂ©e 14 Ă 12 en janvier 2023, rĂ©visĂ©e, acceptĂ©e 24 Ă 7 en aoĂ»t 2024 et livrĂ©e dans PHP 8.4, et les classes imbriquĂ©es ont Ă©tĂ© refusĂ©es 2 Ă 20 en mai 2025. Cette liste de refus est la preuve que le processus est rĂ©el.
Le rythme se lit dans un index secondaire : 31 RFC pour PHP 8.4, 19 pour PHP 8.5, et dĂ©jĂ 29 listĂ©es pour PHP 8.6 en septembre 2026. Si vous venez dâun langage pilotĂ© par un seul Ă©diteur ou par un dictateur bienveillant, pesez ce que cela signifie : rien nâentre dans PHP parce que quelquâun dâimportant le veut, et des fonctionnalitĂ©s quâune majoritĂ© voulait ont Ă©tĂ© refusĂ©es. Le processus est lent, et il est public.
Le calendrier des versions
Depuis dĂ©cembre 2015, PHP livre une version mineure chaque annĂ©e, onze dâaffilĂ©e, chacune entre le 20 novembre et le 8 dĂ©cembre. Chaque branche reçoit ensuite deux ans de support actif, avec des corrections de bugs et de sĂ©curitĂ© dans des versions correctives mensuelles, puis deux ans de corrections de sĂ©curitĂ© seulement. Depuis une RFC votĂ©e en avril 2024, les deux fenĂȘtres se terminent le 31 dĂ©cembre de leur derniĂšre annĂ©e, ce qui vous permet de planifier vos mises Ă niveau par annĂ©e civile.
En septembre 2026, quatre branches sont maintenues : PHP 8.2 en support de sĂ©curitĂ© jusquâau 31 dĂ©cembre 2026, 8.3 jusquâĂ la fin 2027, 8.4 en support actif jusquâĂ la fin 2026, et 8.5 en support actif jusquâĂ la fin 2027. PHP 8.6 est prĂ©vu en disponibilitĂ© gĂ©nĂ©rale le 19 novembre 2026, avec son gel des fonctionnalitĂ©s en aoĂ»t, des release candidates Ă partir du 24 septembre et trois release managers nommĂ©s. Aucune date nâexiste pour un PHP 9.0, et je nâen donne aucune. Les versions de PHP, 2015 Ă 2026 liste chaque version avec ses dates.
DerriĂšre le calendrier, le dĂ©pĂŽt montre lâactivitĂ©. Dans les douze mois jusquâau 17 septembre 2026, la branche principale de php-src a reçu 5âŻ316 commits de 171 auteurs distincts, et le dĂ©pĂŽt compte 1âŻ644 contributeurs sur un historique GitHub qui commence en 2011.
Qui est payé
Jusquâen 2021, lâinterprĂ©teur Ă©tait entretenu par des bĂ©nĂ©voles et par une poignĂ©e dâingĂ©nieurs employĂ©s par des entreprises ayant un intĂ©rĂȘt dans PHP. En novembre 2021, quand lâun des dĂ©veloppeurs du cĆur les plus actifs a annoncĂ© quâil sâĂ©loignait de ce travail, dix entreprises ont créé The PHP Foundation pour financer directement le dĂ©veloppement du cĆur : Acquia, Automattic, Craft CMS, JetBrains, Laravel, PrestaShop, Private Packagist, Symfony, Tideways et Zend by Perforce. La fondation est hĂ©bergĂ©e fiscalement par Open Source Collective, liste chaque transaction sur sa page Open Collective et publie un rapport de transparence chaque annĂ©e.
Les contributions ont Ă©tĂ© de 712âŻ000 dollars en 2022, 419âŻ000 en 2023, 684âŻ000 en 2024 et 731âŻ000 en 2025. Les dĂ©penses en ingĂ©nieurs sont passĂ©es de 275âŻ000 dollars en 2023 Ă 635âŻ000 en 2024 et 784âŻ000 en 2025, une annĂ©e que la fondation a close sur un dĂ©ficit quâelle dĂ©crit comme dĂ©libĂ©rĂ©. VoilĂ lâĂ©chelle, et ce sont les rapports eux-mĂȘmes qui la donnent.
Ce que cet argent achĂšte, en septembre 2026, câest treize ingĂ©nieurs Ă temps plein ou partiel sous contrat, un directeur exĂ©cutif et un conseil de dix membres non rĂ©munĂ©rĂ©s ; ces ingĂ©nieurs ont signĂ© 42 % des commits de php-src et 32 % des pull requests fusionnĂ©es en 2025. Deux subventions publiques sâajoutent Ă lâargent des sponsors. La Sovereign Tech Agency allemande a financĂ© 205âŻ000 euros de travaux en 2023 et 2024 et 223âŻ680 euros en 2025 et 2026, et une subvention dâAlpha-Omega, un projet de la Linux Foundation, finance une Ă©quipe de sĂ©curitĂ© de lâĂ©cosystĂšme depuis mai 2026.
La dĂ©pendance est dans les mĂȘmes rapports. Deux sponsors, Automattic et JetBrains, reprĂ©sentent respectivement 762âŻ500 et 476âŻ670 dollars des 3,37 millions de dollars enregistrĂ©s sur la page Open Collective de la fondation depuis novembre 2021, soit environ 37 % Ă eux deux ; ce total cumulĂ© et les rapports annuels nâont pas le mĂȘme pĂ©rimĂštre, et je ne les ai pas rĂ©conciliĂ©s. Le nombre dâorganisations et de particuliers sponsors est tombĂ© de 658 en 2024 Ă 536 en 2025, ce que la fondation elle-mĂȘme qualifie de « nettement moins ». Un budget infĂ©rieur Ă un million de dollars est petit pour un langage de lâempreinte dĂ©crite dans Empreinte : il paie une douzaine dâingĂ©nieurs, pas un groupe de recherche. Chacun de ces chiffres, câest la fondation qui le publie.
Sécurité
Une vulnĂ©rabilitĂ© arrive au projet par le flux dâavis privĂ©s de GitHub sur le dĂ©pĂŽt php-src ou par e-mail Ă lâĂ©quipe de sĂ©curitĂ©. Une politique publiĂ©e la classe en sĂ©vĂ©ritĂ© haute, moyenne ou basse, et les deux classes supĂ©rieures sont corrigĂ©es dans un dĂ©pĂŽt privĂ© avant une publication coordonnĂ©e. Les tags de version sont signĂ©s par les release managers depuis avril 2012, et chaque archive est livrĂ©e avec une signature dĂ©tachĂ©e et une somme de contrĂŽle publiĂ©e. Je nâai trouvĂ© ni nomenclature logicielle ni attestation de build pour les archives de version, et je le rapporte comme « non trouvé » plutĂŽt que comme « nâexiste pas ».
LâinterprĂ©teur a eu 8 vulnĂ©rabilitĂ©s publiĂ©es en 2022, 7 en 2023, 18 en 2024, 13 en 2025 et 14 en 2026 jusquâau 17 septembre. La hausse de 2024 coĂŻncide avec un audit externe de lâinterprĂ©teur, commandĂ© avec des fonds publics, qui a trouvĂ© 27 problĂšmes dont 17 avaient des implications de sĂ©curitĂ©, trois dâentre eux de sĂ©vĂ©ritĂ© haute, et qui a produit plusieurs des CVE de cette annĂ©e-lĂ . Le graphique se lit mal si lâon nây prend garde. La politique de PHP nâattribue pas de CVE Ă la plupart des problĂšmes de sĂ©vĂ©ritĂ© basse, donc le dĂ©compte reflĂšte la politique autant que le code. Un dĂ©compte de vulnĂ©rabilitĂ©s ne se compare pas non plus dâun langage Ă lâautre : ce qui compte comme « le langage », un runtime, une bibliothĂšque standard, un registre de paquets, diffĂšre dans chacun, et la politique de divulgation aussi.
La limite : le langage est gouvernĂ© par ses contributeurs, financĂ© par une fondation au budget infĂ©rieur Ă un million de dollars par an avec deux sponsors dominants, et sĂ©curisĂ© par une petite Ă©quipe et une politique qui attribue moins de CVE que dâautres ne le feraient. Ce sont les faits dâun projet communautaire, et ils sont publiĂ©s par le projet lui-mĂȘme ; si vous les comparez avec un langage adossĂ© Ă la masse salariale dâun grand Ă©diteur, comparez les risques des deux cĂŽtĂ©s, y compris la libertĂ© de lâĂ©diteur de changer de cap.
Ce que vous pouvez vĂ©rifier vous-mĂȘme
Ouvrez wiki.php.net/rfc et lisez une RFC actuellement en vote, puis le fil de la liste internals qui lâaccompagne ; une heure passĂ©e lĂ vous montre comment les dĂ©cisions se prennent, mieux que nâimporte quelle description. Ouvrez la page Open Collective de la fondation, oĂč chaque contribution et chaque dĂ©pense est listĂ©e par date. Ouvrez les avis de sĂ©curitĂ© de php-src sur GitHub et lisez les trois plus rĂ©cents, en notant le dĂ©lai entre le signalement et le correctif.
Ce que tout cela vous coûte, en salaires, en hébergement et en mises à niveau, est la question suivante.
Coût de possession
Un langage vous coĂ»te trois choses : les gens qui lâĂ©crivent, les machines qui lâexĂ©cutent et le calendrier que vous consacrez Ă le tenir Ă jour. PHP a un chiffre pour chacune, et chaque chiffre se lit de deux façons. Les dĂ©veloppeurs PHP sont nombreux et, dâaprĂšs les mĂ©dianes des enquĂȘtes elles-mĂȘmes, moins payĂ©s que ceux de la plupart des autres langages ; le runtime est celui qui compte le moins de piĂšces mobiles Ă hĂ©berger, des fichiers servis par un pool de processus ; et la cadence annuelle des versions impose un budget de mise Ă niveau annuel quâune large part du parc installĂ© nâa pas payĂ©. La lecture bon marchĂ© et la lecture chĂšre sortent des mĂȘmes sources, et vous aurez besoin des deux.
Les personnes
Un dĂ©veloppeur professionnel sur cinq a Ă©crit du PHP dans lâannĂ©e. Cela le place douziĂšme parmi les langages de la plus grande enquĂȘte auprĂšs des dĂ©veloppeurs, Ă quelques points de Go et de C.
Une autre enquĂȘte confirme lâordre de grandeur : 17 % des rĂ©pondants de lâenquĂȘte JetBrains de 2025 ont utilisĂ© PHP, et 9 % lâont citĂ© comme langage principal. Le marchĂ© du travail, lui, reste peu documentĂ© publiquement. Un agrĂ©gateur dâoffres dâemploi britanniques a comptĂ© 613 postes permanents citant PHP sur les six mois prĂ©cĂ©dant septembre 2026, contre 404 un an plus tĂŽt, pour un salaire mĂ©dian annoncĂ© de 48âŻ676 livres, en hausse de 14,5 %. Je nâai trouvĂ© aucune sĂ©rie publique comparable pour dâautres pays, je nâen rapporte donc aucune.
Le chiffre de salaire qui existe est la mĂ©diane dâenquĂȘte, et elle est basse.
Dans la derniĂšre Ă©dition de lâenquĂȘte Stack Overflow Ă publier des salaires par langage, les dĂ©veloppeurs utilisant PHP ont dĂ©clarĂ© une mĂ©diane de 49âŻ586 dollars par an, la deuxiĂšme plus basse de cinquante langages, contre 63âŻ694 pour JavaScript, 67âŻ723 pour Python et 90âŻ221 pour Ruby. Le chiffre est mondial et auto-dĂ©clarĂ©, et les rĂ©pondants PHP vivent plus souvent quâĂ leur tour dans des pays Ă bas salaires, si bien quâil en dit moins sur votre ville quâil nây paraĂźt. Lisez-le comme un coĂ»t, et recruter en PHP revient peu cher dans lâensemble. Lisez-le comme un signal, et le marchĂ© valorise le poste PHP mĂ©dian sous le poste mĂ©dian des autres langages. Si vous montez une Ă©quipe, il vous faut les deux lectures.
Le sentiment se chiffre moins bien que le salaire. Parmi les dĂ©veloppeurs ayant utilisĂ© un langage dans lâannĂ©e, 38,9 % de ceux qui ont utilisĂ© PHP veulent continuer, le taux le plus bas des langages grand public et loin derriĂšre Rust Ă 72,4, TypeScript Ă 58,0 ou Python Ă 56,4. La mĂȘme annĂ©e, 58 % des dĂ©veloppeurs dont le langage principal est PHP disaient ne pas prĂ©voir de migrer vers un autre. Les deux chiffres dĂ©crivent des populations diffĂ©rentes, lâutilisateur occasionnel et le spĂ©cialiste, et mis cĂŽte Ă cĂŽte ils dessinent un langage auquel on est plus souvent affectĂ© quâattirĂ©. Pour le recrutement, cela veut dire un vivier large et une question de rĂ©tention, et câest Ă vous de les pondĂ©rer.
Les machines
Une application PHP en production, ce sont des fichiers sur un disque, servis par un pool de processus. Pas de processus applicatif de longue durĂ©e Ă surveiller, redĂ©marrer ou vider, pas de prĂ©chauffage, pas de tas mĂ©moire Ă dimensionner : câest le modĂšle shared-nothing dĂ©crit dans Le runtime, et câest lui qui donne Ă PHP le moins de piĂšces mobiles Ă hĂ©berger. VoilĂ pourquoi tous les hĂ©bergeurs mutualisĂ©s du monde le proposent, et pourquoi les plateformes du chapitre Empreinte peuvent ĂȘtre installĂ©es par des gens qui ne sont pas ingĂ©nieurs. Pour la plupart des applications, une image de conteneur du build officiel php:8.5-fpm, un serveur web devant et un rĂ©partiteur de charge forment toute lâarchitecture de production, et ajouter de la capacitĂ©, câest ajouter une copie.
Cette simplicitĂ© se paie en efficacitĂ© par machine. Dans le benchmark de DĂ©bit et latence, un framework sous PHP-FPM sert quelques dizaines de milliers de requĂȘtes par seconde sur un gros serveur ; un runtime en mode worker multiplie ce chiffre par trois Ă quatre, et apporte avec lui la discipline opĂ©rationnelle dâun processus de longue durĂ©e. Les progrĂšs du moteur lui-mĂȘme sâinscrivent dans le mĂȘme registre. Badoo a rapportĂ© en 2017 que le passage de ses centaines de serveurs applicatifs de PHP 5 Ă PHP 7 lui avait Ă©conomisĂ© environ un million de dollars de matĂ©riel, chiffre auto-dĂ©clarĂ© sur le blog dâingĂ©nierie de lâentreprise. Je ne dispose dâaucune mesure indĂ©pendante du coĂ»t dâhĂ©bergement par requĂȘte dâun langage Ă lâautre, et je nâaffirme rien Ă ce sujet.
Le calendrier
Lâhistorique des mises Ă niveau de Wikimedia est public : la production est passĂ©e de PHP 7.4 Ă 8.1 en mars 2025, Ă 8.3 en novembre 2025, et prĂ©voyait 8.5 pour fin 2026. Une version mineure sort chaque annĂ©e fin novembre ou dĂ©but dĂ©cembre et reste maintenue quatre ans, si bien que vous devez prĂ©voir une mise Ă niveau par an pour rester en support actif, ou une tous les deux Ă trois ans pour rester en support de sĂ©curitĂ©. Le travail dâune mise Ă niveau est borné : le langage dĂ©prĂ©cie dans une version mineure et supprime Ă la majeure suivante, les analyseurs signalent les dĂ©prĂ©ciations, et Rector applique les réécritures mĂ©caniques. Sur une base de code bien testĂ©e, une montĂ©e de version se compte en jours ; sur une base non testĂ©e, en semaines.
Le parc installĂ© montre ce qui arrive quand ce budget nâest pas payĂ©.
Parmi les paquets installĂ©s via Composer, 94 % des installations dâaoĂ»t 2026 tournaient sur PHP 8 et 0,2 % sur PHP 5. Les sites WordPress qui se dĂ©clarent Ă wordpress.org en Ă©taient Ă 77 % de PHP 8, 21 % de PHP 7 et 2 % de PHP 5. Le web tel que W3Techs le dĂ©tecte tournait Ă 64 % sur PHP 8, 28 % sur PHP 7 et 8 % sur PHP 5, et ces deux derniĂšres sont des versions qui nâont reçu aucun correctif de sĂ©curitĂ© depuis novembre 2022 et dĂ©cembre 2018 respectivement. Ce sont trois populations : les dĂ©veloppeurs qui construisent, les sites qui se mettent Ă jour eux-mĂȘmes, et le web tel quâil est. LâĂ©cart entre la premiĂšre et la troisiĂšme, câest la dette technique de lâĂ©cosystĂšme, et si vous hĂ©ritez dâune base de code PHP, demandez Ă quelle population elle appartient avant dâannoncer un prix.
La limite : le recrutement PHP est bon marchĂ© selon les mĂ©dianes et son hĂ©bergement a le moins de piĂšces mobiles, et chacun de ces faits traĂźne son ombre, une question de rĂ©tention et un parc installĂ© dont plus dâun tiers tourne sur des versions non maintenues. BudgĂ©tez la mise Ă niveau annuelle et recrutez le spĂ©cialiste plutĂŽt que lâutilisateur occasionnel, et vous obtenez le bon cĂŽtĂ© de chaque fait ; sautez lâun ou lâautre, et vous obtenez lâautre cĂŽtĂ©.
Ce que vous pouvez vĂ©rifier vous-mĂȘme
Cherchez le langage sur les sites dâoffres dâemploi de votre ville, puis les frameworks que vous utiliseriez, et comparez le nombre dâannonces et la fourchette affichĂ©e avec les langages que vous envisagez : cela vaut mieux que nâimporte quelle mĂ©diane mondiale. Demandez Ă votre hĂ©bergeur ou Ă votre Ă©quipe plateforme quelle version de PHP ils font tourner aujourdâhui, et comment ils la mettraient Ă niveau. Prenez ensuite un projet PHP open source de la taille de votre base de code, en retard de deux versions, et passez-y le jeu de rĂšgles de mise Ă niveau de Rector : le diff quâil produit, câest le coĂ»t dâune version, sous vos yeux.
Les cas oĂč cette arithmĂ©tique cesse de sâappliquer, parce que PHP est le mauvais outil et non un outil cher, sont rassemblĂ©s dans LĂ oĂč PHP est le mauvais choix.
LĂ oĂč PHP est le mauvais choix
Une Ă©valuation incapable de nommer les cas oĂč son sujet perd nâest pas une Ă©valuation, et PHP perd dans plusieurs. PHP est le mauvais choix pour le calcul limitĂ© par le CPU, pour les services dont le mĂ©tier est de maintenir de nombreuses connexions de longue durĂ©e, pour tout ce qui sâexĂ©cute hors dâun serveur, et pour les Ă©quipes dont les compĂ©tences, la plateforme et lâĂ©chelle les ont dĂ©jĂ menĂ©es ailleurs. Dans chacun de ces cas, le conseil honnĂȘte est rarement « tout réécrire » et bien plus souvent « pas cette partie », avec un autre outil pour la partie en question.
Le calcul
Le programme n-body prend 204 secondes en PHP avec le JIT dĂ©sactivĂ©, contre 8,6 pour Node.js, et le JIT resserre cet Ă©cart sans le combler, comme DĂ©bit et latence lâa montrĂ©. Sur du code qui occupe un cĆur, lâinterprĂ©teur joue dans la catĂ©gorie de Python et de Ruby, un ordre de grandeur derriĂšre V8, la JVM, .NET, Go et Rust. Autour de lui, aucune pile numĂ©rique digne de ce nom : pas de bibliothĂšque de tableaux de la portĂ©e de NumPy, pas de bibliothĂšque de dataframes de la portĂ©e de pandas, pas de framework dâapprentissage automatique quâune Ă©quipe de recherche reconnaĂźtrait. Les paquets qui existent sont rares et maintenus par de petits groupes, et je nâai trouvĂ© aucun chiffre dâĂ©chelle Ă citer pour aucun dâentre eux.
Si votre produit est un modĂšle, une simulation, un pipeline de traitement du signal ou un gros calcul par lots, prenez Python pour lâĂ©cosystĂšme ou un langage compilĂ© pour la vitesse. Si ce produit a aussi une façade web, câest lĂ que PHP peut encore trouver sa place.
Les connexions de longue durée
Dix mille connexions inactives coĂ»tent dix mille processus dans le modĂšle par dĂ©faut de PHP, et un processus coĂ»te trop cher pour le dĂ©penser sur une socket qui dort. Les runtimes asynchrones de Concurrence existent et tiennent la charge, lâentrĂ©e Swoole servant 3,5 millions de requĂȘtes pipelinĂ©es par seconde sur le test plaintext. Mais ce sont des bibliothĂšques avec leurs propres clients dâentrĂ©es-sorties, pas une propriĂ©tĂ© du langage, et la plupart des paquets de lâĂ©cosystĂšme ont Ă©tĂ© Ă©crits pour le modĂšle bloquant. Un backend de chat, un serveur de jeu multijoueur, une passerelle de trading, un pipeline de streaming ou un service de notifications push, câest le cas ordinaire pour Node.js, Go, Elixir et Erlang, Java ou C#, et ces Ă©cosystĂšmes ont les bibliothĂšques qui vont avec.
Les budgets de latence sous la milliseconde tombent du mĂȘme cĂŽtĂ©. Le plancher dâune requĂȘte PHP-FPM est sous la milliseconde sur une machine au repos, et rien de ce qui se construit dessus nây reste sous charge, donc un systĂšme avec ce budget sâĂ©crit dans un langage compilĂ©.
Hors du serveur
PHP est un langage pour serveurs. Il a un interprĂ©teur en ligne de commande, et une bonne partie de lâoutillage est Ă©crite avec, mais pour les applications de bureau, les applications mobiles, les navigateurs, les appareils embarquĂ©s ou la distribution dâun binaire autonome aux utilisateurs finaux, il nâa rien sur quoi une Ă©quipe devrait bĂątir. Si vos utilisateurs nâexĂ©cutent pas dâinterprĂ©teur PHP, Ă©crivez lâoutil que vous leur donnez dans autre chose.
Les garanties au niveau du langage
Un match auquel il manque une branche lĂšve une exception Ă lâexĂ©cution. Ce seul fait dĂ©crit le systĂšme de types du chapitre Le langage en 2026 : il est appliquĂ© Ă lâexĂ©cution, aux frontiĂšres des fonctions et des propriĂ©tĂ©s, sans gĂ©nĂ©riques dans le langage, sans Ă©tape de compilation, sans modĂšle de propriĂ©tĂ© ni de durĂ©e de vie, et sans vĂ©rification dâexhaustivitĂ©. La rĂ©ponse de lâĂ©cosystĂšme est un analyseur statique lancĂ© Ă son niveau le plus strict Ă chaque build, ce qui donne Ă un projet typĂ© lâessentiel de ce quâun compilateur donnerait, et beaucoup de grandes bases de code PHP vivent avec cette rĂ©ponse. Si « le compilateur le garantit » est pour vous une exigence et non une prĂ©fĂ©rence, Ă cause du domaine, du rĂ©gulateur ou de la taille de la base de code, TypeScript, Java, C#, Kotlin, Go ou Rust vous serviront mieux, et je ne plaiderai pas le contraire.
Les Ă©quipes et lâĂ©chelle
Un dĂ©veloppeur professionnel sur cinq a Ă©crit du PHP lâan dernier, un sur onze le cite comme langage principal, et sa part du web est passĂ©e de 80 Ă 70 % en dix ans. La part des dĂ©veloppeurs est plus petite que la part des serveurs en production. Empreinte documente aussi les entreprises qui ont quittĂ© PHP, et elles sont parties vers Java, Go ou TypeScript quand un monolithe web sâĂ©tait muĂ© en un ensemble de services : Zalando en 2010, Trivago en 2021, Dailymotion et BlaBlaCar en 2025 et 2026. Leurs documents publics donnent lâarchitecture pour raison, pas le coĂ»t du runtime.
Si vos ingĂ©nieurs travaillent dĂ©jĂ dans un autre langage, sur une plateforme construite pour lui, ajouter PHP pour un nouveau service vous rapporte peu. Les avantages du runtime, dĂ©crits tout au long de ce livre, sont des avantages de simplicitĂ©, et une seconde pile les efface. Et si votre entreprise a atteint lâĂ©chelle oĂč elle réécrit son monolithe en services compilĂ©s et typĂ©s, vous suivez un schĂ©ma dans lequel PHP est ce que lâon quitte, comme Ruby et Python le sont ailleurs au mĂȘme stade.
LĂ oĂč le doute ne sâapplique pas
Les mĂȘmes preuves soutiennent le verdict inverse, et sans adjectifs. Les applications web en requĂȘte-rĂ©ponse, Ă toute Ă©chelle que vous avez des chances dâatteindre : contenu, commerce, back-offices, API, les plateformes du chapitre Empreinte et les applications sur mesure bĂąties Ă cĂŽtĂ©. Les Ă©quipes qui tiennent Ă un runtime sans processus Ă materner et Ă un dĂ©ploiement qui se rĂ©sume Ă une copie de fichiers. Les organisations qui doivent faire tourner un logiciel pendant dix ans sur un hĂ©bergement quâelles ne contrĂŽlent pas, oĂč le parc installĂ© et la fenĂȘtre de support de quatre ans pĂšsent plus que le dĂ©bit. Et les produits dont la partie difficile est le domaine et non la machine, câest-Ă -dire la plupart des produits.
La limite de ce chapitre : il nomme les cas que les preuves couvrent. Un domaine que je nâai pas mesurĂ©, je ne lâai pas jugĂ©, et si le vĂŽtre en fait partie, dĂ©roulez la semaine qui suit avant de croire la rĂ©putation, ou moi.
Ce que vous pouvez vĂ©rifier vous-mĂȘme
Ăcrivez la charge de travail de votre produit qui vous inquiĂšte le plus, et cherchez-la ci-dessus. Si elle y est, le conseil tient, sauf si votre propre mesure le contredit. Si elle nây est pas, Une Ă©valuation en une semaine existe pour elle.
Une évaluation en une semaine
Rien de ce que jâai Ă©crit ne devrait dĂ©cider Ă votre place. La raison de votre dĂ©cision devrait ĂȘtre une mesure faite sur votre propre charge de travail, et il ne faut pas longtemps pour en faire une. Cinq jours ouvrĂ©s suffisent pour installer le langage, le lire, lâexĂ©cuter sous charge, construire une tranche de votre produit, et vĂ©rifier par vous-mĂȘme lâĂ©cosystĂšme et la gouvernance. Il vous faut un ordinateur portable, une petite machine virtuelle et personne dâautre, et ce que vous tenez Ă la fin, câest une page de chiffres que personne ne vous a tendue.
Jour un : le langage
Installez PHP 8.5 depuis votre gestionnaire de paquets ou lancez lâimage officielle, php:8.5-cli. Collez le premier exemple du chapitre Le langage en 2026 dans un fichier, exĂ©cutez-le, puis cassez-le comme ce chapitre le suggĂšre et lisez chaque message dâerreur. Clonez un projet PHP open source dâune taille qui vous parle et lancez sa suite de tests. Passez ensuite un analyseur statique, PHPStan ou Psalm, Ă son niveau le plus strict, et lisez les vingt premiers rĂ©sultats :
composer require --dev phpstan/phpstan
vendor/bin/phpstan analyse --level=max src
composer require --dev vimeo/psalm
vendor/bin/psalm --init src 1 && vendor/bin/psalm
Ce que lâanalyseur attrape et que le moteur laisse passer, câest la rĂ©ponse pratique Ă la question des gĂ©nĂ©riques. Notez le temps quâil vous a fallu pour lire la base de code, et si les rĂ©sultats Ă©taient des choses que vous auriez voulu voir attrapĂ©es.
Jour deux : le runtime
Sur la machine virtuelle, installez PHP-FPM avec nginx, activez OPcache et servez un script hello-world. Servez ensuite le mĂȘme script sous FrankenPHP en mode worker, et chargez les deux avec le mĂȘme outil, Ă la mĂȘme concurrence :
wrk -t4 -c64 -d30s --latency http://127.0.0.1/
Notez pour chaque exĂ©cution les requĂȘtes par seconde, la latence mĂ©diane, le 99e centile et la mĂ©moire par worker, lue sur la page de statut de FPM ou dans ps. Remplacez ensuite le hello-world par le squelette dâun framework full-stack, nâimporte lequel parmi CakePHP, Laminas, Laravel, Symfony ou Yii, et recommencez. Le rapport entre les quatre exĂ©cutions est le coĂ»t du runtime pour votre future application sur votre matĂ©riel, le chiffre que DĂ©bit et latence ne pouvait vous donner que pour le matĂ©riel de quelquâun dâautre.
Jour trois : une tranche du produit
Choisissez la fonctionnalitĂ© de votre produit qui le reprĂ©sente le mieux : un endpoint authentifiĂ© qui lit et Ă©crit une base de donnĂ©es, rend ou sĂ©rialise quelque chose, et envoie un message dans une file. Construisez-la dans le framework choisi le deuxiĂšme jour, avec des tests, en nâutilisant que ce que le framework et Packagist fournissent, et nâoptimisez pas. Notez le temps que cela a pris, la part que vous avez Ă©crite et la part que vous avez configurĂ©e, le nombre de paquets tirĂ©s, et ce que composer audit en a dit.
Jour quatre : la tranche sous charge
Chargez la tranche du troisiĂšme jour comme vous avez chargĂ© le hello-world, Ă la concurrence que vous attendez en production, puis Ă dix fois cette valeur. Profilez une requĂȘte lente avec le profileur de Xdebug ou avec hrtime() autour des appels suspects, et regardez oĂč passe le temps ; sur la plupart des tranches, il passe dans la base de donnĂ©es, et le langage nâest quâune mince part Ă chaque bout. Notez le dĂ©bit et le 99e centile aux deux concurrences, et la part dâune requĂȘte passĂ©e hors de PHP.
Faites ensuite la seule chose que les benchmarks ne font jamais. Tuez un worker en pleine requĂȘte, saturez la limite de mĂ©moire, levez une exception non attrapĂ©e dans un job de file dâattente, et notez ce que lâutilisateur a vu, ce que les journaux ont dit, et ce qui sâest rĂ©tabli tout seul.
Jour cinq : lâĂ©cosystĂšme et la gouvernance
Cherchez sur Packagist les trois bibliothĂšques dont votre produit ne peut se passer, et notez pour chacune la date de sa derniĂšre version et son nombre de tickets ouverts. Ouvrez wiki.php.net/rfc et lisez la RFC en cours de vote, puis le fil internals qui la porte. Ouvrez la page des versions maintenues de php.net et notez la date Ă laquelle la version que vous avez choisie cesse de recevoir des correctifs de sĂ©curitĂ©. Ouvrez la page Open Collective de la fondation et lisez le dernier mois de transactions, puis les trois avis de sĂ©curitĂ© les plus rĂ©cents de php-src, avec leur dĂ©lai entre signalement et correctif. Tout cela tient dans un aprĂšs-midi, et câest la matiĂšre premiĂšre que Gouvernance et pĂ©rennitĂ© a rĂ©sumĂ©e pour vous.
La décision
La semaine a produit des chiffres, et une décision demande des pondérations que vous seul pouvez fixer. Chaque question ci-dessous a ses preuves publiques dans un chapitre et votre propre réponse dans un jour de la semaine.
| Question | Preuves publiques | Votre résultat de la semaine |
|---|---|---|
| Aurai-je envie de lire et dâĂ©crire ce langage pendant des annĂ©es ? | Le langage en 2026 | Jour un |
| Le débit du runtime suffit-il à mon trafic, sur mon matériel ? | Débit et latence | Jour deux, jour quatre |
| Ma charge de travail tient-elle dans le modĂšle par requĂȘte, ou maintient-elle des connexions, ou consomme-t-elle du CPUÂ ? | Le runtime, Concurrence, LĂ oĂč PHP est le mauvais choix | Jour quatre |
| Les bibliothĂšques dont jâai besoin existent-elles, et sont-elles maintenues ? | LâĂ©cosystĂšme | Jour trois, jour cinq |
| Qui maintient le langage, et jusquâĂ quand ma version est-elle prise en charge ? | Gouvernance et pĂ©rennitĂ© | Jour cinq |
| Puis-je recruter pour lui, lâhĂ©berger, et me payer la mise Ă niveau annuelle ? | CoĂ»t de possession | Vos sites dâoffres dâemploi, votre Ă©quipe plateforme |
| Tourne-t-il, Ă lâĂ©chelle, dans des organisations dont je croirais quâelles ont vĂ©rifié ? | Empreinte | Leurs documents publics |
Certaines issues reviennent souvent. Quand la charge de travail est en requĂȘte-rĂ©ponse, que le dĂ©bit du deuxiĂšme jour a dĂ©passĂ© votre besoin avec de la marge et que les bibliothĂšques du cinquiĂšme jour Ă©taient vivantes, mes preuves et les vĂŽtres concordent, et la dĂ©cision porte sur votre Ă©quipe plus que sur le langage. Quand le quatriĂšme jour a rĂ©vĂ©lĂ© un cĆur limitĂ© par le CPU ou par les connexions, la conclusion honnĂȘte est un autre langage pour ce cĆur, avec Ă©ventuellement PHP autour. Et quand la semaine a Ă©tĂ© agrĂ©able mais que les sites dâoffres dâemploi de votre ville Ă©taient vides, ou que les chiffres de rĂ©tention de CoĂ»t de possession vous inquiĂštent plus que le runtime, câest une raison lĂ©gitime de dĂ©cliner. Je ne la contesterai pas, mĂȘme sous lâĂ©gide de la fondation du langage.
La limite : une semaine mesure une tranche, pas un produit, et lâĂ©quipe qui fait tourner la tranche nâest pas celle qui fera tourner le produit pendant dix ans. La semaine retire la rĂ©putation de la dĂ©cision, et laisse le jugement.
Ce que vous pouvez vĂ©rifier vous-mĂȘme
Tout ce qui prĂ©cĂšde. Si un chiffre de ces pages se rĂ©vĂšle faux quand vous le vĂ©rifiez, lâannexe des sources donne lâURL oĂč vit le bon, et le dĂ©pĂŽt derriĂšre ce livre accepte les corrections. Câest lâarrangement que vous devez attendre de tout document qui rĂ©clame votre temps.
Annexes
Trois sections de référence ferment ce livre, et chacune existe pour que vous puissiez vérifier plutÎt que croire.
A - Sources liste chaque chiffre utilisĂ© dans le livre, chapitre par chapitre, avec lâĂ©diteur, lâURL, la date Ă laquelle la donnĂ©e se rapporte et la date de sa derniĂšre vĂ©rification. Elle se termine par les chiffres que jâai refusĂ©s, et pourquoi.
B - Les versions de PHP, 2015 Ă 2026 donne la date de sortie, la fenĂȘtre de support et les changements marquants de chaque version, de PHP 7.0 Ă PHP 8.5, pour quâun chiffre sur « PHP 8 » puisse ĂȘtre situĂ© dans le temps.
C - Glossaire dĂ©finit les termes que jâemploie et que vous pouvez ne pas connaĂźtre si vous venez dâun autre Ă©cosystĂšme.
A - Sources
Chaque chiffre utilisĂ© dans le livre, chapitre par chapitre, avec son Ă©diteur, la date Ă laquelle la donnĂ©e se rapporte, et lâURL. « VĂ©rifié » est la date Ă laquelle la page a Ă©tĂ© lue pour la derniĂšre fois pour cette Ă©dition. Quand une source est un fournisseur, une auto-dĂ©claration ou un benchmark synthĂ©tique, lâentrĂ©e le dit, comme le chapitre lâa fait. Quand un chapitre cite un document que le livre nâa pas pu lire directement, lâentrĂ©e le dit aussi.
Les graphiques sont générés à partir des fichiers de données de charts/data/, dont chacun répÚte sa source, et les tables brutes TechEmpower utilisées par les chapitres 3 et 4 sont stockées en CSV dans charts/raw/.
Comment lire ce livre
- Historique des versions de PHP et fonctionnalités citées : pages de versions et changelogs de php.net, vérifiés le 17 septembre 2026. https://www.php.net/releases/
- La PHP Foundation salariant des dĂ©veloppeurs du cĆur depuis 2021 : annonce JetBrains, 22 novembre 2021. https://blog.jetbrains.com/phpstorm/2021/11/the-php-foundation/
Empreinte
- Part des sites web par langage cÎté serveur (PHP 69,9 %, JavaScript 7,5, Ruby 7,1, Java 5,4, Scala 5,0, ASP.NET 4,2, Python 1,1) : W3Techs, données du 17 septembre 2026. https://w3techs.com/technologies/overview/programming_language
- Part historique par année, valeurs au 1er janvier (PHP 80,6 % en 2015, 75,2 en 2025, 72,4 en 2026) : tendances historiques W3Techs, vérifiées le 17 septembre 2026. https://w3techs.com/technologies/history_overview/programming_language/ms/y
- JavaScript dépassant Ruby comme deuxiÚme langage cÎté serveur : W3Techs « technology fact of the day », 27 juillet 2026. https://w3techs.com/
- Méthodologie W3Techs (échantillon de plus de 20 millions de sites, un site par domaine, domaines redirigés exclus, mises à jour quotidiennes) : vérifiée le 17 septembre 2026. https://w3techs.com/technologies
- WordPress 40,2 % de tous les sites web et 58,8 % du marché des CMS ; Joomla 1,1, Drupal 0,6, PrestaShop 0,5, TYPO3 0,3 ; 31,5 % des sites sans CMS détecté : W3Techs, 17 septembre 2026. https://w3techs.com/technologies/overview/content_management
- WooCommerce 8,0 % de tous les sites web, 47,7 % des systĂšmes dâe-commerce : W3Techs, 17 septembre 2026. https://w3techs.com/technologies/details/cm-woocommerce
- Moodle 146âŻ634 sites enregistrĂ©s et 531 millions dâutilisateurs (sites auto-enregistrĂ©s seulement) : stats.moodle.org, vĂ©rifiĂ© le 17 septembre 2026. https://stats.moodle.org/
- Nextcloud « 500K+ servers » : Nextcloud, bilan 2025, 11 décembre 2025. https://nextcloud.com/blog/nextcloud-2025-wrap-up/
- Drupal 470âŻ795 sites dĂ©clarant leur version : statistiques dâusage de drupal.org, semaine du 6 septembre 2026. https://www.drupal.org/project/usage/drupal
- PrestaShop prĂšs de 250âŻ000 sites et plus de 22 milliards dâeuros de ventes en 2024 (auto-dĂ©clarĂ©) : prestashop.com, vĂ©rifiĂ© le 17 septembre 2026. https://prestashop.com/about-us/
- Shopware sur 115 des 1âŻ000 plus grandes boutiques B2C allemandes (Ă©tude EHI 2025) : Shopware, 10 janvier 2025. https://www.shopware.com/en/news/shopware-is-the-market-leader-among-ecommerce-platforms-in-germany/
- Matomo « more than 1.4 million websites » : Matomo, 1er septembre 2026. https://matomo.org/blog/2026/09/matomo-launches-reseller-partner-programme/
- Wikimedia 19,4 milliards de pages vues par mois : états financiers audités de la Wikimedia Foundation, exercice 2023 à 2024. https://upload.wikimedia.org/wikipedia/foundation/f/f6/Wikimedia_Foundation_2024_Audited_Financial_Statements.pdf
- Production Wikimedia sur PHP 8.3 depuis le 25 novembre 2025 : Phabricator T360995, résolu le 18 décembre 2025. https://phabricator.wikimedia.org/T360995
- Migration Wikimedia vers PHP 8.5 prévue pour fin 2026 : Phabricator T413223, créé le 19 décembre 2025. https://phabricator.wikimedia.org/T413223
- Fin de HHVM en production chez Wikimedia : Phabricator T176370, résolu le 23 novembre 2019. https://phabricator.wikimedia.org/T176370
- Wikimedia 800âŻ000 requĂȘtes par seconde en bordure et sept centres de donnĂ©es : Wikimedia Foundation, 26 novembre 2025. https://wikimediafoundation.org/news/2025/11/26/how-does-the-wikimedia-foundation-use-donations-to-wikipedia/
- Automattic : Tumblr et WordPress « run on PHP primarily » : automattic.com, vérifié le 17 septembre 2026. https://automattic.com/work-with-us/tumblr-migration/
- WordPress VIP 2âŻ400 milliards de requĂȘtes par an et 22 milliards la nuit de lâĂ©lection de 2024 (page marketing, CDN inclus) : wpvip.com, vĂ©rifiĂ© le 17 septembre 2026. https://wpvip.com/capabilities/performance/
- Les ingĂ©nieurs dâEtsy « primarily code in PHP and JavaScript » : careers.etsy.com, vĂ©rifiĂ© le 17 septembre 2026. https://careers.etsy.com/engineering
- Etsy sur PHP 7 en 2016 : conférence « Deploying PHP 7 », PHP Conference Philippines, 13 octobre 2016. https://talks.php.net/ph16
- ExĂ©cuteur de jobs et monolithe PHP de Mailchimp : blog dĂ©veloppeurs de Mailchimp, « Computers are the easy part », non datĂ©, vĂ©rifiĂ© le 17 septembre 2026. https://mailchimp.com/developer/blog/computers-are-the-easy-part/ Les offres dâemploi sur jobs.intuit.com demandant PHP, 2025 Ă 2026, ont Ă©tĂ© lues mais expirent et nâont pas pu ĂȘtre archivĂ©es ; le chapitre sâappuie sur le billet de blog.
- Badoo trois millions de lignes de PHP, des centaines de serveurs, un million de dollars économisés : Bumble Tech, 7 février 2017. https://medium.com/bumble-tech/how-badoo-saved-one-million-dollars-switching-to-php7-fcbda94ad3ae
- Sites web de la Commission europĂ©enne sur Drupal : les mĂ©tadonnĂ©es generator de commission.europa.eu dĂ©clarent Drupal 11, vĂ©rifiĂ© le 17 septembre 2026. Le chiffre de 770 sites en ligne vient dâune prĂ©sentation du personnel de la Commission Ă Drupal4Gov EU, 29 janvier 2026, telle que rapportĂ©e par des participants ; les diapositives nâont pas Ă©tĂ© trouvĂ©es en ligne et le chiffre nâest pas confirmĂ© par une publication de la Commission. https://drunomics.com/en/blog/drupal4gov-eu-2026-how-drupal-powers-european-governments-247
- Maison-Blanche sur WordPress VIP avec autorisation FedRAMP Moderate : wpvip.com, mars 2025. https://wpvip.com/blog/fedramp-moderate/
- Le Government Site Builder allemand sur TYPO3, plus de 80 administrations et 250 sites : ITZBund et typo3.com, vérifiés le 17 septembre 2026. https://www.itzbund.de/DE/itloesungen/standardloesungen/gsb/gsb.html
- GovCMS plus de 370 sites pour 115 agences : govcms.gov.au, 2025, tel que cité par The PHP Foundation, 2 septembre 2026. https://thephp.foundation/blog/2026/09/02/digital-sovereignty-is-written-in-php/
- LocalGov Drupal 77 sites de collectivités : localgovdrupal.org, vérifié le 17 septembre 2026. https://localgovdrupal.org/
- HHVM mettant fin à la prise en charge de PHP : hhvm.com, 12 septembre 2018 et 11 février 2019. https://hhvm.com/blog/2018/09/12/end-of-php-support-future-of-hack.html et https://hhvm.com/blog/2019/02/11/hhvm-4.0.0.html
- Slack sur Hack, environ cinq millions de lignes : Slack Engineering, 14 avril 2020 et 8 février 2023. https://slack.engineering/hacklang-at-slack-a-better-php/ et https://slack.engineering/hakana-taking-hack-seriously/
- Réécriture de Zalando en Java en 2010 : tĂ©moignage dâun ancien ingĂ©nieur de Zalando, 3 mars 2020. https://srcco.de/posts/one-decade-in-zalando-tech.html
- Passage de Trivago de PHP à TypeScript : blog technique de trivago, 16 mai 2022. https://tech.trivago.com/post/2022-05-16-warp-a-web-application-rewrite-project
- Dailymotion « gradually reducing PHP », nouveaux dĂ©veloppements en Go, Java et Python : offre dâemploi « Senior Backend Software Engineer, Video Platform », lue le 17 septembre 2026 (les offres expirent). https://jobs.smartrecruiters.com/Dailymotion/744000136260231-senior-backend-software-engineer-video-platform-full-remote-from-france- Usage historique : blog Symfony, 18 fĂ©vrier 2011.
- Migration de BlaBlaCar « from a PHP/Symfony stack towards a Java/JS-dominated one » : offre dâemploi « Software Engineer, Backend », lue le 17 septembre 2026 (les offres expirent). https://jobs.smartrecruiters.com/BlaBlaCar/743999670001836-software-engineer-backend Usage historique : SymfonyCon Paris, 4 dĂ©cembre 2015.
- Chiffres de lâenquĂȘte dĂ©veloppeurs (PHP 19,1 % des dĂ©veloppeurs professionnels, 12e) : Stack Overflow Developer Survey 2025, menĂ©e de mai Ă juin 2025, 49âŻ009 rĂ©ponses. https://survey.stackoverflow.co/2025/technology
- JetBrains 17 % dâutilisateurs (13e langage), 9 % en langage principal (9e), « long-term decline » : JetBrains State of Developer Ecosystem 2025, 24âŻ534 rĂ©pondants, menĂ©e dâavril Ă juin 2025. https://devecosystem-2025.jetbrains.com/
- 58 % des dĂ©veloppeurs PHP ne prĂ©voyant pas de migrer : JetBrains, The State of PHP 2025, octobre 2025, 1âŻ720 rĂ©pondants. https://blog.jetbrains.com/phpstorm/2025/10/state-of-php-2025/
- PHP sixiÚme langage par contributeurs mensuels : GitHub Octoverse 2025, 28 octobre 2025. https://github.blog/news-insights/octoverse/octoverse-a-new-developer-joins-github-every-second-as-ai-leads-typescript-to-1/
- PHP quatriÚme, à égalité avec C# : classement des langages RedMonk, janvier 2026, publié le 14 avril 2026. https://redmonk.com/sogrady/2026/04/14/language-rankings-1-26/
- PHP 14e Ă 1,04Â %Â : index TIOBE, septembre 2026. https://www.tiobe.com/tiobe-index/
Le runtime
- ModÚle de processus et configuration de PHP-FPM : manuel php.net, vérifié le 17 septembre 2026. https://www.php.net/manual/en/install.fpm.php
- OPcache : manuel php.net, vérifié le 17 septembre 2026. https://www.php.net/manual/en/book.opcache.php
- Chiffres du préchargement (30 % et 50 % sur deux pages hello-world de frameworks, « will likely be lower ») : RFC Preloading, wiki.php.net, 2018, acceptée 48 voix contre 0. https://wiki.php.net/rfc/preload
- JIT : « about 3 times better performance on synthetic benchmarks », « typical application performance is on par with PHP 7.4 » : php.net, annonce de la version PHP 8.0. https://www.php.net/releases/8.0/en.php
- JIT sur WordPress, 326 contre 315 requĂȘtes par seconde : RFC JIT, wiki.php.net, 2019. https://wiki.php.net/rfc/jit
- JIT dĂ©sactivĂ© par dĂ©faut depuis PHP 8.4 : php.net, configuration dâOPcache,
opcache.jit. https://www.php.net/manual/en/opcache.configuration.php - FrankenPHP sous lâorganisation php depuis le 8 juin 2025Â : The PHP Foundation, 15 mai et 8 juin 2025. https://thephp.foundation/blog/2025/05/15/frankenphp/ et https://thephp.foundation/blog/2025/06/08/php-30/
- Mode worker de FrankenPHP, « not originally designed for long-running processes », rĂ©glage du nombre maximal de requĂȘtes : documentation frankenphp.dev, vĂ©rifiĂ©e le 17 septembre 2026. https://frankenphp.dev/docs/worker/
- RoadRunner : roadrunner.dev, vérifié le 17 septembre 2026. https://roadrunner.dev/
- Swoole et OpenSwoole : openswoole.com et github.com/swoole/swoole-src, vérifiés le 17 septembre 2026.
- FrankenPHP en mode classique contre PHP-FPM, 18âŻ403 contre 18âŻ478 requĂȘtes par seconde, p99 0,9 ms, machine virtuelle Ă huit vCPU : Tideways, 23 septembre 2025 (indĂ©pendant des deux projets). https://tideways.com/profiler/blog/testing-if-franken-php-classic-mode-is-faster-and-more-scalable-than-php-fpm
- Symfony sous PHP-FPM, FrankenPHP et Swoole sur le test Fortunes : TechEmpower Round 23, voir la section suivante.
- CoĂ»t dâun processus nu (2 Mo de tas, 33 Mo rĂ©sidents, 20 ms) : mesurĂ© par lâauteur sur PHP 8.3.33 sous Linux, le 17 septembre 2026, avec
memory_get_usage(true)et/usr/bin/time -v. Reproductible avecphp -r ''. - Configuration des conteneurs Wikimedia (8 workers, 500 Mo dâOPcache, 768 Mo dâAPCu, 1 Ă 2 Go par conteneur)Â : Phabricator T280497, 2021. https://phabricator.wikimedia.org/T280497
Débit et latence
- « Execution time is often halved » : Zend (Rogue Wave), livre blanc « Maximize performance and mitigate risks with PHP 7 », 9 novembre 2017 ; un document de fournisseur sans méthodologie publiée. https://www.zend.com/sites/default/files/pdfs/rw-maximize-performance-mitigate-risks-wp-fnl-20171109.pdf
- Scores PHPBench de PHP 5.6.40 Ă 8.0-dev (288âŻ326 Ă 876âŻ420) : OpenBenchmarking.org, rĂ©sultat 2002269-VE-PHPBENCHM24 par Michael Larabel, fĂ©vrier 2020, Core i9-9900KS, Ubuntu 20.04. https://openbenchmarking.org/result/2002269-VE-PHPBENCHM24
- WordPress 146,09 requĂȘtes par seconde sur PHP 8.2 et 148,30 sur PHP 8.5, « incremental releases rarely produce large speed jumps » : Kinsta, 13 dĂ©cembre 2025 ; le benchmark dâun hĂ©bergeur, ApacheBench Ă 15 requĂȘtes concurrentes sur une machine Ă 30 vCPU, JIT dĂ©sactivĂ©. https://kinsta.com/blog/php-benchmarks/
- TechEmpower Round 23 : rĂ©sultats datĂ©s du 24 fĂ©vrier 2025, matĂ©riel dĂ©crit par TechEmpower comme « ProLiant DL360 Gen10 Plus, Intel Xeon Gold 6330 (56 cores), 64 GB, 40 Gbps Ethernet » ; le Xeon Gold 6330 a 28 cĆurs et 56 threads. Page de rĂ©sultats (rendue en JavaScript), lue avec un navigateur headless le 17 septembre 2026, et stockĂ©e en CSV dans
charts/raw/. https://www.techempower.com/benchmarks/#hw=ph&test=fortune§ion=data-r23 Annonce du round : https://www.techempower.com/blog/2025/03/17/framework-benchmarks-round-23/ - DĂ©pĂŽt TechEmpower archivé : github.com/TechEmpower/FrameworkBenchmarks, archivĂ©, dernier push le 24 mars 2026, lu via lâAPI GitHub le 17 septembre 2026.
- Objectifs de latence de Wikimedia (50 ms en médiane, 200 ms en p99 pour GET, 500 ms en p99 pour POST) : Wikimedia, « Backend performance practices », derniÚre modification le 27 juin 2026. https://wikitech.wikimedia.org/wiki/MediaWiki_Engineering/Guides/Backend_performance_practices
- Tableau de bord public de latence de Wikimedia : Grafana, « Backend Pageview Timing » ; la mĂ©diane dâenviron 170 millisecondes citĂ©e dans le chapitre y a Ă©tĂ© lue le 17 septembre 2026 vers 10 h 25 UTC, sur une heure, pour les requĂȘtes atteignant les serveurs dâapplication. https://grafana.wikimedia.org/d/QLtC93rMz/backend-pageview-timing
- Temps écoulés sur n-body, entrée mono-thread la plus rapide par langage (Rust 2,19 s, C# 3,13 s avec AOT natif, Java 6,02 s avec native image, Go 6,39 s, Node.js 8,55 s, Ruby 166,67 s, PHP 204,10 s, Python 360 s), spectral-norm (PHP 18,29 s écoulées pour 72,34 s de CPU ; Python 90,37 s ; Ruby 56,52 s ; Node.js 1,60 s) : The Computer Language Benchmarks Game, vérifié le 17 septembre 2026. https://benchmarksgame-team.pages.debian.net/benchmarksgame/performance/nbody.html et https://benchmarksgame-team.pages.debian.net/benchmarksgame/performance/spectralnorm.html
- Ligne de commande PHP utilisée par le Benchmarks Game (PHP 8.4.1,
opcache.jit_buffer_size=64M, aucun rĂ©glageopcache.jit) : page du programme n-body PHP #3. https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/nbody-php-3.html - Gain dâun facteur quatre du JIT sur Mandelbrot : RFC JIT, wiki.php.net, 2019. https://wiki.php.net/rfc/jit
Concurrence
- Fibers : « all fibers exist within a single thread », « blocking code ⊠will continue to block the entire process » : RFC Fibers, wiki.php.net, acceptée 50 voix contre 14, mars 2021. https://wiki.php.net/rfc/fibers
- AMPHP, ReactPHP : amphp.org et reactphp.org, vérifiés le 17 septembre 2026.
- Chiffres du test plaintext de TechEmpower Round 23 : voir la section précédente ; table brute dans
charts/raw/techempower-r23-plaintext.csv. - RFC « Concurrency Support in the PHP Engine » en discussion : index des RFC de wiki.php.net, vérifié le 17 septembre 2026. https://wiki.php.net/rfc La RFC antérieure « PHP True Async » affiche le statut Canceled, derniÚre modification le 22 juillet 2026. https://wiki.php.net/rfc/true_async
Le langage en 2026
- Chaque fonctionnalitĂ© et sa version : pages de versions de php.net et la fiche de faits du guide dâĂ©criture du livre polyglotte, tous deux vĂ©rifiĂ©s contre php.net. Les exemples ont Ă©tĂ© exĂ©cutĂ©s sous PHP 8.5 avec lâimage Docker officielle le 17 septembre 2026.
LâĂ©cosystĂšme
- Packagist 468âŻ099 paquets, 5,8 millions de versions, 199,6 milliards dâinstallations depuis 2012 ; sĂ©rie mensuelle dâinstallations (2,0 milliards en 2016 Ă 36,0 milliards en 2025 ; 2,58 milliards en aoĂ»t 2025 et 4,93 milliards en aoĂ»t 2026) : packagist.org/statistics, lu le 17 septembre 2026. https://packagist.org/statistics
composer auditintroduit dans Composer 2.4.0, 16 aoĂ»t 2022 : changelog de getcomposer.org. https://getcomposer.org/changelog/2.4.0 Documentation : https://getcomposer.org/doc/03-cli.md#audit- 1âŻ649 avis dans la base partagĂ©e : github.com/FriendsOfPHP/security-advisories, comptĂ©s le 17 septembre 2026.
- PIE 1.5, financé par la Sovereign Tech Agency : The PHP Foundation, rapport trimestriel T2 2026, 21 juillet 2026. https://thephp.foundation/blog/2026/07/21/quarterly-report-q2-2026/
- Projets construits sur les composants Symfony (auto-déclarés) : symfony.com/projects, vérifié le 17 septembre 2026. https://symfony.com/projects
- Laravel 64 %, WordPress 25 %, Symfony 23 % parmi les dĂ©veloppeurs PHP ; PHPUnit 50, PHPStan 36, PHP-CS-Fixer 30, Pest 17, 32 % nâĂ©crivant aucun test, 42 % nâutilisant aucun outil de qualité : JetBrains, The State of PHP 2025, octobre 2025. https://blog.jetbrains.com/phpstorm/2025/10/state-of-php-2025/
- 14 PSR acceptées, PER Coding Style 3.1 : php-fig.org, vérifié le 17 septembre 2026. https://www.php-fig.org/psr/ et https://www.php-fig.org/per/coding-style/
- Tags de version signés depuis avril 2012 : page des clés GPG de php.net. https://www.php.net/gpg-keys.php
Gouvernance et pérennité
- Processus RFC et vote (majorité des deux tiers, deux semaines de discussion, deux semaines de vote, qui vote) : wiki.php.net, « How to create an RFC » et « Voting ». https://wiki.php.net/rfc/howto et https://wiki.php.net/rfc/voting
- RFC refusées : Nullable Intersection Types (12 contre 26, août 2021) https://wiki.php.net/rfc/nullable_intersection_types ; Short Closures 2.0 (27 contre 16, refusée, juillet 2022) https://wiki.php.net/rfc/auto-capture-closure ; Asymmetric Visibility v1 (14 contre 12, janvier 2023) https://wiki.php.net/rfc/asymmetric-visibility et v2 (24 contre 7, août 2024) https://wiki.php.net/rfc/asymmetric-visibility-v2 ; Nested Classes (2 contre 20, mai 2025) https://wiki.php.net/rfc/short-and-inner-classes
- Nombre de RFC par version (31 pour 8.4, 19 pour 8.5, 29 pour 8.6 en septembre 2026)Â : index des RFC de php.watch, une source secondaire. https://php.watch/rfcs
- Dates de sortie de chaque version : archive des versions et changelogs de php.net, vérifiés le 17 septembre 2026. https://www.php.net/releases/ et https://www.php.net/ChangeLog-8.php
- Politique de support et fenĂȘtres en cours : php.net, pages des versions maintenues et de fin de vie, vĂ©rifiĂ©es le 17 septembre 2026. https://www.php.net/supported-versions.php et https://www.php.net/eol.php
- Mise Ă jour du cycle de publication (support de sĂ©curitĂ© prolongĂ©, fenĂȘtres alignĂ©es sur le 31 dĂ©cembre ; votes 31 contre 0 et 33 contre 0) : RFC, wiki.php.net, acceptĂ©e en avril 2024. https://wiki.php.net/rfc/release_cycle_update
- Calendrier de PHP 8.6 (GA le 19 novembre 2026, gel des fonctionnalités le 22 septembre 2026) : wiki.php.net, calendrier de publication de PHP 8.6. https://wiki.php.net/todo/php86
- ActivitĂ© de php-src (5âŻ316 commits et 171 auteurs sur master dans les douze mois prĂ©cĂ©dant le 17 septembre 2026 ; 1âŻ644 contributeurs) : mesurĂ©e sur un clone de github.com/php/php-src avec
git log, et lâAPI des contributeurs de GitHub, 17 septembre 2026. - Fondation de The PHP Foundation (22 novembre 2021, dix membres fondateurs, le dĂ©part qui lâa dĂ©clenchĂ©e) : JetBrains, 22 novembre 2021, et thephp.foundation. https://blog.jetbrains.com/phpstorm/2021/11/the-php-foundation/ et https://thephp.foundation/
- Rapports de transparence : 2022 (22 novembre 2022) https://thephp.foundation/blog/2022/11/22/transparency-and-impact-report-2022/ ; 2023 (26 février 2024) https://thephp.foundation/blog/2024/02/26/transparency-and-impact-report-2023/ ; 2024 (31 mars 2025) https://thephp.foundation/blog/2025/03/31/transparency-and-impact-report-2024/ ; 2025 (27 mai 2026) https://thephp.foundation/blog/2026/05/27/impact-and-transparency-report-2025/
- Structure (treize ingénieurs, directeur exécutif, conseil de dix membres) : thephp.foundation/structure, vérifié le 17 septembre 2026. https://thephp.foundation/structure/
- Contributions cumulĂ©es par sponsor (Automattic 762âŻ500 dollars, JetBrains 476âŻ670, total 3âŻ368âŻ941) : opencollective.com/phpfoundation, lu le 17 septembre 2026. https://opencollective.com/phpfoundation
- Subventions de la Sovereign Tech Agency (205âŻ000 euros en 2023 ; 223âŻ680 euros en 2025) : sovereign.tech. https://www.sovereign.tech/tech/php et https://www.sovereign.tech/tech/php-2025
- Subvention Alpha-Omega et Ecosystem Security Team : The PHP Foundation, 18 mai 2026. https://thephp.foundation/blog/2026/05/18/announcing-ecosystem-security-team/
- Politique de sécurité et classification : politique de sécurité de github.com/php/php-src et github.com/php/policies. https://github.com/php/php-src/security/policy et https://github.com/php/policies/blob/main/security-classification.rst
- RĂ©sultats de lâaudit externe (27 problĂšmes, 17 avec des implications de sĂ©curitĂ©, 3 de gravitĂ© haute) : The PHP Foundation, 10 avril 2025. https://thephp.foundation/blog/2025/04/10/php-core-security-audit-results/
- Nombre de CVE par année de publication (8, 7, 18, 13, 14) : API NVD, produit
cpe:2.3:a:php:php, interrogée le 17 septembre 2026. https://nvd.nist.gov/ Avis GitHub pour php-src : https://github.com/php/php-src/security/advisories
Coût de possession
- Usage Stack Overflow 2025 (JavaScript 68,8 %, Python 54,8, TypeScript 48,8, C# 29,9, Java 29,6, PHP 19,1, Go 17,4, Rust 14,5, Ruby 6,9 parmi les développeurs professionnels) et chiffres « admired » (Rust 72,4, TypeScript 58,0, Go 56,5, Python 56,4, C# 55,8, JavaScript 46,8, Ruby 44,3, Java 41,8, PHP 38,9) : Stack Overflow Developer Survey 2025. https://survey.stackoverflow.co/2025/technology
- Salaire mĂ©dian par langage (PHP 49âŻ586 dollars, deuxiĂšme plus bas sur cinquante) : Stack Overflow Developer Survey 2024, « Top paying technologies ». https://survey.stackoverflow.co/2024/technology#top-paying-technologies
- 613 offres dâemploi permanentes au Royaume-Uni citant PHP sur les six mois prĂ©cĂ©dant le 17 septembre 2026, 404 un an plus tĂŽt, mĂ©diane 48âŻ676 livres : IT Jobs Watch, un agrĂ©gateur britannique, secondaire. https://www.itjobswatch.co.uk/jobs/uk/php.do
- Badoo un million de dollars économisés : Bumble Tech, 7 février 2017, comme dans Empreinte.
- Cadence de mise Ă niveau de Wikimedia : passage de PHP 7.4 Ă 8.1 annoncĂ© sur wikitech-l le 17 mars 2025 et achevĂ© le mĂȘme mois ; 8.1 Ă 8.3 achevĂ© le 25 novembre 2025 (Phabricator T360995) ; 8.5 prĂ©vu pour fin 2026 (Phabricator T413223).
- Versions de PHP par population : Packagist php-statistics, août 2026 https://packagist.org/php-statistics ; API de statistiques de wordpress.org, lue le 17 septembre 2026 https://api.wordpress.org/stats/php/1.0/ ; versions de PHP selon W3Techs, 17 septembre 2026 https://w3techs.com/technologies/details/pl-php
- Fin du support de sécurité de PHP 7.4 (28 novembre 2022) et de PHP 5.6 (31 décembre 2018) : page de fin de vie de php.net. https://www.php.net/eol.php
LĂ oĂč PHP est le mauvais choix
- Tous les chiffres sont repris des chapitres ci-dessus et portent les mĂȘmes sources.
Non utilisés, et pourquoi
Chiffres qui circulent sur PHP et que le livre a laissĂ©s de cĂŽtĂ© parce quâaucune source primaire nâa pu ĂȘtre trouvĂ©e, ou parce que la source primaire les contredit :
- « Spotify sert 600âŻ000 requĂȘtes par seconde avec Symfony » : un chiffre de trafic global repris par des blogs dâagences ; la seule source primaire est une confĂ©rence de 2015 sur le site spotify.com.
- « Etsy est repassĂ© de HHVM Ă PHP 7 en 2019 ou 2020 » : Etsy Ă©tait sur PHP 7 en 2016 ; HHVM nâa jamais Ă©tĂ© utilisĂ© que sur son cluster dâAPI.
- « Laravel est utilisé par OpenAI, Apple, Nike, la NASA » : une affirmation sur laravel.com sans source par entreprise.
- « Adobe Commerce a traitĂ© 6,2 milliards de dollars lors du Black Friday 2024 » : trouvĂ© seulement sur des agrĂ©gateurs tiers ; les propres communiquĂ©s dâAdobe donnent des chiffres pour lâensemble de lâe-commerce amĂ©ricain mesurĂ© par Adobe Analytics.
- « Mercedes-Benz sponsorise The PHP Foundation » : absent de la liste des sponsors de la fondation.
- « PHP 8 est trois fois plus rapide que PHP 7 » : le chiffre concerne des benchmarks synthĂ©tiques et vient de la RFC JIT ; la mĂȘme page dit que les applications typiques sont au niveau de PHP 7.4.
- Le « million de lignes de PHP » de Vimeo (dĂ©cembre 2020) : lâarticle nâest plus en ligne ; lâorigine de Psalm chez Vimeo est la seule affirmation que le livre conserve.
- Tout chiffre sur le nombre de dĂ©veloppeurs PHP dans le monde : le dernier chiffre primaire trouvĂ© est 7,3 millions au troisiĂšme trimestre 2021 (SlashData), et rien de plus rĂ©cent nâa pu ĂȘtre rattachĂ© Ă une page primaire.
B - Les versions de PHP, 2015 Ă 2026
Chaque version a sa section ci-dessous, avec sa date de sortie, sa fenĂȘtre de support et ses changements marquants. Les dates viennent de php.net (pages des versions maintenues, des fins de vie et des changelogs, vĂ©rifiĂ©es le 17 septembre 2026). Le support actif couvre les corrections de bugs et les correctifs de sĂ©curitĂ©, le support de sĂ©curitĂ© les correctifs de sĂ©curitĂ© seulement. Depuis la mise Ă jour du cycle de publication votĂ©e en 2024, les deux fenĂȘtres se terminent le 31 dĂ©cembre de leur derniĂšre annĂ©e.
| Version | Sortie | Support actif jusquâau | Support de sĂ©curitĂ© jusquâau |
|---|---|---|---|
| PHP 5.6 | 28 août 2014 | 19 janv. 2017 | 31 déc. 2018 |
| PHP 7.0 | 3 déc. 2015 | 3 déc. 2017 | 10 janv. 2019 |
| PHP 7.1 | 1er déc. 2016 | 1er déc. 2018 | 1er déc. 2019 |
| PHP 7.2 | 30 nov. 2017 | 30 nov. 2019 | 30 nov. 2020 |
| PHP 7.3 | 6 déc. 2018 | 6 déc. 2020 | 6 déc. 2021 |
| PHP 7.4 | 28 nov. 2019 | 28 nov. 2021 | 28 nov. 2022 |
| PHP 8.0 | 26 nov. 2020 | 26 nov. 2022 | 26 nov. 2023 |
| PHP 8.1 | 25 nov. 2021 | 25 nov. 2023 | 31 déc. 2025 |
| PHP 8.2 | 8 déc. 2022 | 31 déc. 2024 | 31 déc. 2026 |
| PHP 8.3 | 23 nov. 2023 | 31 déc. 2025 | 31 déc. 2027 |
| PHP 8.4 | 21 nov. 2024 | 31 déc. 2026 | 31 déc. 2028 |
| PHP 8.5 | 20 nov. 2025 | 31 déc. 2027 | 31 déc. 2029 |
Ce quâil faut retenir du tableau, ce sont onze versions annuelles consĂ©cutives, chacune sortie entre le 20 novembre et le 8 dĂ©cembre. Le calendrier de la suivante paraĂźt sur wiki.php.net des mois Ă lâavance, avec ses dates de gel des fonctionnalitĂ©s et de release candidate.
PHP 7.0, décembre 2015
- Nouveau moteur, avec une forte rĂ©duction de lâusage mĂ©moire et, sur le travail propre de lâinterprĂ©teur, Ă peu prĂšs deux fois la vitesse de PHP 5.6 ; voir DĂ©bit et latence pour lâaffirmation de lâĂ©diteur et la mesure synthĂ©tique indĂ©pendante, avec leurs rĂ©serves.
- Déclarations de types scalaires (
int,float,string,bool) pour les paramÚtres, et déclarations de types de retour. declare(strict_types=1).- Opérateur de fusion null
??, opérateur spaceship<=>. - Classes anonymes.
- Les erreurs du moteur deviennent des exceptions (hiérarchie
Error), si bien quâune erreur fatale peut ĂȘtre attrapĂ©e. - Suppression des fonctions
mysql_*, des fonctionsereg_*et des constructeurs Ă la PHP 4.
PHP 7.1 Ă 7.4, 2016 Ă 2019
- 7.1Â : types nullables (
?int), type de retourvoid,iterable, visibilité des constantes de classe. - 7.2 : type
object, hachage de mots de passe Argon2, Libsodium dans le cĆur. - 7.3Â : syntaxe heredoc assouplie,
is_countable(), erreurs JSON sous forme dâexceptions. - 7.4 : propriĂ©tĂ©s typĂ©es, fonctions flĂ©chĂ©es (
fn), préchargement OPcache, interface de fonctions étrangÚres (FFI), opérateur??=, retours covariants et paramÚtres contravariants.
PHP 8.0, novembre 2020
- Arguments nommés :
str_pad(string: 'a', length: 3). - Attributs :
#[Route('/home')], des métadonnées structurées lues par réflexion. - Promotion de propriétés dans le constructeur :
public function __construct(private int $x) {}. - Types union :
int|string $id. - Expression
match : comparaison stricte, pas de fallthrough, exhaustive. - Opérateur nullsafe :
$user?->address?->city. mixedetstaticcomme types.throwcomme expression.str_contains(),str_starts_with(),str_ends_with().- Interface
Stringable,WeakMap. - Compilateur JIT, Ă lâintĂ©rieur dâOPcache.
- Comparaisons chaßne-nombre assainies :
0 == 'foo'vautfalse. - Les fonctions internes lĂšvent
TypeErroretValueErrorau lieu dâĂ©mettre un avertissement et de renvoyernulloufalse.
PHP 8.1, novembre 2021
- ĂnumĂ©rations, pures et adossĂ©es.
- Propriétés
readonly. - Syntaxe de callable de premiÚre classe :
strlen(...). - Fibers : des coroutines à pile, la brique de base des bibliothÚques asynchrones.
newdans les initialiseurs.- Types intersection purs :
Countable&Traversable. - Type de retour
never, constantes de classefinal,array_is_list(), notation octale explicite.
PHP 8.2, décembre 2022
- Classes
readonly. - Types en forme normale disjonctive :
(A&B)|null. - Types
true,falseetnullautonomes. - Propriétés dynamiques dépréciées ;
#[\AllowDynamicProperties]rĂ©autorise une classe. #[\SensitiveParameter]pour masquer un argument dans les traces dâappel.- Constantes dans les traits,
Random\Randomizer.
PHP 8.3, novembre 2023
- Constantes de classe typées.
- Attribut
#[\Override] : le moteur vĂ©rifie quâune mĂ©thode parente existe. json_validate().- AccĂšs dynamique aux constantes de classe :
Foo::{$name}. - Les propriétés
readonlypeuvent ĂȘtre rĂ©initialisĂ©es dans__clone().
PHP 8.4, novembre 2024
- Hooks de propriété : la logique
getetsetdĂ©clarĂ©e sur la propriĂ©tĂ© elle-mĂȘme. - VisibilitĂ© asymĂ©trique :
public private(set) int $x. new Foo()->bar()sans parenthÚses englobantes.- Objets paresseux via la réflexion (
newLazyGhost(),newLazyProxy()). - Attribut
#[\Deprecated]. array_find(),array_find_key(),array_any(),array_all().mb_trim()et consorts,mb_ucfirst(),mb_lcfirst().- Nouvelle extension DOM avec un analyseur HTML5 (
Dom\HTMLDocument). - API objet pour BCMath (
BcMath\Number), sous-classes PDO par pilote (Pdo\Sqlite,Pdo\Mysql,Pdo\Pgsql). - Types de paramÚtres implicitement nullables dépréciés.
PHP 8.5, novembre 2025
- Opérateur pipe :
$value |> trim(...) |> strtoupper(...). cloneavec mise à jour de propriétés :clone($obj, ['prop' => $value]).- Attribut
#[\NoDiscard], avec le cast(void)pour le faire taire volontairement. array_first(),array_last().- Closures et callables de premiĂšre classe dans les expressions constantes (arguments dâattributs, valeurs par dĂ©faut, constantes).
- Attributs sur les constantes.
- Nouvelle extension
uri(Uri\Rfc3986\Uri,Uri\WhatWg\Url). - Les erreurs fatales incluent une trace dâappel.
get_error_handler(),get_exception_handler().- LâopĂ©rateur dâexĂ©cution shell entre accents graves est dĂ©prĂ©ciĂ©.
C - Glossaire
Les termes que jâemploie et que vous pouvez ne pas connaĂźtre si vous venez dâun autre Ă©cosystĂšme, dans lâordre alphabĂ©tique des termes anglais.
Active support (support actif). Les deux premiĂšres annĂ©es dâune branche de PHP, pendant lesquelles les bugs et les failles de sĂ©curitĂ© sont corrigĂ©s dans des versions de correction mensuelles. Suivent deux annĂ©es de support de sĂ©curitĂ©, avec des correctifs de sĂ©curitĂ© seulement. Voir Gouvernance et pĂ©rennitĂ©.
Composer. Le gestionnaire de dĂ©pendances de lâĂ©cosystĂšme PHP, comparable Ă npm, pip ou Maven. Il lit composer.json, rĂ©sout les versions, Ă©crit composer.lock et gĂ©nĂšre lâautoloader qui fait correspondre les noms de classes aux fichiers.
Fiber. Une coroutine Ă pile, ajoutĂ©e dans PHP 8.1 : une fonction qui peut se suspendre elle-mĂȘme et ĂȘtre reprise plus tard par qui la dĂ©tient. Le langage fournit le mĂ©canisme, rien de plus, et lâordonnancement revient aux bibliothĂšques. Voir Concurrence.
FrankenPHP. Un serveur dâapplication pour PHP, Ă©crit en Go au-dessus du serveur web Caddy. Il exĂ©cute PHP soit dans le mode classique dâun processus par requĂȘte, soit dans un mode worker qui garde lâapplication dĂ©marrĂ©e entre les requĂȘtes. Voir Le runtime.
Hack et HHVM. Hack est un langage qui a divergĂ© de PHP chez Facebook en 2014, et HHVM est sa machine virtuelle. HHVM a abandonnĂ© la prise en charge de PHP lui-mĂȘme en 2019. Les organisations qui font tourner Hack ne font pas tourner PHP, et je ne les compte pas comme utilisatrices de PHP.
JIT. Le compilateur Ă la volĂ©e livrĂ© Ă lâintĂ©rieur dâOPcache depuis PHP 8.0, qui compile les chemins de code chauds en code machine. Il profite bien plus au code limitĂ© par le CPU quâaux requĂȘtes web ordinaires, et je le rappelle partout oĂč un chiffre JIT apparaĂźt.
NTS et ZTS. Les builds non-thread-safe et Zend-thread-safe de lâinterprĂ©teur. Le build standard est NTS, parce que le modĂšle par processus nâa jamais eu besoin de threads. Les builds ZTS existent pour lâusage embarquĂ© et pour lâextension parallel.
OPcache. Lâextension qui garde la forme compilĂ©e de chaque fichier PHP en mĂ©moire partagĂ©e, si bien quâun fichier est analysĂ© et compilĂ© une fois plutĂŽt quâĂ chaque requĂȘte. Elle est standard en production depuis PHP 5.5.
p50, p95, p99. Les centiles dâune distribution de latence : le temps de rĂ©ponse sous lequel 50, 95 ou 99 % des requĂȘtes se terminent. Un benchmark qui ne rapporte que la moyenne cache la queue de distribution, et câest pourquoi je prĂ©fĂšre les sources qui publient des centiles.
Packagist. Le registre public de paquets que Composer utilise par défaut, comparable à npmjs.com ou PyPI.
PER Coding Style. Le standard de style de code maintenu par le PHP-FIG, successeur de PSR-12. Des outils tels que PHP-CS-Fixer et PHP_CodeSniffer le font respecter.
PHP-FIG. Le PHP Framework Interoperability Group, qui publie les standards PSR pour que les bibliothĂšques dâauteurs diffĂ©rents sâemboĂźtent.
PHP-FPM. Le FastCGI Process Manager, la façon standard dâexĂ©cuter PHP derriĂšre un serveur web. Il entretient un pool de processus worker, chacun traitant une requĂȘte Ă la fois.
Preloading (prĂ©chargement). Une fonctionnalitĂ© dâOPcache (PHP 7.4) qui compile une liste de fichiers une fois au dĂ©marrage et les garde liĂ©s en mĂ©moire, si bien quâaucune classe nâa besoin dâautoloading pendant une requĂȘte.
PSR. PHP Standards Recommendation, un standard dâinteropĂ©rabilitĂ© numĂ©rotĂ© publiĂ© par le PHP-FIG : PSR-4 pour lâautoloading, PSR-3 pour la journalisation, PSR-7 pour les messages HTTP, et ainsi de suite.
Rector. Un outil qui réécrit le code PHP automatiquement : il fait monter la syntaxe dâune version Ă la suivante, applique des refactorings et supprime les appels dĂ©prĂ©ciĂ©s. Les Ă©quipes sâen servent pour les montĂ©es de version Ă grande Ă©chelle.
RFC. Request for Comments, le document par lequel tout changement du langage est proposé, discuté sur la liste de diffusion internals et soumis au vote. Un changement du langage requiert une majorité des deux tiers. Voir Gouvernance et pérennité.
RoadRunner. Un serveur dâapplication pour PHP Ă©crit en Go. Il garde des processus worker en vie et leur transmet les requĂȘtes par un protocole, si bien que lâapplication est dĂ©marrĂ©e une fois plutĂŽt quâĂ chaque requĂȘte.
Shared-nothing. Le modĂšle dâexĂ©cution dans lequel chaque requĂȘte dĂ©marre avec une mĂ©moire vierge, sâexĂ©cute, rĂ©pond et est jetĂ©e, sans rien partager avec la requĂȘte prĂ©cĂ©dente ni la suivante. La plupart des propriĂ©tĂ©s opĂ©rationnelles de PHP en dĂ©coulent. Voir Le runtime.
Static analysis (analyse statique). Lire le code sans lâexĂ©cuter, pour y trouver les erreurs de type et dâautres dĂ©fauts. PHPStan et Psalm sont les deux analyseurs de lâĂ©cosystĂšme PHP, et tous deux comprennent une syntaxe de types en docblock plus riche que celle du langage lui-mĂȘme.
Swoole et OpenSwoole. Une extension en C et son fork. Chacune donne Ă PHP une boucle dâĂ©vĂ©nements, des coroutines et un serveur HTTP intĂ©grĂ©, pour les charges de travail qui ont besoin de nombreuses connexions concurrentes dans un seul processus.
TechEmpower Framework Benchmarks. Une suite de benchmarks publique, exĂ©cutĂ©e en continu, qui compare des centaines de frameworks web de tous langages sur un jeu de tests fixe (sĂ©rialisation JSON, requĂȘtes de base de donnĂ©es simples et multiples, rendu HTML « fortunes », plaintext). Je la cite avec son numĂ©ro de round, son matĂ©riel et le test, et je dis ce que chaque test mesure.
W3Techs. Une sociĂ©tĂ© dâenquĂȘtes sur le web qui publie lâusage des technologies cĂŽtĂ© serveur sur un Ă©chantillon de plus de vingt millions de sites. Ses chiffres ne comptent que les sites dont le langage peut ĂȘtre dĂ©tectĂ©, ce qui les biaise dâune maniĂšre que je prĂ©cise quand je les utilise.
Worker mode (mode worker). Une façon dâexĂ©cuter PHP dans laquelle lâapplication est dĂ©marrĂ©e une fois et gardĂ©e en mĂ©moire, chaque processus worker traitant de nombreuses requĂȘtes Ă la suite. FrankenPHP et RoadRunner le proposent, entre autres. Il supprime le coĂ»t de dĂ©marrage par requĂȘte, au prix de la garantie shared-nothing.