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à.
PHP
Laravel
NGINX
LiteSpeed
MySQL
MariaDB
PostgreSQL
Redis
Composer
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.
-
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 Enginesession_start()ob_start()
Ce que cela a changé pour nousLà où notre équipe a commencé : des sites écrits à la main sur des serveurs mutualisés, avec register_globals encore activé.
-
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.
privateinterfacetry / catchmysqli
Ce que cela a changé pour nousLe code pouvait s'organiser en classes partagées par toute une équipe, et la base de données a reçu un pilote moderne.
-
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.
namespacefunction () use ()static::
Ce que cela a changé pour nousDes bibliothèques d'auteurs différents pouvaient enfin cohabiter dans un même projet sans conflit de noms.
-
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 nousLes anciens sites qui dépendaient de register_globals ont cessé de fonctionner, et les mettre à niveau voulait d'abord dire les corriger.
-
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().
opcacheyieldpassword_hash()
Ce que cela a changé pour nousLe 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.
-
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.
-
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 nousLes anciennes fonctions mysql_* ont été supprimées, une raison fréquente pour laquelle un vieux site cassait lors de cette mise à niveau.
-
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 $idfn ($x) =>??=
Ce que cela a changé pour nousLa 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.
-
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 nousBeaucoup 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.
-
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.
enumreadonlyFibernever
Ce que cela a changé pour nousLes fibers ont ouvert la voie aux bibliothèques PHP asynchrones sans changer le déroulement d'une requête ordinaire.
-
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)|nullRandom\Randomizer
Ce que cela a changé pour nousLes propriétés dynamiques ont été dépréciées, et les anciens plugins ont rempli les journaux de notices jusqu'à leur mise à jour.
-
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 nousUne version plus discrète, ce qui en fait une étape facile pour les sites déjà en 8.2.
-
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 nousLes 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.
-
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\Uriclone($o, [ ])
Ce que cela a changé pour nousLa 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.
-
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.
-
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.
-
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.
-
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.
-
Les données
MySQL ou MariaDB conserve les enregistrements, et Redis garde en mémoire ce qui est demandé encore et encore.
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.
Nous listons ce que fait tourner chaque site
Sa version de PHP, ses extensions, et les plugins ou paquets qui le retiennent.
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.
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.
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é.
| Site | PHP | Pool | É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 |
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
-
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
-
PHP 8.0 Fin de vie
- Publiée
- 2020-11-26
- Fin de vie
- 2023-11-26
-
PHP 8.1 Fin de vie
- Publiée
- 2021-11-25
- Fin de vie
- 2025-12-31
-
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
-
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
-
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
-
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.