PHP chez EGPHP

Tout ce que nous construisons commence par PHP.

Cela fait vingt-cinq ans, depuis PHP 4, que notre équipe écrit et fait tourner du PHP. Les serveurs, le panneau de contrôle et les sites dont nous nous occupons partent tous de là.

Fonctionne sur et construit avec
  • PHP
  • Laravel
  • NGINX
  • LiteSpeed
  • MySQL
  • MariaDB
  • PostgreSQL
  • Redis
  • Composer
Crédits des logos

Vingt-cinq ans, version après version

Nous n'avons pas découvert ces versions dans des articles. Nous avons fait passer de vrais sites par chacune d'elles, et chaque ligne ci-dessous est un changement que nous avons dû gérer sur un serveur en production.

  1. PHP 4 2000

    Sessions et tampon de sortie intégrés

    Le Zend Engine est arrivé, et les sessions comme la mise en tampon de sortie sont devenues partie intégrante du langage au lieu d'être des modules ajoutés. Toute une génération des premiers sites dynamiques a été écrite pour lui.

    • Zend Engine
    • session_start()
    • ob_start()
    Ce que cela a changé pour nous

    Là où notre équipe a commencé : des sites écrits à la main sur des serveurs mutualisés, avec register_globals encore activé.

  2. PHP 5.0 2004

    Un vrai modèle objet

    Le Zend Engine 2 a apporté des classes avec visibilité, des interfaces et des exceptions, des objets transmis par leur identifiant plutôt que copiés, ainsi que les extensions MySQLi et SimpleXML.

    • private
    • interface
    • try / catch
    • mysqli
    Ce que cela a changé pour nous

    Le code pouvait s'organiser en classes partagées par toute une équipe, et la base de données a reçu un pilote moderne.

  3. PHP 5.3 2009

    Espaces de noms et closures

    Espaces de noms, fonctions anonymes et résolution statique à la volée : le socle sur lequel Composer et l'écosystème de paquets partagés ont ensuite été construits.

    • namespace
    • function () use ()
    • static::
    Ce que cela a changé pour nous

    Des bibliothèques d'auteurs différents pouvaient enfin cohabiter dans un même projet sans conflit de noms.

  4. PHP 5.4 2012

    Traits, tableaux courts et grand ménage A cassé l'ancien code

    Les traits, la syntaxe courte [] pour les tableaux et un serveur de développement intégré, tandis que register_globals, les magic quotes et le safe mode disparaissaient pour de bon.

    • trait
    • [ ]
    • php -S
    Ce que cela a changé pour nous

    Les anciens sites qui dépendaient de register_globals ont cessé de fonctionner, et les mettre à niveau voulait d'abord dire les corriger.

  5. PHP 5.5 2013

    OPcache inclus d'office

    OPcache est arrivé avec PHP lui-même pour garder les scripts compilés en mémoire, aux côtés des générateurs et de password_hash().

    • opcache
    • yield
    • password_hash()
    Ce que cela a changé pour nous

    Le code compilé reste en mémoire au lieu d'être relu à chaque requête. C'est toujours le premier réglage que nous vérifions sur un serveur PHP.

  6. PHP 6 jamais sortie

    La version jamais sortie

    PHP 6 devait reposer sur des chaînes Unicode natives, et il a été abandonné. La version suivante a été numérotée 7 pour ne pas être confondue avec les livres et les plans écrits pour la 6.

  7. PHP 7.0 2015

    Le bond en vitesse A cassé l'ancien code

    Un moteur reconstruit, que le projet PHP présentait comme jusqu'à deux fois plus rapide que la 5.6 tout en consommant moins de mémoire, plus les déclarations de types scalaires et de types de retour, ?? et <=>.

    • int $id
    • : string
    • ??
    • <=>
    Ce que cela a changé pour nous

    Les anciennes fonctions mysql_* ont été supprimées, une raison fréquente pour laquelle un vieux site cassait lors de cette mise à niveau.

  8. PHP 7.4 2019

    Propriétés typées et préchargement

    Propriétés typées, fonctions fléchées, l'opérateur ??=, le préchargement OPcache et FFI.

    • public int $id
    • fn ($x) =>
    • ??=
    Ce que cela a changé pour nous

    La dernière version 7.x, celle sur laquelle beaucoup d'anciennes applications sont restées le plus longtemps : c'est pourquoi nous en faisons encore migrer des sites.

  9. PHP 8.0 2020

    JIT, attributs et arguments nommés A cassé l'ancien code

    Un compilateur JIT, les attributs, les arguments nommés, les types union, match, l'opérateur nullsafe ?-> et la promotion des propriétés du constructeur.

    • #[Attribute]
    • match
    • ?->
    • JIT
    Ce que cela a changé pour nous

    Beaucoup d'avertissements sont devenus des erreurs et les comparaisons entre chaînes et nombres ont changé : du code qui tournait sans bruit en 7.4 pouvait s'arrêter en 8.0.

  10. PHP 8.1 2021

    Énumérations, readonly et fibers

    Des énumérations natives, les propriétés readonly, les fibers, le type de retour never et la syntaxe callable de première classe.

    • enum
    • readonly
    • Fiber
    • never
    Ce que cela a changé pour nous

    Les fibers ont ouvert la voie aux bibliothèques PHP asynchrones sans changer le déroulement d'une requête ordinaire.

  11. PHP 8.2 2022

    Classes readonly, et un avertissement pour le vieux code

    Les classes readonly, les types DNF, true, false et null comme types autonomes, et une nouvelle extension Random.

    • readonly class
    • (A&B)|null
    • Random\Randomizer
    Ce que cela a changé pour nous

    Les propriétés dynamiques ont été dépréciées, et les anciens plugins ont rempli les journaux de notices jusqu'à leur mise à jour.

  12. PHP 8.3 2023

    Constantes typées et #[\Override]

    Les constantes de classe typées, l'attribut #[\Override], json_validate() et la récupération dynamique des constantes de classe.

    • const string
    • #[\Override]
    • json_validate()
    Ce que cela a changé pour nous

    Une version plus discrète, ce qui en fait une étape facile pour les sites déjà en 8.2.

  13. PHP 8.4 2024

    Hooks de propriété

    Les hooks de propriété, la visibilité asymétrique, les objets paresseux, un analyseur DOM compatible HTML5, et new MyClass()->method() sans les parenthèses supplémentaires.

    • get { }
    • public private(set)
    • Dom\HTMLDocument
    Ce que cela a changé pour nous

    Les getters et setters qui demandaient chacun une méthode appartiennent désormais à la propriété elle-même : il y a moins de code à maintenir.

  14. PHP 8.5 2025

    L'opérateur pipe Actuelle

    L'opérateur pipe |>, une extension URI intégrée, clone with, l'attribut #[\NoDiscard], array_first() et array_last(), et une trace d'appels sur les erreurs fatales.

    • |>
    • Uri\Rfc3986\Uri
    • clone($o, [ ])
    Ce que cela a changé pour nous

    La branche actuelle, celle sur laquelle nous démarrons les nouveaux sites quand leur code le permet.

