Aller au contenu
Article

PHP 8 Drupal : assainir vos modules custom avant Drupal 11

6 min
Frise chronologique des dates clés pour la fin de vie de PHP 8.1 et des versions de Drupal 10, ainsi que la sortie de Drupal 12. PHP 8.1 fin de vie le 31 décembre 2025. Drupal 10.5.x fin de support en juin 2026. Drupal 10.6.x fin de support en décembre 2026. Drupal 10 fin de vie et Drupal 12 sortie…
Schéma DrupaLabs

Le 9 décembre 2026, Drupal 10 atteint sa fin de vie, la même semaine que la sortie de Drupal 12. Un module custom écrit avec des réflexes PHP 7 (types absents, tableaux à l'ancienne) continue de tourner sur un site Drupal 10 sans rien signaler. Il fonctionne, jusqu'au jour où vous montez de version et qu'il casse. Ce qui compte, c'est le temps qu'il reste pour auditer vos modules custom PHP 8 sous Drupal avant cette échéance.

Pourquoi l'horloge tourne : Drupal 10 en fin de vie le 9 décembre 2026

Drupal 10 atteint sa fin de vie le 9 décembre 2026, la même semaine que la sortie de Drupal 12. La version 10.6.0 est sa dernière version mineure : aucune nouvelle version de Drupal 10 ne sortira après cette date.

La fin de support de Drupal 10 ne tient pas en une seule date : le calendrier de sécurité se referme par étapes, avant même cette échéance finale. Le support de Drupal 10.4.x a déjà pris fin, celui de 10.5.x s'est arrêté en juin 2026, et celui de 10.6.x s'arrête en décembre 2026. Côté PHP, la branche 8.1 a atteint sa fin de vie complète le 31 décembre 2025 : plus aucun correctif, même de sécurité.

Ce qui fait perdre la couverture de sécurité d'un site, ce n'est pas la montée de version en elle-même. C'est l'absence de montée, quand la fenêtre de support se referme et que personne n'a préparé le code custom pour passer à la version suivante.

Ce que PHP 8 a changé dans le langage et qui touche le code custom

PHP 8 modifie profondément le langage. Il retire des fonctions et des syntaxes, et transforme certains avertissements en erreurs bloquantes. Un module Drupal écrit avec des réflexes PHP 7 peut hériter directement de ces changements.

PHP 8.0 : fonctions et syntaxes supprimées

PHP 8.0 a supprimé plusieurs éléments du langage : la fonction create_function(), la fonction each(), l'accès à un caractère d'une chaîne avec des accolades ($str{0}), et l'appel statique d'une méthode non statique. Plusieurs avertissements qui passaient auparavant sans bloquer l'exécution sont devenus des erreurs fatales. Un module custom qui utilise encore l'une de ces écritures ne se contente plus d'afficher un avertissement : il arrête la page.

PHP 8.2 : la dépréciation des propriétés dynamiques

PHP 8.2 déprécie la création de propriétés dynamiques : si votre code affecte une valeur à une propriété d'objet qui n'a pas été déclarée dans la classe, PHP émet désormais un avertissement de dépréciation, sauf si la classe porte l'attribut #[AllowDynamicProperties]. La classe stdClass reste exemptée. C'est un avertissement, pas une erreur bloquante : le code continue de fonctionner, mais chaque occurrence reste un point à corriger.

PHP 8.3 et 8.4 : des changements plus ciblés, à vérifier quand même

PHP 8.3 modifie le comportement de range() : il lève une TypeError si une borne est un objet, une ressource ou un tableau, et une ValueError si le pas est négatif sur une plage croissante. PHP 8.4 fait de même avec exit() et die() : ils appliquent désormais les coercitions de type usuelles et peuvent lever une TypeError quand on leur passe un type invalide.

Ces ruptures sont réelles, mais elles touchent une marche plus étroite du code custom Drupal typique que les changements de PHP 8.0 ou 8.2. Elles méritent une vérification ciblée, pas un audit complet.

Les versions de PHP qu'exige chaque version de Drupal

Aucune version supportée de Drupal n'accepte une branche PHP 7, y compris PHP 7.4, non supporté par PHP depuis novembre 2022. C'est un plancher, pas une nouveauté liée à PHP 8. Au-delà de ce plancher, les exigences montent à chaque version majeure :

Version de DrupalPHP minimum requisVersions PHP supportées Drupal 10.4 à 10.68.18.1, 8.2, 8.3, 8.4 Drupal 11.1 et 11.28.38.3, 8.4 Drupal 11.3 et 11.48.38.3, 8.4, 8.5 Drupal 12.08.58.5

Depuis Drupal 10.6, PHP 8.4 est la version recommandée, même si 8.1 reste la version minimum encore acceptée. Aucune version de Drupal 11 (11.1 à 11.4) ni Drupal 12.0 ne supporte PHP 8.1 ou 8.2. La migration Drupal 11 impose donc d'abandonner ces deux versions de PHP, pas seulement de les mettre à jour ; la même contrainte s'applique à Drupal 12.

Auditer son code avant de migrer : Upgrade Status et drupal-rector

Avant de lancer une montée de version majeure, l'outillage officiel de Drupal permet de savoir où se trouvent les points de friction, sans attendre qu'ils se révèlent en production.

Le module contrib Upgrade Status (drupal/upgrade_status) exécute des vérifications PHPStan sur votre code custom, contrôle que votre environnement répond aux exigences système de la prochaine version majeure, et s'intègre à Drush ainsi qu'à la CI GitLab. Il repère les dépréciations, mais ne corrige rien lui-même.

Pour la correction automatique, le projet complémentaire s'appelle Rector pour Drupal, le paquet Composer palantirnet/drupal-rector. Il automatise une partie de la mise à jour du code déprécié pour les montées de version de Drupal 8 à 11 : sa version 0.18.x couvre les dépréciations liées à Drupal 8 et 9, et commence à couvrir celles de Drupal 10.1 et au-delà. Upgrade Status signale les cas où palantirnet/drupal-rector peut générer un correctif ; à vous de lancer l'outil, puis de relire chaque changement avant de le valider.

Checklist avant la prochaine montée de version majeure

  1. Installez Upgrade Status et lancez l'analyse PHPStan sur l'ensemble de vos modules custom.
  2. Classez les dépréciations signalées, en commençant par celles liées à PHP 8.0 (fonctions et syntaxes supprimées), puis PHP 8.2 (propriétés dynamiques non déclarées).
  3. Lancez palantirnet/drupal-rector pour générer les correctifs automatiques disponibles, puis relisez chaque changement avant de le committer.
  4. Vérifiez manuellement les ruptures du cœur PHP, que l'analyse de dépréciations Drupal ne couvre pas nécessairement : le comportement de range() en PHP 8.3, celui de exit() et die() en PHP 8.4.
  5. Confirmez la version PHP cible de votre prochaine version Drupal en vous appuyant sur le tableau ci-dessus, avant de lancer la montée de version elle-même.
  6. Calez votre calendrier sur les échéances de fin de support plutôt que sur l'urgence du moment : le support de Drupal 10.6.x s'arrête en décembre 2026.

Questions fréquentes

Quelle version de PHP faut-il pour migrer vers Drupal 11 ?

Drupal 11.1 et 11.2 exigent PHP 8.3 au minimum, avec 8.3 et 8.4 comme versions supportées. Drupal 11.3 et 11.4 ajoutent PHP 8.5 à cette liste. Aucune de ces versions n'accepte PHP 8.1 ou 8.2.

Quand Drupal 10 perd-il son support de sécurité ?

Le support de Drupal 10.6.x, sa dernière branche mineure, s'arrête le 9 décembre 2026, la même semaine que la sortie de Drupal 12. Après cette date, aucun correctif de sécurité ne sera plus publié pour Drupal 10.

Comment repérer le code PHP 8 incompatible dans un module custom ?

Le module contrib Upgrade Status exécute une analyse PHPStan sur votre code et signale les dépréciations. Le paquet Composer palantirnet/drupal-rector génère ensuite une partie des correctifs, à relire avant de les valider.

Lancé avant décembre 2026, l'audit tient dans votre planning ; après, il passe en urgence. Si vous voulez savoir précisément où se situent vos modules custom sur cette échelle, avant de fixer une date de montée de version, demandez un diagnostic : nous l'examinons avec vous.

Demander un diagnostic

Un projet web en tête ?

Commençons par un diagnostic : ce qui vous ralentit, et par où commencer.

Demander un diagnostic

Newsletter

Restez dans la boucle deDrupaLabs.

Pas que du Drupal — tout ce qui touche à notre activité et à nos techniques, directement dans votre boîte mail.

Pas de spam. Désinscription possible à tout moment.

Suivez-nous