Aller au contenu

Linux Nouveauté

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/2026Alpha 1, 2, 3sorties
13/08/2026Bêta 1 et gel souple des fonctionnalités (tous les votes de RFC terminés)sortie
27/08, 10/09/2026Bêta 2, 3sorties
22/09/2026Gel strict des fonctionnalitéspassé
24/09/2026RC2 (la RC1 a été sautée)sortie
08/10, 21/10/2026RC3, RC4sorties
05/11/2026RC5à venir
19/11/2026Sortie 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, ?) ou add(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 = true pour 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\Watcher et StreamPollHandle pour surveiller des flux.
  • Erreurs de flux : stream_last_errors(), stream_clear_errors() et nouvelles classes StreamError / 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 : constructeurs UriBuilder et UrlBuilder.
  • pack() / unpack() : modificateurs d'ordre des octets (< et >) ; JSON : position de l'erreur dans les messages ; cURL : CURLOPT_SEEKFUNCTION et 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 QUERY et ne reflète plus l'en-tête Host.

Dépréciations à anticiper

  • return dans un bloc finally, retour de valeur depuis __construct() / __destruct() ;
  • fonctions mb_ereg* et mb_split() (bibliothèque Oniguruma non maintenue, retrait prévu en PHP 9.0 : utiliser PCRE avec le modificateur u) ;
  • metaphone(), is_double(), is_long(), is_integer(), doubleval(), 3e argument de define(), 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, is et _ comme identifiants, constante de classe nommée namespace, fonction nommée readonly.

Changements incompatibles à tester

  • Le saut de page (\f) est supprimé par défaut par trim(), rtrim() et ltrim().
  • Plusieurs fonctions lèvent désormais une ValueError (octets NUL dans les noms de fichiers ou arguments comme getenv(), valeurs hors limites pour sleep(), usleep(), number_format(), indicateurs invalides pour array_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() retournent false si l'écriture finale échoue.
  • Mémoire saturée : PHP appelle abort() (code de sortie 134, core dump possible) au lieu de exit(1).
  • Binaires Windows : Visual Studio 2026, libxml2 2.15.3 (DOMDocument::$documentURI devient 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.gbpecfa4e pour 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.6 dans le tracker de sécurité Debian au 23/10/2026 (la 8.5 y est suivie sous php8.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 pour mb_ereg*, trim() et les return dans finally.
  • 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

À lire aussi