PHP et Drupal : versions compatibles
Quelle version de PHP pour votre version de Drupal? Tableau de compatibilité et recommandations.
PHP est le moteur sur lequel tourne votre site Drupal. À chaque version, PHP gagne en performance, en sécurité et en robustesse, mais il abandonne aussi certaines fonctions et certains comportements hérités. Pour une organisation qui exploite un site Drupal en production, la question de la compatibilité entre la version de PHP et la version de Drupal n'est pas un détail technique : c'est un sujet de sécurité, de performance et de continuité de service. Une version de PHP trop ancienne expose le site à des failles non corrigées et ralentit chaque requête. Une version trop récente, mal anticipée, peut casser des modules ou du code custom.
La bonne nouvelle, c'est que la matrice de compatibilité PHP / Drupal est claire et bien documentée. En connaissant la version de Drupal que vous exploitez et la version de PHP qu'elle supporte, vous pouvez planifier vos mises à jour sereinement. Cet article présente le tableau de compatibilité, explique pourquoi il est important de garder PHP à jour, détaille comment mettre à jour PHP sans casser Drupal et passe en revue les comportements dépréciés entre versions de PHP qu'il faut anticiper.
Le tableau de compatibilité PHP / Drupal
Chaque version majeure de Drupal définit une fenêtre de versions PHP supportées. En dessous de la borne minimale, Drupal ne s'installe pas ou émet des avertissements bloquants. Au-dessus de la borne maximale testée, le comportement n'est pas garanti. Voici la matrice de référence pour les versions de Drupal couramment rencontrées en production.
| Version de Drupal | PHP minimum | PHP recommandé | PHP maximum supporté | Statut |
|---|---|---|---|---|
| Drupal 7 | PHP 5.6 | PHP 7.4 | PHP 7.4 | Fin de vie communautaire |
| Drupal 9 | PHP 7.3 | PHP 8.0 | PHP 8.1 | Fin de vie |
| Drupal 10 | PHP 8.1 | PHP 8.3 | PHP 8.3 | Maintenu |
| Drupal 11 | PHP 8.3 | PHP 8.3+ | PHP 8.4 | Version actuelle |
Quelques points méritent d'être soulignés. Drupal 7 ne dépasse pas PHP 7.4 : tenter de le faire tourner sur PHP 8 provoque des erreurs fatales, car le code de Drupal 7 utilise des constructions que PHP 8 ne tolère plus. Drupal 10 a rehaussé la borne minimale à PHP 8.1 et fonctionne idéalement sur PHP 8.3. Drupal 11, la version actuelle, exige PHP 8.3 au minimum et tire pleinement parti des améliorations de PHP 8.3 et 8.4.
Si votre site tourne encore sur Drupal 7 ou Drupal 9, la mise à niveau de PHP est indissociable d'une réflexion plus large sur la version de Drupal. Dans ce cas, le sujet relève autant de la migration Drupal que de la simple mise à jour de PHP, puisque ces versions sont en fin de vie et qu'on ne peut pas les pousser vers PHP 8.3 sans migrer le site lui-même.
Pourquoi garder PHP à jour
Maintenir PHP à une version récente n'est pas une coquetterie d'ingénieur. C'est une décision qui touche directement la sécurité, la performance et le coût de possession du site.
La sécurité d'abord. Chaque version de PHP reçoit des correctifs de sécurité pendant une durée limitée, généralement près de trois ans après sa sortie. Passé ce délai, les vulnérabilités découvertes ne sont plus corrigées. Un site sur une version de PHP non supportée est une cible : les failles publiées restent ouvertes indéfiniment. Garder PHP à jour, c'est s'assurer de recevoir les correctifs de sécurité au fil de l'eau.
La performance ensuite. Les gains de performance entre versions majeures de PHP sont significatifs. Le passage de PHP 7.4 à PHP 8.x apporte des améliorations notables grâce au compilateur JIT et à de nombreuses optimisations du moteur. Concrètement, sur un site Drupal, cela se traduit par des temps de réponse réduits, une consommation mémoire plus contenue et une capacité à encaisser davantage de trafic sur le même serveur. Pour un site à fort trafic, la différence est visible sur la facture d'hébergement.
La compatibilité avec l'écosystème enfin. Les modules Drupal récents, les bibliothèques Composer et les outils de développement ciblent les versions de PHP supportées. Rester sur une vieille version de PHP, c'est se couper progressivement de l'écosystème : impossible d'installer les dernières versions de certains modules, blocages lors des composer update, incompatibilités avec les outils de CI. La dette technique s'accumule et chaque mise à jour devient plus douloureuse.
Comment mettre à jour PHP sans casser Drupal
Mettre à jour PHP demande de la méthode. Une montée de version réalisée à l'aveugle en production est la meilleure façon de générer une panne. Voici une démarche éprouvée qui sécurise l'opération.
Étape 1 : vérifier la compatibilité de la version de Drupal. Avant tout, confirmez que votre version de Drupal supporte la version de PHP visée, en vous appuyant sur le tableau ci-dessus. Inutile de viser PHP 8.3 si le site tourne encore sur Drupal 9 : il faudra d'abord planifier la mise à niveau de Drupal.
Étape 2 : analyser le code custom et les modules contrib. C'est ici que se cachent la plupart des surprises. Le core de Drupal est testé sur les versions de PHP supportées, mais votre code custom et certains modules contrib peuvent utiliser des fonctions dépréciées. L'outil PHPCompatibility, couplé à PHP_CodeSniffer, analyse statiquement le code et signale les incompatibilités avant même de lancer le site.
# Installer les outils d'analyse de compatibilité PHP
composer require --dev phpcompatibility/php-compatibility
# Analyser le code custom pour une cible PHP 8.3
phpcs -p ./web/modules/custom \
--standard=PHPCompatibility \
--runtime-set testVersion 8.3
Étape 3 : tester sur un environnement isolé. Reproduisez la nouvelle version de PHP sur un environnement de staging ou un conteneur local avant de toucher à la production. Les environnements Docker comme DDEV permettent de basculer d'une version de PHP à l'autre en modifiant une seule ligne de configuration, ce qui rend ces tests rapides à mettre en place.
# Avec DDEV, changer la version de PHP du projet
ddev config --php-version=8.3
ddev restart
# Vérifier la version active et l'état du site
ddev exec php --version
ddev drush status
Étape 4 : valider avec des tests automatisés. Une suite de tests qui couvre les parcours critiques transforme la validation d'une montée de version PHP en opération de quelques minutes. C'est l'un des grands intérêts d'un socle de tests : il détecte immédiatement les régressions liées à un changement d'environnement.
Étape 5 : déployer progressivement. Mettez à jour PHP sur le serveur, videz les caches Drupal (drush cr), puis surveillez les logs (drush watchdog:show) durant les heures qui suivent. Une montée de version maîtrisée se déroule sans interruption visible pour les utilisateurs.
Cette démarche s'inscrit naturellement dans un cycle de maintenance Drupal régulier. Une organisation qui maintient son site de façon continue traverse les changements de version PHP par petits pas successifs, au lieu de subir une montée de version brutale et risquée tous les trois ou quatre ans.
Les fonctions et comportements dépréciés entre versions PHP
L'essentiel des risques lors d'une montée de version PHP vient des fonctions supprimées et des comportements modifiés. Connaître les principaux changements aide à anticiper ce qui peut casser.
De PHP 7.4 à PHP 8.0. C'est le saut le plus impactant. Les arguments passés dans un ordre incompatible, les erreurs auparavant silencieuses devenues des TypeError, la suppression de fonctions comme create_function() ou each() et le changement de comportement de l'opérateur de concaténation par rapport aux opérations arithmétiques. PHP 8.0 est aussi plus strict sur les types : du code qui tolérait des conversions implicites peut désormais lever des erreurs.
De PHP 8.0 à PHP 8.1. Introduction des enums et des propriétés en lecture seule, mais surtout durcissement autour des valeurs null passées à des fonctions internes : passer null à un paramètre non nullable génère une dépréciation. De nombreux modules ont dû être ajustés pour ce point précis, particulièrement fréquent dans le code Drupal plus ancien.
De PHP 8.1 à PHP 8.2. Dépréciation des propriétés dynamiques : une classe qui assigne une propriété non déclarée déclenche un avertissement. C'est un changement qui touche beaucoup de code custom historique. L'attribut #[\AllowDynamicProperties] permet une transition en douceur le temps de corriger les classes concernées.
De PHP 8.2 à PHP 8.3 et 8.4. Les évolutions sont plus incrémentales et moins susceptibles de casser du code existant. PHP 8.3 affine la gestion des constantes de classe typées et le clonage en lecture seule. PHP 8.4 poursuit le mouvement avec les hooks de propriétés. Pour un site Drupal sain, le passage vers ces versions est généralement le plus fluide de la série.
La règle générale : plus l'écart de versions est grand, plus il faut investir dans l'analyse préalable. Passer directement de PHP 7.4 à PHP 8.3 cumule les dépréciations de quatre versions successives. C'est faisable, mais cela demande une analyse statique sérieuse et une bonne couverture de tests.
Ce qu'il faut retenir
La compatibilité PHP / Drupal se résume à quelques repères simples : Drupal 7 plafonne à PHP 7.4, Drupal 10 vit confortablement entre PHP 8.1 et 8.3 et Drupal 11 démarre à PHP 8.3. Garder PHP à jour protège le site sur le plan de la sécurité, améliore les performances et préserve l'accès à l'écosystème. La mise à jour, elle, se mène avec méthode : vérifier la compatibilité de Drupal, analyser le code custom, tester sur un environnement isolé puis déployer progressivement.
L'erreur la plus coûteuse consiste à laisser PHP vieillir jusqu'à se retrouver bloqué sur une version en fin de vie, avec un site impossible à mettre à jour sans chantier lourd. À l'inverse, une organisation qui suit la cadence des versions transforme chaque montée de PHP en une opération de routine, intégrée à son cycle de maintenance.
Vous vous demandez sur quelle version de PHP tourne votre site ou comment planifier une montée de version sans risque? Parlons de votre projet : on établit ensemble un diagnostic et un plan adapté à votre stack.
Besoin d'aide avec Drupal ?
Nos développeurs seniors sont disponibles pour vos projets de migration, maintenance, refonte ou développement sur mesure.
Trouver un expert Drupal →Ce qu'on propose
- Migration vers Drupal 11
- Maintenance mensuelle sécurisée
- Renfort technique ponctuel
- Audit et optimisation