Où en est le support de PHP 5.6 et 7.0 ?
| Critère | PHP 5.6 | PHP 7.0 |
|---|---|---|
| Sortie | août 2014 | décembre 2015 |
| Fin des correctifs de bugs | janvier 2017 | janvier 2018 |
| Fin des correctifs de sécurité | décembre 2018 | janvier 2019 |
Statuts vérifiés le 08/11/2026 sur les pages officielles de version.
Les ruptures à traiter en premier
Le chemin de migration, étape par étape
Chaque version mineure de PHP a son guide de migration officiel ; on les applique dans l’ordre, avec la CI au vert entre deux étapes. Avant de lancer le chantier, auditer la dette technique avec Bear Scan chiffre la dette qui ralentira chaque étape.
Passer à PHP 7.0
- BloquantBeaucoup d'erreurs fatales deviennent des exceptions Error ; un set_exception_handler() typé Exception provoque une erreur fatale si une Error est levée.source
- BloquantRetrait de toutes les fonctions ext/mysql (mysql_*) : il faut migrer vers mysqli ou PDO.source
- BloquantRetrait des fonctions ereg* (remplacées par PCRE) et de preg_replace() avec le modificateur /e, à remplacer par preg_replace_callback().source
- À traiterLes erreurs de syntaxe lèvent ParseError : tout eval() doit gérer cette exception.source
- À traiterL'évaluation des variables indirectes passe en strict gauche-droite : $$foo['bar']['baz'] devient ($$foo)['bar']['baz'], à corriger avec des accolades.source
Extensions
- Extensions retirées : ereg, mssql, mysql et sybase_ct ; SAPI Apache 1 (apache, apache_hooks) et plusieurs SAPI obsolètes supprimés.source
- L'extension JSON est remplacée par JSOND : un nombre ne peut plus finir par un point (34.) et une chaîne vide n'est plus du JSON valide.source
Pièges rencontrés en migration
- foreach par valeur travaille sur une copie du tableau : les modifications faites pendant l'itération ne sont plus vues, ce qui change le comportement de boucles qui ajoutaient des éléments.source
- list() assigne désormais dans l'ordre de déclaration : list($a[], $a[], $a[]) inverse son résultat par rapport à PHP 5.source
Rector : LevelSetList::UP_TO_PHP_70
Ce que PHP 7.0 vous apporte
- 7.0 : Déclarations de types scalaires (int, float, string, bool), coercitives ou strictes via declare(strict_types=1), et types de retour.source
- 7.0 : Opérateur de coalescence nulle ?? et opérateur spaceship <=>.source
- 7.0 : Classes anonymes (new class), Closure::call() et unserialize() filtré par allowed_classes pour limiter l'injection d'objets.source
- 7.0 : Exceptions Error/Throwable : de nombreuses erreurs fatales deviennent interceptables, et intdiv() ainsi que random_int()/random_bytes() (CSPRNG) arrivent.source
Combien coûte cette migration ?
À partir de 1 500 € HT
Pour une migration Bear Upgrade livrée en Merge Requests, Rector tourne d’abord en dry-run sur les transformations mécaniques, Claude Code traite les cas que Rector ne couvre pas, puis un développeur senior relit chaque Merge Request. Votre équipe veut reprendre la main ensuite ? Pensez à former votre équipe à Claude Code. Exemple concret : la migration Symfony d’un e-commerce bordelais, et après la migration, la maintenance des versions garde le socle à jour.
Sur une base aussi ancienne, l’audit d’abord : Bear Scan mesure tests, dépendances abandonnées et code mort avant de fixer le prix de la migration.
Questions fréquentes
À traiter en premier : Beaucoup d'erreurs fatales deviennent des exceptions Error ; un set_exception_handler() typé Exception provoque une erreur fatale si une Error est levée (PHP 7.0) ; Retrait de toutes les fonctions ext/mysql (mysql_*) : il faut migrer vers mysqli ou PDO (PHP 7.0).
PHP 5.6 ne reçoit plus de correctifs de sécurité depuis décembre 2018.
En grande partie : le set LevelSetList::UP_TO_PHP_70 applique en une passe les transformations mécaniques jusqu’à PHP 7.0. Restent les changements de comportement (valeurs de retour, erreurs devenues fatales, extensions retirées), à couvrir par les tests et une relecture humaine.
Une migration Bear Upgrade démarre à 1 500 € HT ; le prix ferme est fixé au cadrage, après lecture du code et des dépendances.