Monter en version PHP

Changer de version PHP sur votre hébergement Ethersys et vérifier que votre code est prêt

Une erreur, un problème ou une simple demande d'information ?
Vous pouvez nous contacter !

Pourquoi monter en version PHP ?

Chaque version de PHP n’est maintenue que pendant quelques années : une fois sa fin de vie atteinte, elle ne reçoit plus de correctif de sécurité. Rester sur une version obsolète expose votre site à des failles connues et vous prive des gains de performances des versions récentes.

Vous pouvez consulter les dates de fin de support de chaque version sur la page Supported Versions du site officiel.

Une montée de version n’est cependant pas anodine : chaque version supprime ou modifie certaines fonctionnalités, et un code qui fonctionnait parfaitement peut produire des erreurs. Il est donc conseillé de vérifier la compatibilité de votre code avant de changer de version, puis de tester votre site juste après.

Avant de commencer

  • faites une sauvegarde de vos fichiers et de votre base de données
  • si votre site utilise un CMS (WordPress, PrestaShop, Joomla…), mettez d’abord à jour le CMS, le thème et les modules ou extensions, puis vérifiez que la version de PHP visée est bien supportée par votre version du CMS
  • activez les logs PHP pour pouvoir repérer rapidement les erreurs après le changement
  • si vous avez compilé des extensions PECL, elles devront être recompilées pour la nouvelle version
  • si possible, testez d’abord la nouvelle version sur une copie de votre site (sous-domaine de test par exemple)

Vérifier que votre code est prêt

Deux outils libres permettent d’analyser votre code et de repérer ce qui posera problème avec la nouvelle version de PHP. Ils s’installent avec Composer, de préférence sur une copie de votre code (sur votre poste ou sur votre hébergement via SSH), et uniquement en dépendance de développement : ils n’ont pas vocation à rester sur votre site en production.

La commande composer est disponible directement en SSH sur votre hébergement Ethersys. Comme toute commande PHP en SSH, elle s’exécute avec la version de PHP par défaut du compte : pour utiliser une autre version, préfixez la commande avec PHP_VERSION (voir plus bas).

Ces outils sont surtout utiles pour votre code personnalisé (site développé sur mesure, thème ou module maison). Inutile de les lancer sur le cœur d’un CMS ou sur le dossier vendor/ : ces parties se mettent à jour via leurs propres mécanismes.

PHPCompatibility : repérer les incompatibilités

PHPCompatibility est un ensemble de règles pour l’outil d’analyse PHP_CodeSniffer. Il lit votre code sans le modifier ni l’exécuter et signale tout ce qui n’est pas compatible avec la ou les versions de PHP indiquées : fonctions supprimées, syntaxes obsolètes, extensions retirées, nouveaux mots réservés, etc.

La version stable 9 n’est plus mise à jour depuis 2019 et ne connaît pas les changements de PHP 8. Pour analyser une montée vers PHP 8.x, il faut utiliser la version 10 (encore en alpha au moment où nous écrivons ces lignes) :

composer require --dev "phpcompatibility/php-compatibility:^10.0@alpha"

Composer vous demandera peut-être d’autoriser le plugin dealerdirect/phpcodesniffer-composer-installer : répondez oui, c’est lui qui déclare automatiquement les règles PHPCompatibility auprès de PHP_CodeSniffer.

Lancez ensuite l’analyse en indiquant la version de PHP visée avec le paramètre testVersion, par exemple pour PHP 8.4 :

vendor/bin/phpcs -p . --standard=PHPCompatibility --runtime-set testVersion 8.4 --extensions=php --ignore=vendor/

Il est aussi possible d’indiquer une plage de versions, utile si votre code doit continuer à fonctionner sur l’ancienne version pendant la transition :

vendor/bin/phpcs -p . --standard=PHPCompatibility --runtime-set testVersion 7.4-8.4 --extensions=php --ignore=vendor/

Le rapport liste, fichier par fichier, les lignes concernées :

  • les ERROR correspondent à du code qui ne fonctionnera plus et doivent impérativement être corrigées
  • les WARNING signalent des fonctionnalités dépréciées : elles fonctionnent encore mais disparaîtront dans une version future

L’analyse étant purement statique, elle ne peut pas tout détecter (par exemple les comportements qui changent selon les données ou les appels de fonctions construits dynamiquement) : elle ne remplace pas un test du site.

Rector : corriger automatiquement le code

Rector va plus loin : il ne se contente pas de signaler les problèmes, il réécrit votre code pour l’adapter à une version de PHP donnée, à l’aide de règles de transformation regroupées par version (remplacement de fonctions supprimées, nouvelle syntaxe, ajout de types…).

Installez-le en dépendance de développement :

composer require --dev rector/rector

