PHP 8.3 doit sortir dans les prochaines semaines, et sa phase de release candidate est déjà disponible pour qui souhaite tester ses projets en avance. Chaque montée de version majeure de PHP s’accompagne d’un lot de fonctions dépréciées, parfois supprimées, et l’expérience des montées précédentes montre qu’une extension WordPress ancienne peut receler des dépendances à ces fonctions bien plus profondément liées à la sécurité qu’il n’y paraît au premier abord.
Sur un projet client audité en amont de cette montée de version, quatre fonctions dépréciées ont été identifiées dans une seule extension métier vieille d’une dizaine d’années, dont deux directement liées à des vérifications de sécurité qui, en cas d’échec silencieux plutôt que d’erreur bloquante, pourraient laisser passer une entrée qui aurait dû être rejetée. Voici la checklist utilisée pour cet audit, transposable à tout projet qui prépare sa compatibilité avec PHP 8.3.
Pourquoi une dépréciation peut devenir un problème de sécurité
Une fonction dépréciée en PHP ne cesse pas immédiatement de fonctionner : elle déclenche généralement un avertissement E_DEPRECATED, souvent masqué en production où l’affichage des erreurs est désactivé par convention. Le risque ne vient donc pas d’un plantage visible, mais d’un changement silencieux de comportement à une version ultérieure, ou d’un comportement déjà légèrement différent qui affaiblit une vérification sans qu’aucune erreur ne remonte à l’équipe technique.
- Une fonction de validation qui retourne désormais
nullau lieu defalsedans un cas limite peut passer un testif ( ! $resultat )comme valide alors qu’elle signalait un échec. - Un comportement de type dépendant du contexte d’appel (typage implicite modifié) peut changer subtilement le résultat d’une comparaison utilisée dans un contrôle d’accès.
- Une extension qui masque ses avertissements avec un
@devant chaque appel de fonction dépréciée rend ce risque totalement invisible sans audit dédié.
La checklist d’audit avant montée vers PHP 8.3

- Lister les fonctions dépréciées ou supprimées annoncées pour PHP 8.3 à partir de la documentation officielle des migrations publiée sur php.net, en priorisant celles liées à la manipulation de chaînes, de tableaux et à la sérialisation.
- Rechercher chaque fonction dans le code des extensions du projet, y compris les extensions tierces non maintenues activement, à l’aide d’un simple
greprécursif sur le répertoirewp-content/plugins. - Activer l’affichage complet des erreurs sur un environnement de recette dédié, avec
error_reporting( E_ALL )etdisplay_errorsactivé, pour faire remonter chaque avertissementE_DEPRECATEDréellement déclenché en usage normal du site. - Prioriser les fonctions liées à une logique de sécurité : validation d’entrée, comparaison de hachages, vérification de type avant traitement d’une donnée sensible.
- Tester chaque parcours critique (connexion, formulaire de contact, paiement) sur l’environnement de recette avec PHP 8.3 avant toute bascule en production.
Un exemple concret rencontré durant l’audit
function verifier_jeton_legacy( $jeton_recu, $jeton_attendu ) {
if ( create_function( '', 'return true;' ) ) { // fonction supprimée
return strcmp( $jeton_recu, $jeton_attendu ) === 0;
}
return false;
}
Ce code, retrouvé tel quel dans l’extension auditée, combinait deux problèmes distincts : create_function(), supprimée depuis PHP 8.0, aurait déjà dû être retirée avant même l’audit PHP 8.3, et la comparaison de jeton via strcmp() n’est de toute façon pas une comparaison à temps constant adaptée à un contexte de sécurité. L’audit a permis de remplacer l’ensemble par une vérification moderne utilisant hash_equals(), résistante aux attaques par mesure de temps de réponse.
Distinguer dépréciation et suppression
La checklist distingue systématiquement deux catégories, dont le traitement diffère :
- Fonctions dépréciées : elles continuent de fonctionner mais déclenchent un avertissement ; leur remplacement peut être planifié sans urgence absolue, mais doit figurer sur la feuille de route.
- Fonctions supprimées : leur appel provoque une erreur fatale bloquante ; leur détection avant la montée de version est impérative, sous peine de site inaccessible dès la mise à jour de PHP.
Une dépréciation qui ne casse rien aujourd’hui reste une dette technique à traiter avant qu’elle ne devienne, à la version suivante, une suppression qui casse tout d’un coup.
Le cas particulier des extensions abandonnées
Sur ce projet, l’extension concernée n’était plus maintenue par son auteur d’origine depuis plusieurs années. Ce constat a soulevé une question qui dépasse la seule compatibilité PHP 8.3 : une extension qui accumule des fonctions dépréciées sans mise à jour corrective est un signal d’alerte plus large sur la maintenance générale du projet, qui mérite d’être documenté et remonté à la décision, indépendamment du correctif ponctuel appliqué en urgence.
En résumé
Chaque montée de version majeure de PHP est l’occasion de réexaminer le code hérité d’un projet WordPress ancien, bien au-delà du seul objectif de compatibilité. L’audit préparatoire à PHP 8.3, mené avant sa sortie officielle grâce aux versions de test disponibles, permet de traiter ces dettes techniques à froid plutôt que dans l’urgence d’une panne de production le jour de la montée de version réelle.