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à.
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 |

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.