PHP 8.6 : sortie prévue le 19 novembre 2026, planning des versions candidates et principales nouveautés
PHP 8.6 est en phase de versions candidates (RC4 sortie le 21/10) pour une sortie finale prévue le 19/11/2026. Au programme : application partielle de fonction, clamp(), API de scrutation, TLS 1.3 0-RTT, et plusieurs dépréciations (mb_ereg, return dans finally).
par Frédéric Vagner · publié le
- Produits
- PHP
- Source
- wiki.php.net ↗
Planning de sortie
Le calendrier officiel de PHP 8.6 est publié sur le wiki du projet (page « PHP 8.6 », objectif : sortie finale fin novembre ; les versions sont étiquetées le mardi et publiées le jeudi). Les dates peuvent encore changer selon l'avancement du développement.
| Date | Étape | État |
|---|---|---|
| 02/07, 16/07, 30/07/2026 | Alpha 1, 2, 3 | sorties |
| 13/08/2026 | Bêta 1 et gel souple des fonctionnalités (tous les votes de RFC terminés) | sortie |
| 27/08, 10/09/2026 | Bêta 2, 3 | sorties |
| 22/09/2026 | Gel strict des fonctionnalités | passé |
| 24/09/2026 | RC2 (la RC1 a été sautée) | sortie |
| 08/10, 21/10/2026 | RC3, RC4 | sorties |
| 05/11/2026 | RC5 | à venir |
| 19/11/2026 | Sortie finale (GA) | à venir |
Équipe de publication : Daniel Scherzer (vétéran), Matteo Beccati et Joe Ferguson. Les durées de support de la branche 8.6 ne sont pas encore publiées sur la page des versions supportées de php.net : à confirmer à la sortie (pour comparaison, PHP 8.5 : support actif jusqu'au 31/12/2027, sécurité jusqu'au 31/12/2029 d'après endoflife.date).
Principales nouveautés
Source : guide de migration « 8.5 vers 8.6 » du manuel PHP, qui peut encore bouger avant la sortie.
- Application partielle de fonction :
add(1, ?)ouadd(1, ...)crée une fonction anonyme qui attend les arguments manquants. - Valeurs par défaut pour les propriétés
readonly:public readonly int $timeout = 30;. clamp(): nouvelle fonction qui ramène une valeur dans un intervalle.- Objets dans des constantes : modification directe de
CONFIG->debug = truepour un objet stocké dans une constante. #[\Override]sur les constantes de classe et__debugInfo()autorisé sur les énumérations.- API de scrutation (polling) : classes
Io\Poll\Context,Io\Poll\WatcheretStreamPollHandlepour surveiller des flux. - Erreurs de flux :
stream_last_errors(),stream_clear_errors()et nouvelles classesStreamError/StreamException. - OpenSSL / TLS : reprise de session TLS pour les flux, clés pré-partagées (PSK) et données précoces TLS 1.3 (0-RTT) ; les binaires Windows officiels passent à OpenSSL 4.
- Date : classe
Time\Duration; URI : constructeursUriBuilderetUrlBuilder. - pack() / unpack() : modificateurs d'ordre des octets (
<et>) ; JSON : position de l'erreur dans les messages ; cURL :CURLOPT_SEEKFUNCTIONet clésize_delivered(libcurl 8.20 ou plus). - Sodium : fonctions ipcrypt et KEM (ML-KEM768, X-Wing) avec libsodium 1.0.22 ou plus ; GMP :
gmp_powm_sec(),gmp_prevprime(); Intl, SNMP, mysqli (mysqli_quote_string()), PDO_PGSQL (taille de bloc de lecture, libpq 17 ou plus). - Serveur de développement intégré : accepte la méthode HTTP
QUERYet ne reflète plus l'en-têteHost.
Dépréciations à anticiper
returndans un blocfinally, retour de valeur depuis__construct()/__destruct();- fonctions
mb_ereg*etmb_split()(bibliothèque Oniguruma non maintenue, retrait prévu en PHP 9.0 : utiliser PCRE avec le modificateuru) ; metaphone(),is_double(),is_long(),is_integer(),doubleval(), 3e argument dedefine(),mysqli_get_charset(),SORT_LOCALE_STRING;- objets passés à
array_walk(),array_walk_recursive(),http_build_query(); - plus de 16 filtres dans une URL
php://filter(défense contre les chaînes de filtres servant à passer d'une lecture de fichier à une exécution de code) ; - noms
let,iset_comme identifiants, constante de classe nomméenamespace, fonction nomméereadonly.
Changements incompatibles à tester
- Le saut de page (
\f) est supprimé par défaut partrim(),rtrim()etltrim(). - Plusieurs fonctions lèvent désormais une
ValueError(octets NUL dans les noms de fichiers ou arguments commegetenv(), valeurs hors limites poursleep(),usleep(),number_format(), indicateurs invalides pourarray_filter(),scandir()…). unpack(): un<ou>après un code de format est lu comme modificateur et plus comme début du nom de l'élément.base_convert(),bindec(),hexdec(),octdec()émettent une notice en cas de conversion imprécise ;fclose(),file_put_contents(),copy()retournentfalsesi l'écriture finale échoue.- Mémoire saturée : PHP appelle
abort()(code de sortie 134, core dump possible) au lieu deexit(1). - Binaires Windows : Visual Studio 2026, libxml2 2.15.3 (
DOMDocument::$documentURIdevient un chemin de fichier natif).
Disponibilité chez Debian, Plesk et les dépôts tiers
- Dépôt Sury (Debian / Ubuntu) : les paquets PHP 8.6 y sont déjà disponibles en 8.6.0 RC3 (par exemple
php8.6-common 8.6.0~rc3-1+0~20261012.3+debian13~1.gbpecfa4epour Debian 13 « trixie », construit le 12/10/2026 ; vérifié dans packages.sury.org le 23/10). Ils sont donc en retard sur php.net (RC4 sortie le 21/10) mais disponibles pour des tests. Attention : ce sont des paquets du dépôt tiers Sury, pas des paquets de Debian ; ne pas les installer en production. - Debian (dépôts officiels) : aucun paquet
php8.6dans le tracker de sécurité Debian au 23/10/2026 (la 8.5 y est suivie sousphp8.5). Les versions stables de Debian gardent leur version de PHP ; la 8.6 vient d'un dépôt tiers (Sury). - AlmaLinux / EL : le dépôt Remi propose PHP 8.6.0 RC4 pour EL9 (paquets
php-cli-8.6.0~RC4). - Plesk : aucune annonce de PHP 8.6 dans le journal des modifications de Plesk Obsidian au 23/10/2026 ; la date d'arrivée est à confirmer (les versions de PHP s'ajoutent après la sortie officielle).
Que faire ?
- Ne pas déployer les versions candidates en production : réserver un serveur de test pour la RC4, puis la RC5 (05/11).
- Lancer l'analyse de compatibilité des sites hébergés (
php -l, outils d'analyse statique, journaux de dépréciations) en particulier pourmb_ereg*,trim()et lesreturndansfinally. - Rappel de calendrier : PHP 8.2 ne reçoit plus de correctifs après le 31/12/2026 ; migrer vers 8.4 ou 8.5 sans attendre la 8.6.
Vérifier
php -v
php -d error_reporting=E_ALL -r 'echo PHP_VERSION, PHP_EOL;'
# Remi (EL9) : dnf module list php
# Débogage des dépréciations : error_reporting = E_ALL dans php.ini