Lors du premier lancement de vendor/bin/rector, l’outil propose de créer un fichier de configuration rector.php à la racine du projet. Adaptez-le pour indiquer les dossiers à traiter et la version de PHP visée, par exemple :

<?php

use Rector\Config\RectorConfig;

return RectorConfig::configure()
    ->withPaths([
        __DIR__ . '/src',
    ])
    ->withPhpSets(php84: true);

Sans argument, withPhpSets() utilise la version de PHP déclarée dans la section require de votre fichier composer.json.

Commencez toujours par une simulation avec l’option –dry-run : Rector affiche alors les modifications qu’il propose, sous forme de différences, sans toucher à vos fichiers.

vendor/bin/rector process --dry-run

Une fois les modifications relues, appliquez-les :

vendor/bin/rector process

Rector modifiant directement vos fichiers, travaillez sur une copie ou dans un dépôt Git afin de pouvoir revenir en arrière, et relisez les changements avant de les mettre en production.

Quel outil choisir ?

Les deux outils sont complémentaires :

  • PHPCompatibility dresse l’état des lieux : il vous dit ce qui va casser, sans rien modifier
  • Rector fait le travail de correction automatiquement pour une bonne partie des cas

Une bonne méthode consiste à lancer PHPCompatibility pour mesurer l’ampleur du travail, à corriger avec Rector, puis à relancer PHPCompatibility pour vérifier ce qui reste à traiter à la main.

Changer de version PHP sur votre hébergement

Rendez-vous sur la page https://admin.ethersys.fr/ et connectez-vous à l’aide de votre adresse email et de son mot de passe.

Version par défaut du compte

La version par défaut s’applique aux sites configurés sur « version par défaut » ainsi qu’à la commande php utilisée en SSH et dans les tâches planifiées.

Rendez-vous dans la rubrique Avancé -> Environnement ou directement sur la page https://admin.ethersys.fr/environment/, choisissez la nouvelle version dans la liste Version de PHP de la partie PHP puis validez.

Les versions majeures utilisent automatiquement la dernière version mineure disponible, ce qui vous permet de bénéficier des mises à jour de sécurité sans intervention de votre part.

version de PHP par défaut

Vérifiez au passage le contenu du champ php.ini personnalisé : certaines directives ou extensions peuvent ne plus exister dans la nouvelle version.

Version d’un site en particulier

Il est aussi possible de choisir une version de PHP site par site, par exemple pour tester la nouvelle version sur un site de test avant de basculer le site principal.

Rendez-vous dans la rubrique Web -> Sites, cliquez sur l’icône de modification du site concerné, puis dans l’onglet Configuration, partie Configuration, choisissez la version souhaitée dans la liste Version de PHP et validez.

version de PHP d’un site

En SSH et dans les tâches planifiées

En SSH, la commande php (ainsi que composer et les outils lancés avec PHP) utilise la version par défaut définie dans Avancé -> Environnement.

Pour lancer une commande avec une autre version de PHP, préfixez-la avec la variable d’environnement PHP_VERSION suivie du numéro de version désiré, par exemple pour PHP 8.4 :

PHP_VERSION=8.4 php -v
PHP_VERSION=8.4 composer update

C’est pratique pour tester votre code ou vos outils d’analyse avec la nouvelle version avant de changer la version par défaut du compte.

Par défaut, une commande lancée en SSH n’utilise pas le php.ini propre à un site. Pour exécuter un script avec la configuration PHP d’un site, préfixez la commande avec la variable PHPRC pointant vers le fichier de configuration de ce site :

PHPRC=/home/[COMPTE]/admin/config/php/php-[ID_SITE].ini php script.php

Remplacez [COMPTE] par le nom de votre compte et [ID_SITE] par l’identifiant du site : il s’agit du numéro qui apparaît dans l’adresse de la page lorsque vous modifiez le site dans le panel (par exemple 226485). Les deux préfixes peuvent être combinés :

PHP_VERSION=8.4 PHPRC=/home/[COMPTE]/admin/config/php/php-226485.ini php script.php

Pensez aussi à vérifier les tâches planifiées qui appellent un script PHP, ainsi que les éventuelles dépendances installées avec Composer, qui peuvent nécessiter une mise à jour (composer update) avec la nouvelle version.

Après le changement

  • parcourez les pages principales de votre site et testez les fonctions importantes (formulaires, panier, paiement, espace client…)
  • consultez vos logs PHP pour repérer les erreurs et avertissements
  • en cas de problème bloquant, vous pouvez revenir à l’ancienne version de PHP de la même façon, le temps de corriger votre code

Et n’oubliez pas que chez Ethersys vous avez un support téléphonique humain qui peut vous accompagner dans cette montée de version, et c’est inclus dans votre abonnement !