Les années sont celles de la première sortie de chaque version, d'après l'historique officiel des versions du projet PHP.

Suivez une requête à travers le stack

Une page d'un site PHP traverse cinq couches à l'aller, et remonte par les cinq mêmes au retour. Nous nous occupons de chacune d'elles, et chacune a sa propre page.

  1. Le visiteur

    Un navigateur demande une page en HTTPS. Le certificat, le pare-feu et les règles placées devant le serveur décident d'abord si la requête a le droit d'entrer.

  2. Le serveur web

    Nginx ou LiteSpeed prend la connexion, sert lui-même les images et les fichiers, et ne transmet que le travail PHP au pool situé derrière.

  3. Le runtime PHP

    Des pools PHP-FPM, un par site, chacun sur la version de PHP dont son code a besoin, avec OPcache chaud et des workers dimensionnés pour le trafic.

  4. Votre code

    Un framework ou une plateforme prête à l'emploi transforme la requête en page : votre propre application Laravel, ou WordPress, Magento, Moodle et les autres.

  5. Les données

    MySQL ou MariaDB conserve les enregistrements, et Redis garde en mémoire ce qui est demandé encore et encore.

Sous les cinq

Le serveur lui-même

Nos propres serveurs, gérés par la même équipe, avec notre propre panneau de contrôle par-dessus.

Passer à un PHP plus récent sans mauvais réveil

Chaque site a son propre pool : un même serveur peut donc faire tourner plusieurs versions de PHP côte à côte, et chaque site migre quand son code est prêt, pas quand le serveur l'est.

  1. Nous listons ce que fait tourner chaque site

    Sa version de PHP, ses extensions, et les plugins ou paquets qui le retiennent.

  2. Une copie essaie la nouvelle version

    Le site est copié et exécuté sur la version suivante de PHP, et son journal d'erreurs est lu ligne par ligne.

  3. Nous corrigeons ce qui casse

    Les fonctions supprimées, les appels dépréciés et les plugins sans mise à jour sont corrigés ou remplacés.

  4. Un site à la fois

    Chaque site bascule seul vers son nouveau pool, et peut revenir en arrière immédiatement si quelque chose a été oublié.

php-fpmUn serveur, plusieurs versions
SitePHPPoolÉtat
shop.example.com 8.4 fpm-shop en ligne
blog.example.com 8.3 fpm-blog en ligne
crm.example.com 7.4 → 8.3 fpm-crm sur une copie
learn.example.com 8.3 fpm-learn en ligne
Un exemple de serveur

Quelles versions de PHP reçoivent encore des correctifs

Le projet PHP prend en charge chaque branche pendant quatre ans : deux ans de correctifs de bogues et de sécurité, puis deux ans de correctifs de sécurité seulement. Après, plus aucun correctif. Voici ce calendrier pour les versions de cette page.

  • Correctifs de bogues et de sécurité
  • Correctifs de sécurité seulement
  • Fin de vie dépassée
  • Aujourd'hui
  1. PHP 7.4 Fin de vie

    La version sur laquelle beaucoup d'anciennes applications sont restées le plus longtemps.

    Publiée
    2019-11-28
    Fin de vie
    2022-11-28
  2. PHP 8.0 Fin de vie
    Publiée
    2020-11-26
    Fin de vie
    2023-11-26
  3. PHP 8.1 Fin de vie
    Publiée
    2021-11-25
    Fin de vie
    2025-12-31
  4. PHP 8.2 Correctifs de sécurité seulement
    Publiée
    2022-12-08
    Correctifs de bogues jusqu'au
    2024-12-31
    Correctifs de sécurité jusqu'au
    2026-12-31
  5. PHP 8.3 Correctifs de sécurité seulement
    Publiée
    2023-11-23
    Correctifs de bogues jusqu'au
    2025-12-31
    Correctifs de sécurité jusqu'au
    2027-12-31
  6. PHP 8.4 Support actif

    Tourne sur notre hébergement, avec OPcache et JIT activés.

    Publiée
    2024-11-21
    Correctifs de bogues jusqu'au
    2026-12-31
    Correctifs de sécurité jusqu'au
    2028-12-31
  7. PHP 8.5 Support actif

    Là où nous démarrons les nouveaux sites quand leur code le permet.

    Publiée
    2025-11-20
    Correctifs de bogues jusqu'au
    2027-12-31
    Correctifs de sécurité jusqu'au
    2029-12-31

Les dates sont celles du projet PHP, tirées de ses pages sur les versions prises en charge et sur la fin de vie, vérifiées le 2026-09-29. php.net/supported-versions.php

La pile PHP, capacité par capacité

Tout ce qui figure sur cette carte est décrit sur une autre page de ce site. Chaque carte renvoie vers la page qui l'explique en détail.

Exécution

Comment PHP lui-même est exécuté pour chaque site.

  • Un pool par site

    Chaque site a son propre pool PHP-FPM : sa version, ses limites et ses workers n'appartiennent qu'à lui.

    Performances PHP
  • Version de PHP par site

    Choisie pour chaque site depuis le panneau EGPNL, de sorte qu'un serveur peut faire tourner plusieurs versions côte à côte.

    Panneau de contrôle EGPNL
  • OPcache

    Scripts compilés gardés en mémoire partagée, dimensionnés pour le site, avec le taux de réussite lu pour vérifier que rien n'est évincé.

    Performances PHP
  • JIT

    Transforme le code chaud en code machine. Il aide pour le travail gourmand en processeur et change peu de chose pour un site ordinaire qui attend sa base de données.

    Performances PHP
  • Préchargement

    Pour un framework, ses fichiers principaux sont chargés une fois au démarrage et gardés prêts. Un redémarrage fait partie du déploiement.

    Performances PHP

Outils

Ce que vous pouvez utiliser en ligne de commande et en arrière-plan.

  • Composer

    Prise en charge complète de Composer, avec un autoloader optimisé et sans paquets de développement sur le serveur.

    Hébergement
  • Workers de file d'attente en arrière-plan

    Les workers de file d'attente tournent sous Supervisor, si bien que les tâches lentes restent à l'écart de la page qu'un visiteur attend.

    Hébergement
  • Accès shell

    Accès SSH pour Composer et les autres travaux en ligne de commande sur les applications PHP.

    Hébergement
  • WP-CLI et Drush

    WP-CLI est préinstallé pour WordPress ; Drupal s'installe et se met à jour avec Composer et Drush.

    Plateformes PHP

Extensions et caches

Les modules que PHP charge et les caches en mémoire à côté.

  • Extensions gérées pour vous

    Installées et activées site par site depuis le panneau, plutôt que par des tickets de support.

    Pourquoi PHP
  • ionCube Loader

    Installé là où une plateforme en a besoin pour exécuter du code encodé, comme WHMCS.

    Plateformes PHP
  • APCu

    Un cache en mémoire pour des valeurs PHP, utilisé avec Redis pour la mise en cache et le verrouillage de fichiers sur des plateformes comme Nextcloud.

    Plateformes PHP
  • Redis

    Cache, sessions, files d'attente et verrous gardés en mémoire, sur un Redis qui n'est pas joignable depuis Internet.

    Bases de données

Données et serveur web

Où sont conservés les enregistrements et ce qui répond au visiteur.

  • MySQL et MariaDB

    Tables InnoDB gérées avec phpMyAdmin sur l'hébergement ; installées, réglées et surveillées sur les serveurs gérés.

    Bases de données
  • PostgreSQL

    Installé et réglé là où l'application l'exige, par exemple pour la comptabilité, l'ERP et les rapports.

    Bases de données
  • Nginx ou LiteSpeed

    Sert lui-même les images et les fichiers et ne transmet que le travail PHP au pool derrière lui.

    Pourquoi Nginx
  • HTTP/2 sur TLS

    Les pages sont servies en HTTP/2 avec TLS, et les certificats Let's Encrypt sont installés et renouvelés automatiquement.

    Hébergement

Confiez-nous votre PHP

Un ancien site qui a besoin d'un PHP plus récent, une plateforme à installer, ou un serveur pour faire tourner le tout. Chaque projet fait l'objet d'un devis après un court échange.

MickeyRépond en quelques secondes