diff --git a/appendices/migration86.xml b/appendices/migration86.xml new file mode 100644 index 0000000000..06e3ac0152 --- /dev/null +++ b/appendices/migration86.xml @@ -0,0 +1,57 @@ + + + + Migration de PHP 8.5.x vers PHP 8.6.x + + + Cette nouvelle version mineure apporte un certain nombre de + nouvelles fonctionnalités et + quelques incompatibilités + qui devraient être testées avant de passer à une nouvelle version de PHP en + production. + + + + &manual.migration.seealso; + 7.1.x, + 7.2.x, + 7.3.x, + 7.4.x, + 8.0.x, + 8.1.x, + 8.2.x, + 8.3.x, + 8.4.x, + 8.5.x. + + + &appendices.migration86.new-features; + &appendices.migration86.new-classes; + &appendices.migration86.new-functions; + &appendices.migration86.constants; + &appendices.migration86.incompatible; + &appendices.migration86.deprecated; + &appendices.migration86.other-changes; + &appendices.migration86.windows-support; + + + diff --git a/appendices/migration86/constants.xml b/appendices/migration86/constants.xml new file mode 100644 index 0000000000..251151ee35 --- /dev/null +++ b/appendices/migration86/constants.xml @@ -0,0 +1,188 @@ + + + + Nouvelles constantes globales + + + Core + + + + ARRAY_FILTER_USE_VALUE + + + STREAM_CRYPTO_STATUS_NONE + + + STREAM_CRYPTO_STATUS_WANT_READ + + + STREAM_CRYPTO_STATUS_WANT_WRITE + + + + + + cURL + + + + CURLINFO_SIZE_DELIVERED (libcurl >= 8.20.0) + + + CURLOPT_SEEKFUNCTION + + + CURL_SEEKFUNC_OK + + + CURL_SEEKFUNC_FAIL + + + CURL_SEEKFUNC_CANTSEEK + + + CURL_READFUNC_ABORT + + + + + + MySQLi + + + + MYSQLI_OPT_COMPRESS + + + + + + OpenSSL + + + OPENSSL_RSA_PSS_SALTLEN_DIGEST + OPENSSL_RSA_PSS_SALTLEN_AUTO + OPENSSL_RSA_PSS_SALTLEN_MAX + + + + + Sockets + + + + TCP_USER_TIMEOUT (Linux uniquement) + + + AF_UNSPEC + + + EAI_BADFLAGS + + + EAI_NONAME + + + EAI_AGAIN + + + EAI_FAIL + + + EAI_NODATA + + + EAI_FAMILY + + + EAI_SOCKTYPE + + + EAI_SERVICE + + + EAI_ADDRFAMILY + + + EAI_SYSTEM + + + EAI_OVERFLOW + + + EAI_INPROGRESS + + + EAI_CANCELED + + + EAI_NOTCANCELED + + + EAI_ALLDONE + + + EAI_INTR + + + EAI_IDN_ENCODE + + + SO_DETACH_REUSEPORT_BPF (Linux uniquement) + + + + + + Sodium + + + SODIUM_CRYPTO_IPCRYPT_BYTES + SODIUM_CRYPTO_IPCRYPT_KEYBYTES + SODIUM_CRYPTO_IPCRYPT_ND_KEYBYTES + SODIUM_CRYPTO_IPCRYPT_ND_TWEAKBYTES + SODIUM_CRYPTO_IPCRYPT_ND_INPUTBYTES + SODIUM_CRYPTO_IPCRYPT_ND_OUTPUTBYTES + SODIUM_CRYPTO_IPCRYPT_NDX_KEYBYTES + SODIUM_CRYPTO_IPCRYPT_NDX_TWEAKBYTES + SODIUM_CRYPTO_IPCRYPT_NDX_INPUTBYTES + SODIUM_CRYPTO_IPCRYPT_NDX_OUTPUTBYTES + SODIUM_CRYPTO_IPCRYPT_PFX_KEYBYTES + SODIUM_CRYPTO_IPCRYPT_PFX_BYTES + SODIUM_CRYPTO_KEM_PUBLICKEYBYTES (libsodium >= 1.0.22) + SODIUM_CRYPTO_KEM_SECRETKEYBYTES (libsodium >= 1.0.22) + SODIUM_CRYPTO_KEM_CIPHERTEXTBYTES (libsodium >= 1.0.22) + SODIUM_CRYPTO_KEM_SHAREDSECRETBYTES (libsodium >= 1.0.22) + SODIUM_CRYPTO_KEM_SEEDBYTES (libsodium >= 1.0.22) + SODIUM_CRYPTO_KEM_KEYPAIRBYTES (libsodium >= 1.0.22) + SODIUM_CRYPTO_KEM_MLKEM768_PUBLICKEYBYTES (libsodium >= 1.0.22) + SODIUM_CRYPTO_KEM_MLKEM768_SECRETKEYBYTES (libsodium >= 1.0.22) + SODIUM_CRYPTO_KEM_MLKEM768_CIPHERTEXTBYTES (libsodium >= 1.0.22) + SODIUM_CRYPTO_KEM_MLKEM768_SHAREDSECRETBYTES (libsodium >= 1.0.22) + SODIUM_CRYPTO_KEM_MLKEM768_SEEDBYTES (libsodium >= 1.0.22) + SODIUM_CRYPTO_KEM_MLKEM768_KEYPAIRBYTES (libsodium >= 1.0.22) + + + + + diff --git a/appendices/migration86/deprecated.xml b/appendices/migration86/deprecated.xml new file mode 100644 index 0000000000..f0fc4e2581 --- /dev/null +++ b/appendices/migration86/deprecated.xml @@ -0,0 +1,638 @@ + + + + Fonctionnalités dépréciées + + + PHP Core + + + Utilisation de "namespace" comme nom de constante de classe + + + + Déclarer une constante de classe + nommée namespace est désormais déprécié. + namespace est un mot-clé semi-réservé, et ce nom est + réservé pour une éventuelle syntaxe future, telle qu'une pseudo-constante + ::namespace analogue à ::class. + Les méthodes et les propriétés statiques nommées namespace + ne sont pas concernées. + Renommer la constante, par exemple en NAMESPACE_NAME. + + + + + + Retourner depuis un bloc finally + + + + Utiliser l'instruction return dans un bloc &finally; + est désormais déprécié, et émet un avertissement de dépréciation à la + compilation. + Un tel return écarte silencieusement une exception + lancée par le bloc try ou catch + associé, ou écrase la valeur qu'il retourne, si bien que les échecs + disparaissent sans laisser de trace. + Il faut déplacer le return hors du bloc + finally ; le même résultat peut toujours s'exprimer sans + lui. + + + + + + + + + + + + Type de retour nullable pour __debugInfo() + + + Déclarer un type de retour + arraynull pour + __debugInfo() est + désormais déprécié. + Retourner &null; depuis cette méthode était + déjà + déprécié en PHP 8.5, le type de retour nullable ne décrit donc plus + un comportement valide. + Il faut déclarer array à la place. + + + + + + Retourner des valeurs depuis __construct() et __destruct() + + + + Retourner une valeur depuis + __construct() ou + __destruct() est + désormais déprécié, et émet un avertissement de dépréciation à la + compilation. + Ces méthodes ne peuvent pas déclarer de type de retour, et leur valeur de + retour ne peut jamais être observée en usage normal, ce qui rendait le + fait de retourner une valeur au mieux déroutant. + Utiliser return; sans valeur pour ignorer le reste de la + logique reste autorisé, de même que l'appel manuel de ces méthodes. + + + + Pour la même raison, utiliser yield pour faire de + __construct() ou + __destruct() un + générateur est désormais + déprécié. + + + + + + Nommer une fonction readonly + + + + Déclarer une fonction nommée readonly est désormais + déprécié. + readonly + est un mot-clé réservé ; une exception a été ajoutée à l'analyseur lexical + en PHP 8.1 uniquement pour maintenir en état de fonctionnement une + fonction WordPress existante portant ce nom, et aucun autre mot-clé de PHP + ne bénéficie d'un traitement spécial de ce genre. + Il faut renommer la fonction. + + + + + + Utilisation de let, is ou _ comme identifiant + + + + + + + Utiliser let ou is comme nom de + classe, d'interface, de trait, d'énumération, de fonction ou de constante + (y compris via define) est désormais déprécié, de + même que leur utilisation comme alias dans un appel à + class_alias ou dans une déclaration + use, use function ou + use const. + Ces noms sont réservés comme mots-clés pour d'éventuelles fonctionnalités + futures : let pour la portée de bloc et + is pour le filtrage par motifs. + Il faut renommer les symboles concernés. + + + + La + dépréciation + de _ comme nom de classe en PHP 8.4 est étendue + aux constantes : déclarer une constante nommée _ avec + const ou define, et utiliser + _ comme alias d'une classe ou d'une constante dans une + déclaration use, sont désormais dépréciés. + Les fonctions nommées _, y compris l'alias + _ de gettext, ne sont pas + concernées. + + + + + + Troisième argument de define() + + + + Passer l'argument case_insensitive à + define est désormais déprécié. + Les constantes insensibles à la casse ont été supprimées en PHP 8.0, et + depuis lors cet argument est ignoré. + Passer explicitement &false; émet désormais un avertissement de + dépréciation. + Passer &true; continue d'émettre un avertissement, dont le message précise + désormais que cela deviendra une erreur en PHP 9.0. + Il faut omettre l'argument. + + + + + + is_a() et is_subclass_of() avec une chaîne lorsque allow_string vaut false + + + + + Appeler is_a ou is_subclass_of + avec une chaîne comme premier argument alors que + allow_string vaut &false; est désormais déprécié. + Dans ce cas, les fonctions retournent toujours &false;, même lorsque la + classe est déjà chargée, un tel appel révèle donc un bogue. + Pour éviter de déclencher le chargement automatique, il faut d'abord + vérifier avec class_exists en désactivant le + chargement automatique, puis appeler la fonction avec + allow_string défini à &true;. + + + + + + metaphone() + + + + La fonction metaphone est désormais dépréciée. + Elle implémente l'algorithme Metaphone original de 1990, qui est limité aux + règles de prononciation de l'anglais et a depuis longtemps été supplanté + par Double Metaphone et Metaphone 3. + Les algorithmes phonétiques sont spécifiques à une langue et fréquemment + mis à jour ; ils sont donc mieux servis par une bibliothèque en espace + utilisateur, qu'il faut utiliser à la place. + + + + + + Plus de 16 filtres dans une URL php://filter + + + + Utiliser plus de 16 filtres dans une URL + php://filter sans configurer l'option + de contexte de flux filter.max_filter_count émet + désormais un avertissement de dépréciation. + Les longues chaînes de filtres n'ont aucun usage légitime connu, mais + sont à la base d'une classe d'attaques qui transforment une inclusion de + fichier local ou une lecture arbitraire de fichier en exécution de code à + distance. + Lorsque filter.max_filter_count est défini + explicitement, le dépasser est déjà une erreur : l'ouverture du flux + échoue avec un avertissement. + + + + Le code qui a besoin de davantage de filtres devrait soit les ajouter avec + stream_filter_append ou + stream_filter_prepend, qui ne sont pas limitées, soit + relever la limite via l'option de contexte, par exemple globalement avec + stream_context_set_default. + + + + + + Passer des objets à array_walk(), array_walk_recursive() et http_build_query() + + + + + Passer un objet comme argument array à + array_walk ou + array_walk_recursive est désormais déprécié. + Un petit nombre de fonctions interprètent silencieusement un objet comme + le tableau de ses propriétés visibles. + Modifier ces propriétés via une fonction de rappel par référence viole la + sémantique de + readonly + et peut corrompre les cas d'énumération, et + array_walk_recursive ne descend de toute façon pas + dans les objets imbriqués. + Il faut d'abord appeler get_object_vars sur l'objet + et passer le tableau obtenu. + + + + Passer un objet comme argument data à + http_build_query est désormais déprécié. + Les objets rencontrés comme valeurs dans data + émettent désormais aussi un avertissement de dépréciation lorsqu'ils sont + interprétés comme des tableaux. + Traiter les objets comme des tableaux a été une source récurrente de + confusion, en particulier pour les objets + Stringable, dont les utilisateurs attendent + qu'ils soient plutôt convertis en chaîne. + Il faut convertir les objets en tableaux avec + get_object_vars, récursivement si nécessaire, avant + d'appeler la fonction. + + + + + + is_double(), is_long(), is_integer() et doubleval() + + + + + + + Suite à la + dépréciation + des noms de cast non canoniques en PHP 8.5, les alias de fonctions + qui portent ces mêmes noms de types obsolètes sont désormais dépréciés. + Ils se comportent de manière identique à leurs équivalents canoniques, qui + doivent être utilisés à la place : + + + is_double => is_float + is_long => is_int + is_integer => is_int + doubleval => floatval + + + + + + + strcoll() et SORT_LOCALE_STRING + + + + + La fonction strcoll est désormais dépréciée. + Elle compare des chaînes selon le paramètre LC_COLLATE + de la locale courante, qui est un état global du processus défini via + setlocale et que n'importe quelle bibliothèque peut + modifier ; elle n'est pas compatible avec les données binaires, + contrairement à toutes les autres fonctions de comparaison de chaînes, et + certaines locales n'implémentent pas des règles de collation correctes. + Il faut utiliser à la place Collator::compare de + l'extension intl, qui est précise et + dispose de règles de collation à jour. + + + + Le drapeau SORT_LOCALE_STRING des fonctions de tri + est désormais déprécié pour les mêmes raisons, puisqu'il trie en utilisant + strcoll. + Il faut utiliser à la place l'une des méthodes suivantes de la classe + Collator : + + + Collator::sort + Collator::asort + Collator::sortWithSortKeys + + + + + + + + + Bzip2 + + + Passer un objet comme paramètres des filtres de flux + bzip2.compress et + bzip2.decompress est désormais déprécié, car seul un tableau + associatif est documenté et pris en charge. + Il faut d'abord appeler get_object_vars sur l'objet et + passer le tableau obtenu. + + + + + + + GMP + + + Les opérateurs de décalage (<<, + >>) et d'exponentiation (**) + sur les objets GMP émettent désormais un + avertissement de dépréciation lorsque l'opérande de droite est un + float dont la conversion en int perd en + précision, par cohérence avec la dépréciation des conversions implicites + de float vers int avec perte ailleurs dans le langage. + + + + + + MBString + + + Les fonctions mbregex ont été dépréciées, car la bibliothèque Oniguruma + sous-jacente n'est plus maintenue ; sa maintenance a pris fin en avril + 2025. + Les fonctions seront supprimées en PHP 9.0. + Pour la plupart des cas d'usage, les fonctions + PCRE avec le modificateur u + constituent un remplacement approprié. + Les fonctions concernées sont : + + + + mb_ereg + mb_ereg_match + mb_ereg_replace + mb_ereg_replace_callback + mb_ereg_search + mb_ereg_search_getpos + mb_ereg_search_getregs + mb_ereg_search_init + mb_ereg_search_pos + mb_ereg_search_regs + mb_ereg_search_setpos + mb_eregi + mb_eregi_replace + mb_regex_encoding + mb_regex_set_options + mb_split + + + + + La constante MB_ONIGURUMA_VERSION et les directives + INI + mbstring.regex_retry_limit + et + mbstring.regex_stack_limit + sont dépréciées en même temps. + + + + Passer un objet comme argument vars à + mb_convert_variables est désormais déprécié, car les + objets sont silencieusement interprétés comme le tableau de leurs + propriétés visibles. + Il faut d'abord appeler get_object_vars sur l'objet, + ou utiliser mb_convert_encoding, qui convertit + récursivement les tableaux et retourne le résultat au lieu de modifier son + argument sur place. + + + + + + + MySQLi + + + La fonction mysqli_get_charset et la méthode + mysqli::get_charset sont désormais dépréciées, + sans remplacement. + Elles exposent des détails d'implémentation internes du jeu de caractères + qui n'ont plus de sens depuis le passage à mysqlnd ; en particulier, la + collation rapportée ne correspond pas à la collation définie par le + serveur. + Pour obtenir le nom du jeu de caractères courant, il faut utiliser + mysqli_character_set_name ou + mysqli::character_set_name. + + + + + La fonction mysqli_stmt_init et la méthode + mysqli::stmt_init sont désormais dépréciées. + Elles créent un objet de requête vide qui doit encore être préparé avant + utilisation, et sont une source d'objets de requête laissés dans un état + incohérent. + Il faut utiliser à la place mysqli_prepare ou + mysqli::prepare, qui préparent la requête en une + seule étape. + Pour la même raison, appeler le constructeur + mysqli_stmt::__construct sans le paramètre + query est désormais déprécié ; il faut passer la + requête au constructeur. + + + + + + + Reflection + + + Appeler ReflectionProperty::setValue ou + ReflectionProperty::setRawValue avec un objet qui + n'est pas une instance de la classe dans laquelle la propriété a été + déclarée est désormais déprécié. + Contrairement aux autres méthodes de ReflectionProperty, + qui lancent une exception pour de tels objets, ces méthodes définissent + silencieusement une propriété sur l'objet sans rapport, ce qui n'est pas + mieux qu'une assignation normale et est conceptuellement erroné. + + + + + Passer un objet à ReflectionMethod::invoke ou + ReflectionMethod::invokeArgs lors de l'appel d'une + méthode statique est désormais déprécié. + Les méthodes statiques n'ont pas de $this : l'objet + était donc entièrement ignoré et jamais validé. + Il faut passer &null; à la place. + + + + + + + Session + + + Passer à session_set_save_handler un objet qui + n'implémente pas à la fois les méthodes + SessionIdInterface::create_sid et + SessionUpdateTimestampHandlerInterface::validateId + est désormais déprécié, quelles que soient les interfaces que l'objet + déclare. + Ces méthodes sont nécessaires pour qu'un gestionnaire de sauvegarde se + comporte correctement avec + session.use_strict_mode, + qui est + activé par défaut à partir + de PHP 8.6 et atténue la fixation de session. + + + + + En conséquence, un avertissement de dépréciation est désormais émis + lorsqu'une classe implémente SessionHandlerInterface + sans définir les méthodes + SessionIdInterface::create_sid ou + SessionUpdateTimestampHandlerInterface::validateId. + En PHP 9.0, ces méthodes seront déplacées de + SessionIdInterface et + SessionUpdateTimestampHandlerInterface vers + SessionHandlerInterface, où elles seront + obligatoires. + Il faut dès maintenant implémenter les deux méthodes sur les gestionnaires + de sauvegarde personnalisés. + + + + + + SPL + + + La fonction spl_classes est désormais dépréciée. + Aucune autre extension n'expose une telle fonction, et l'extension + Reflection est toujours disponible. + Il faut utiliser à la place + ReflectionExtension::getClassNames. + + + + + La fonction spl_object_hash est désormais dépréciée. + À partir de PHP 8.1, sa valeur de retour n'est rien de plus qu'un + spl_object_id reformaté, et son nom est trompeur car + la valeur n'est pas dérivée du contenu de l'objet. + La forme chaîne est aussi source d'erreurs : deux empreintes peuvent être + égales avec une comparaison souple parce que ce sont toutes deux des + chaînes numériques. + Il faut utiliser à la place spl_object_id. + + + + + Les méthodes suivantes d'ArrayIterator sont + désormais dépréciées. + Elles n'existent que parce qu'ArrayIterator + partageait historiquement son implémentation avec + ArrayObject ; la plupart n'ont guère de sens sur un + itérateur et empêchent d'optimiser son implémentation. + Les méthodes correspondantes d'ArrayObject ne sont + pas dépréciées. + + + + ArrayIterator::getFlags + ArrayIterator::setFlags + ArrayIterator::asort + ArrayIterator::ksort + ArrayIterator::uasort + ArrayIterator::uksort + ArrayIterator::natsort + ArrayIterator::natcasesort + ArrayIterator::unserialize + ArrayIterator::serialize + + + + + Les méthodes CSV de SplFileObject sont désormais + dépréciées. + Leurs incohérences de conception historiques, davantage mises en évidence + par les arguments nommés, les ont rendues de plus en plus difficiles à + maintenir, et la gestion du CSV n'a pas naturellement sa place dans + SplFileObject. + Il faut utiliser à la place fgetcsv et + fputcsv sur un flux. + + + + SplFileObject::fgetcsv + SplFileObject::fputcsv + SplFileObject::setCsvControl + SplFileObject::getCsvControl + + + + + + + Zlib + + + Passer un objet comme paramètres des filtres de flux + zlib.deflate et zlib.inflate + est désormais déprécié, car seul un tableau associatif est documenté et + pris en charge. + Il faut d'abord appeler get_object_vars sur l'objet et + passer le tableau obtenu. + + + + + Passer un objet comme argument options à + deflate_init ou inflate_init est + désormais déprécié, car les objets sont silencieusement interprétés comme + le tableau de leurs propriétés visibles. + Il faut d'abord appeler get_object_vars sur l'objet et + passer le tableau obtenu. + + + + + + + diff --git a/appendices/migration86/incompatible.xml b/appendices/migration86/incompatible.xml new file mode 100644 index 0000000000..1f5238cdc0 --- /dev/null +++ b/appendices/migration86/incompatible.xml @@ -0,0 +1,921 @@ + + + + Changements non rétrocompatibles + + + PHP Core + + + foreach par référence après compactage d'un tableau + + + Les boucles foreach par + référence peuvent désormais visiter des éléments précédemment ignorés après + le compactage d'un tableau. + Les pointeurs internes sur des éléments supprimés passent désormais à + l'élément survivant suivant lors de la copie sur écriture. + + + + + + Coalescence sur null et <function>empty</function> sur les propriétés magiques + + + ?? et empty sur une propriété + magique n'appellent plus __get() lorsque + __isset() a matérialisé la propriété + en écrivant dans la table des propriétés. + La valeur fraîchement écrite est retournée directement. + isset appliqué directement à la propriété n'est pas + affecté ; les formes imbriquées telles que + isset($o->p['k']) suivent le même chemin que + ??. + + + + +$name = 'from __isset()'; + return true; + } + + public function __get(string $name): string + { + return 'from __get()'; + } +} + +$example = new Example(); +var_dump($example->foo ?? 'default'); +// À partir de PHP 8.6.0 : string(14) "from __isset()" +// Avant PHP 8.6.0 : string(12) "from __get()" +]]> + + + + + + + Conversion en chaîne dans <function>array_intersect</function> + + + array_intersect avec au moins deux tableaux convertit + désormais les valeurs en chaînes lors du parcours de ses entrées plutôt que + pendant les comparaisons du tri. + Cela peut modifier le nombre et l'ordre des avertissements de conversion + et des appels à __toString(), + l'exception de conversion qui est atteinte, ainsi que le résultat pour les + implémentations de __toString() à + état. + Les types des arguments sont validés avant de vérifier la présence de + tableaux vides ou de convertir les valeurs ; un argument ultérieur invalide + peut donc supprimer les effets de bord de conversion des tableaux + précédents. + Les valeurs ne sont pas converties si l'un des tableaux d'entrée est vide. + + + + + + Saut de page supprimé par défaut + + + Le saut de page (\f) est désormais ajouté aux + caractères supprimés par défaut par trim, + rtrim et ltrim. + + + + + + + + + + + + + Nouvelles erreurs pour les arguments invalides + + + Les fonctions suivantes lèvent désormais une + ValueError lorsqu'une valeur de drapeau ou + de mode invalide est passée : + + + array_filter (mode) + array_change_key_case (case) + pathinfo (flags) + scandir (sorting_order) + + + + + Les fonctions suivantes lèvent désormais une + ValueError lorsque l'argument donné contient + des octets NUL : + + + getenv et putenv (premier argument) + dl (extension_filename) + openlog (prefix) + parse_str (string) + proc_open (cwd) + + + + + Les fonctions suivantes lèvent désormais une + ValueError pour les valeurs hors limites, + au lieu de les plafonner silencieusement ou de les laisser déborder : + + + + number_format, lorsque decimals + est en dehors de la plage des entiers. + + + sleep, lorsque seconds est + supérieur à UINT_MAX, ou + UINT_MAX / 1000 sous Windows. + + + usleep, lorsque microseconds + est supérieur à UINT_MAX. + + + + + + linkinfo lève désormais une + ValueError lorsque l'argument + path est vide. + + + + setlocale lève désormais une + ValueError lorsqu'un nom de locale contient + des octets NUL, au lieu de le tronquer silencieusement. + Les tableaux ne sont désormais acceptés que pour l'argument + locales. + Passer un tableau comme argument de locale variadique ultérieur lance + désormais une TypeError. + Passer des arguments de locale supplémentaires lorsque + locales est un tableau lance désormais une + ArgumentCountError. + + + + Les fonctions suivantes lèvent désormais une + ValueError lorsque l'argument + filename contient des octets NUL : + + + fileperms + fileinode + filesize + fileowner + filegroup + fileatime + filemtime + filectime + filetype + is_writable + is_readable + is_executable + is_file + is_dir + is_link + file_exists + lstat + stat + + + + + + + Notice sur la conversion imprécise de nombres + + + base_convert, bindec, + hexdec et octdec émettent + désormais une notice lorsqu'elles ne peuvent pas convertir précisément le + nombre donné. + + + + + + Modificateurs d'endianness dans les noms de format de <function>unpack</function> + + + unpack interprète désormais un < + ou un > suivant immédiatement un code de format + comme un modificateur d'endianness, et non comme le premier caractère du + nom de l'élément. + Les formats tels que "s<value" produisent désormais + la clé "value" au lieu de + "<value", et "C>name" lève une + ValueError car le code de format + C n'accepte aucun modificateur d'endianness. + Un nom commençant par ces caractères n'est pas affecté lorsqu'un + répéteur le précède, comme dans "s1<value". + Voir aussi les + nouveaux + modificateurs d'endianness. + + + + + + 1] +// Avant PHP 8.6.0 : [" 1] +]]> + + + + + + + + + COM + + + Il n'est plus possible de cloner des objets variant, + car le comportement du clonage était mal défini. + + + + + + cURL + + + La fonction de rappel enregistrée avec + CURLOPT_READFUNCTION lance désormais une + ValueError lorsqu'elle retourne un entier + autre que 0, + CURL_READFUNC_ABORT ou + CURL_READFUNC_PAUSE. + + + + + + DOM + + + Les propriétés précédemment documentées comme en lecture seule (par ex. + DOMNode::$nodeType, + DOMDocument::$xmlEncoding, + DOMEntity::$actualEncoding, + DOMEntity::$encoding, + DOMEntity::$version) sont désormais déclarées avec une + visibilité + asymétrique (public private(set)). + Toute tentative d'écriture depuis l'extérieur de la classe lève désormais + Cannot modify private(set) property class::$prop from global scope + au lieu de l'ancienne erreur de modification d'une propriété en lecture + seule. + ReflectionProperty::isWritable rapporte également + ces propriétés avec exactitude. + + + + L'accès par index sur les objets Dom\DtdNamedNodeMap + retourne désormais &null; pour les index entiers négatifs au lieu de + retourner le premier nœud, et lève une + ValueError lorsque l'index entier est + supérieur à PHP_INT_MAX au lieu de déborder vers un + index plus petit. + + + + + + FTP + + + ftp_nb_fget, ftp_nb_fput, + ftp_nb_get et ftp_nb_put lancent + désormais une Error lorsque la connexion est + déjà en cours de transfert, au lieu d'émettre un avertissement et de + retourner &false;. + ftp_close lance déjà une exception dans la même + situation. + + + + + + GD + + + imagesetstyle, imagefilter et + imagecrop filtrent les types et les valeurs de leurs + arguments de type tableau et lèvent en conséquence une + TypeError ou une + ValueError. + + + + imageaffinematrixget impose désormais le type + arrayfloat documenté + pour le paramètre options, y compris le + comportement correspondant du typage faible et strict. + + + + + + GMP + + + gmp_fact lève désormais une + ValueError si num + ne tient pas dans un unsigned long. + + + + gmp_pow, gmp_binomial, + gmp_root et gmp_rootrem lèvent + désormais une ValueError si leur second + argument ne tient pas dans un unsigned long. + + + + Les opérateurs de décalage (<<, + >>) et d'exponentiation (**) + sur les objets GMP lèvent désormais une + ValueError lorsque les opérandes de droite + GMP sont en dehors de la plage des unsigned long, au + lieu de les tronquer silencieusement. + + + + L'analyse des chaînes d'entiers GMP lève désormais + une ValueError pour les chaînes contenant des + octets NUL, au lieu de les tronquer silencieusement. + + + + Le message de la DivisionByZeroError levée + par gmp_powm lors d'un modulo par zéro inclut + désormais le nom de la fonction et l'index de l'argument + (modulus). + + + + + + Intl + + + Passer un objet non stringable comme fuseau horaire aux + API Intl qui acceptent des objets ou des chaînes de + fuseau horaire lève désormais une TypeError + au lieu d'une Error. + + + + IntlIterator::current retourne désormais &null; + lorsqu'elle est appelée avant que l'itérateur ne soit positionné, ou après + que l'itérateur est devenu invalide, au lieu d'exposer une valeur indéfinie. + + + + IntlBreakIterator::getLocale lève désormais une + ValueError lorsque le type n'est ni + Locale::ACTUAL_LOCALE ni + Locale::VALID_LOCALE, au lieu de retourner &false;. + + + + MessageFormatter::parse et + MessageFormatter::parseMessage retournent désormais + PHP_INT_MIN sous forme de int, plutôt que + de float, sur les plateformes 64 bits lors de l'analyse de + valeurs entières. + + + + Le paramètre type de + IntlBreakIterator::getPartsIterator est passé de + string à int pour correspondre à l'implémentation + sous-jacente. + + + + UConverter::transcode rejette désormais les valeurs + d'option from_subst et to_subst de plus + de 127 octets, au lieu de tronquer silencieusement la longueur avant de la + transmettre à ICU. + + + + ResourceBundle::get et + resourcebundle_get rapportent désormais les recherches + de ressources sans repli avec + without fallback to locale + au lieu du message mal formé + without fallback from to locale. + + + + IntlDateFormatter::parse/datefmt_parse + et + IntlDateFormatter::localtime/datefmt_localtime + lèvent désormais une TypeError lorsque + l'argument offset n'est pas de type int, + au lieu de convertir silencieusement la valeur. + + + + Collator::sort, + collator_sort, + Collator::asort et + collator_asort rapportent désormais les échecs de + conversion UTF-8/UTF-16 pendant la + comparaison via le mécanisme d'erreur d'intl et retournent &false;. + Avec intl.use_exceptions + activé, ces échecs lancent une IntlException. + Auparavant, ces chemins émettaient un avertissement et comparaient la + valeur comme une chaîne vide. + + + + + + MBString + + + Les tables de données Unicode ont été mises à jour vers Unicode 18.0. + + + + + + PCNTL + + + pcntl_alarm lève désormais une + ValueError si l'argument + seconds est inférieur à zéro ou supérieur à la + valeur UINT_MAX de la plateforme. + + + + pcntl_exec lève désormais une + ValueError si l'argument + args n'est pas un tableau de type liste. + + + + + + PCRE + + + preg_grep retourne désormais &false; au lieu d'un + tableau partiel lorsqu'une erreur d'exécution PCRE se + produit (par ex. une entrée UTF-8 malformée avec le + modificateur u). + Cela est cohérent avec les autres fonctions preg_*. + + + + + + PGSQL + + + Lorsque pg_fetch_object reçoit un paramètre + constructor_args non vide pour une classe sans + constructeur, la ValueError fait désormais + référence à l'argument constructor_args au lieu de + class. + Les erreurs levées lorsque la classe demandée n'est pas instanciable + (abstraite, interface, énumération) apparaissent désormais avant la + récupération de la ligne. + + + + + + Phar + + + Phar::mungServer lève désormais une + ValueError lorsqu'une valeur d'argument + invalide est passée, au lieu de l'ignorer silencieusement. + + + + Phar::addEmptyDir rejette désormais les chemins + "/.phar" en plus des chemins ".phar", + et lève la même BadMethodCallException pour + les tentatives de création du répertoire magique réservé + ".phar" par cette forme. + Les noms non magiques qui partagent simplement le préfixe + ".phar" sont désormais traités comme des répertoires + ordinaires. + + + + Les fichiers ne sont automatiquement interprétés comme des archives Phar + lors de leur inclusion que si ".phar" apparaît comme + extension dans la composante nom de fichier de leur chemin. + Auparavant, cela pouvait se produire dans un nom de répertoire ou comme + partie d'une extension telle que ".pharma". + + + + + + Session + + + Définir session.cookie_path, + session.cookie_domain ou + session.cache_limiter avec + une valeur contenant des octets NUL émet désormais un + avertissement et laisse le réglage inchangé. + Auparavant, les octets NUL étaient silencieusement + acceptés : pour cookie_path et + cookie_domain, cela amenait la SAPI à + abandonner l'en-tête Set-Cookie ; pour + cache_limiter, la valeur était silencieusement tronquée + à l'octet NUL. + + + + session_module_name lance désormais une + ValueError si name + est une chaîne contenant des octets NUL. + + + + session_encode retourne désormais une chaîne vide au + lieu de &false; pour les sessions vides. + Elle ne retourne désormais &false; que lorsque les données de session n'ont + pas pu être encodées. + Cela se produit principalement avec le gestionnaire de sérialisation par + défaut si une clé contient le caractère pipe (|). + + + + Lorsque session.lazy_write + est activé et qu'un gestionnaire de session implémente + SessionUpdateTimestampHandlerInterface, les + sessions qui ont été lues comme vides et restent vides au moment de + l'écriture déclenchent désormais + SessionUpdateTimestampHandlerInterface::updateTimestamp + au lieu de SessionHandlerInterface::write. + Auparavant, SessionHandlerInterface::write était + toujours appelée pour les sessions vides car + session_encode retournait &false;, contournant la + comparaison de lazy_write. + Les gestionnaires de session personnalisés qui s'appuient sur l'appel de + SessionHandlerInterface::write avec des données + vides (par ex. pour détruire la session) devraient implémenter la même + logique dans leur méthode + SessionUpdateTimestampHandlerInterface::updateTimestamp. + + + + Les valeurs par défaut de trois réglages INI de session ont changé afin de + fournir un comportement sécurisé dès l'installation : + + + + + session.use_strict_mode + vaut désormais 1 (auparavant 0). + Le mode strict rejette les identifiants de session non initialisés, ce + qui atténue la fixation de session. + Les gestionnaires de session personnalisés qui s'appuyaient auparavant sur + l'acceptation d'identifiants fournis de l'extérieur sans entrée de + stockage correspondante doivent soit implémenter + SessionUpdateTimestampHandlerInterface::validateId + et SessionIdInterface::create_sid, soit + définir explicitement ce réglage à 0. + + + session.cookie_httponly + vaut désormais 1 (auparavant 0). + Les cookies de session ne sont plus accessibles à JavaScript via + document.cookie. + Les applications qui lisent le cookie de session depuis JavaScript doivent + définir explicitement ce réglage à 0. + + + session.cookie_samesite + vaut désormais "Lax" (auparavant non défini). + Les cookies de session ne sont plus envoyés lors des requêtes + inter-sites autres que les navigations de premier niveau utilisant des + méthodes HTTP sûres. + Les applications qui dépendent de l'envoi des cookies de session lors de + soumissions POST inter-sites doivent définir explicitement ce réglage à + "None" (et définir également + session.cookie_secure + à 1). + + + + + + SessionHandler::validateId a été ajoutée et + délègue au gestionnaire de sauvegarde configuré. + Une sous-classe qui déclare SessionHandler::validateId + sans type de retour émet désormais un avertissement de dépréciation pour le + type de retour bool provisoire. + Une sous-classe qui surcharge SessionHandler::open + sans appeler parent::open() conserve son comportement + précédent et émet un avertissement lorsqu'un identifiant est validé. + + + + + + Shmop + + + shmop_open lève désormais une + ValueError lorsque l'argument + key est en dehors de la plage key_t + de la plateforme, au lieu de transmettre une clé tronquée au système + d'exploitation. + + + + + + SimpleXML + + + SimpleXMLElement::__construct lève désormais une + ValueError lorsque l'argument + data contient des octets NUL, + comme simplexml_load_file. + Avec dataIsURL défini, le chemin était auparavant + tronqué au premier octet NUL. + Sans lui, la chaîne était transmise à libxml, qui, avec les options par + défaut, rejette un NUL sur les versions actuelles mais + accepte le document tronqué sur les versions plus anciennes et avec + LIBXML_RECOVER. + + + + + + SOAP + + + L'option "classmap" de + SoapClient et SoapServer + rejette désormais les tableaux contenant des clés entières. + Auparavant, les tableaux creux à clés entières et les tableaux à clés + mixtes pouvaient être acceptés. + SoapClient lance désormais une + TypeError pour les options + "classmap" qui ne sont pas des tableaux et une + ValueError pour les tableaux contenant des + clés entières, y compris lorsque l'option "exceptions" + est désactivée. + + + + L'analyse des WSDL/schémas XML rejette + désormais les valeurs entières hors limites pour les contraintes + d'occurrence et les facettes de restriction entières. + Les valeurs négatives de minOccurs et + maxOccurs sont également rejetées. + + + + Les erreurs d'encodage SOAP rapportent désormais le type concerné ou + l'opération défaillante dans le message d'erreur, au lieu du message + générique Encoding: Violation of encoding rules. + Le code qui compare le message exact peut nécessiter une mise à jour. + + + + + + Sockets + + + socket_set_option avec + SO_ATTACH_REUSEPORT_CBPF nécessite désormais une + value de type int et un + level égal à SOL_SOCKET. + Tout autre type de valeur lance une TypeError + au lieu d'être converti, et tout autre niveau émet un avertissement et + retourne &false;. + + + + socket_set_option avec + SO_ATTACH_REUSEPORT_CBPF et une + value égale à 0 détache désormais + le filtre reuseport via SO_DETACH_REUSEPORT_BPF. + Elle utilisait auparavant SO_DETACH_BPF, un alias de + SO_DETACH_FILTER, qui laissait le programme reuseport + attaché. + + + + + + Sodium + + + Les fonctions de hachage de mots de passe + sodium_crypto_pwhash, + sodium_crypto_pwhash_str, + sodium_crypto_pwhash_scryptsalsa208sha256 et + sodium_crypto_pwhash_scryptsalsa208sha256_str lancent + désormais une ValueError au lieu d'une + SodiumException lorsqu'un argument est hors + limites, comme un opslimit ou un + memlimit inférieur au minimum documenté. + SodiumException est toujours lancée pour les + échecs internes de libsodium. + + + + + + SPL + + + Les implémentations de SplObjectStorage::getHash + ne peuvent plus modifier aucune instance de + SplObjectStorage. + Toute tentative en ce sens lance désormais une + Error. + + + + SplFileObject::next fait désormais avancer le flux + lorsqu'aucun appel précédent à SplFileObject::current + n'a mis une ligne en cache. + Un appel ultérieur à SplFileObject::current + retourne la nouvelle ligne plutôt que la précédente. + + + + SplFileObject::fgets ne met plus en cache la ligne + retournée pour les appels ultérieurs à + SplFileObject::current. + SplFileObject::current relit désormais depuis la + position courante du flux au lieu de retourner la ligne que + SplFileObject::fgets vient de retourner. + + + + SplFileObject::next au-delà de la fin du fichier + (EOF) n'incrémente plus + SplFileObject::key sans limite. + SplFileObject::seek au-delà de + EOF produit désormais la même valeur de + SplFileObject::key que + SplTempFileObject ; les deux retournaient + auparavant des valeurs différentes. + + + + DirectoryIterator::key retourne désormais + intstring, et + DirectoryIterator::current retourne + stringSplFileInfostatic. + + + + + + Sysvshm + + + shm_attach lève désormais une + ValueError lorsque l'argument + key est en dehors de la plage key_t + de la plateforme, au lieu de transmettre une clé tronquée au système + d'exploitation. + + + + + + URI + + + Uri\WhatWg\Url::__construct définit désormais + softErrors à un tableau vide lorsque le traitement + de l'URL lance une exception, au lieu de conserver sa valeur. + Les erreurs de validation de l'URL restent disponibles dans la propriété + Uri\WhatWg\InvalidUrlException::$errors. + + + + Uri\WhatWg\Url::__construct, + Uri\WhatWg\Url::parse, les méthodes + Uri\WhatWg\Url::with*() et + Uri\WhatWg\UrlBuilder::build rapportent désormais + les erreurs de validation dans l'ordre où elles sont détectées. + Cela inverse l'ordre de plusieurs erreurs par rapport à PHP 8.5. + + + + + + Zip + + + ZipArchive::extractTo lève désormais une + TypeError pour l'argument + files si une ou plusieurs des entrées ne sont pas + des chaînes. + + + + ZipArchive::addGlob et + ZipArchive::addPattern lèvent désormais une + TypeError lorsque l'option + "remove_all_path" n'est pas de type bool, + ou lorsque les options "comp_method", + "comp_flags" ou "enc_method" ne sont + pas de type int (les chaînes numériques sont converties), au + lieu d'émettre un avertissement. + + + + Sérialiser ou désérialiser une ZipArchive lance + désormais une Exception. + Une sous-classe peut surcharger + __serialize() et + __unserialize() pour effectuer un + aller-retour via ZipArchive::closeString et + ZipArchive::openString. + + + + + + Zlib + + + deflate_init lève désormais une + TypeError lorsque la valeur de l'option + "level", "memory", + "window" ou "strategy" n'est pas de + type int. + + + + inflate_init lève désormais une + TypeError lorsque la valeur de l'option + "window" n'est pas de type int. + + + + + + diff --git a/appendices/migration86/new-classes.xml b/appendices/migration86/new-classes.xml new file mode 100644 index 0000000000..63e4c9b8eb --- /dev/null +++ b/appendices/migration86/new-classes.xml @@ -0,0 +1,106 @@ + + + + Nouvelles classes et interfaces + + + Core + + SortDirection + StreamError + StreamException + StreamErrorStore + StreamErrorMode + StreamErrorCode + Io\IoException + Io\Poll\Context + Io\Poll\Watcher + Io\Poll\Backend + Io\Poll\Event + Io\Poll\Handle + Io\Poll\PollException + Io\Poll\FailedPollOperationException + Io\Poll\FailedContextInitializationException + Io\Poll\FailedHandleAddException + Io\Poll\FailedWatcherModificationException + Io\Poll\FailedPollWaitException + Io\Poll\BackendUnavailableException + Io\Poll\InactiveWatcherException + Io\Poll\HandleAlreadyWatchedException + Io\Poll\InvalidHandleException + StreamPollHandle + + + + + + + + Date + + Time\Duration + Time\TimeException + + + + + + Intl + + IntlNumberRangeFormatter + + + + + OpenSSL + + Openssl\OpensslException + Openssl\Session + Openssl\Psk + + + + + + SNMP + + Snmp\Mib + Snmp\OidOutput + Snmp\Output + Snmp\StringOutput + + + + + + URI + + Uri\Rfc3986\UriBuilder + Uri\WhatWg\UrlBuilder + Uri\WhatWg\UrlPercentEncodingMode + + + + + + + diff --git a/appendices/migration86/new-features.xml b/appendices/migration86/new-features.xml new file mode 100644 index 0000000000..fa404ce92e --- /dev/null +++ b/appendices/migration86/new-features.xml @@ -0,0 +1,651 @@ + + + + Nouvelles fonctionnalités + + + PHP Core + + + Valeurs par défaut pour les propriétés en lecture seule + + + Les propriétés + en lecture seule peuvent désormais déclarer des valeurs par défaut. + + + + + +timeout); // int(30) +]]> + + + + + + + Assignation par référence sur WeakMap + + + Il est désormais possible d'utiliser l'assignation par référence sur une + WeakMap sans que la clé n'ait besoin d'être présente + au préalable. + + + + + + + + + + + + <methodname>__debugInfo</methodname> sur les énumérations + + + Il est désormais possible de définir la méthode magique + __debugInfo() + sur les énumérations. + Auparavant, cela provoquait une erreur fatale. + + + + + + $this->name, 'symbol' => $this->value]; + } +} + +var_dump(Suit::Hearts); +]]> + + &example.outputs; + + + string(6) "Hearts" + ["symbol"]=> + string(1) "H" +} +]]> + + + + + + + <code>#[\Override]</code> pour les constantes de classe + + + L'attribut Override peut désormais être appliqué + aux constantes de classe, y compris aux cas d'énumération. + Comme pour les méthodes et les propriétés, une erreur de compilation est + levée si aucune constante correspondante n'existe dans une classe parente + ou une interface implémentée. + + + + + + + + + + + + + Application partielle de fonction + + + Ajout du support de l'application partielle de fonction. Un appel dans + lequel un ou plusieurs arguments sont remplacés par le marqueur + ?, ou les arguments restants par le marqueur + ..., crée une Closure qui + accepte les arguments manquants. + + + + + + + + + + + + + Modification des objets stockés dans des constantes + + + Les objets stockés dans des constantes ou des constantes de classe peuvent + désormais être modifiés directement via OBJ->prop = $val. + + + + + +debug = true; + +var_dump(CONFIG->debug); // bool(true) +]]> + + + + + + + Modificateurs d'endianness pour pack() et unpack() + + + pack et unpack acceptent + désormais les modificateurs < (little-endian) et + > (big-endian) après les codes de format d'entiers + s, S, l, + L, q et Q, ainsi + qu'après les codes de format de nombres à virgule flottante + f et d. + + + + + + +', 1)), PHP_EOL; // Affiche "00000001" +echo bin2hex(pack('l<', 1)), PHP_EOL; // Affiche "01000000" +echo bin2hex(pack('f>', 1.5)), PHP_EOL; // Affiche "3fc00000" + +var_dump(unpack('s>value', "\xff\xfe")); // ["value" => int(-2)] +]]> + + + + + + + + + cURL + + + Le tableau retourné par curl_getinfo inclut désormais + une nouvelle clé "size_delivered", qui indique le nombre + total d'octets transmis à la fonction de rappel d'écriture du + téléchargement. + Cette valeur peut également être obtenue en passant + CURLINFO_SIZE_DELIVERED comme paramètre + option. + Nécessite libcurl 8.20.0 ou ultérieur. + + + + Ajout de CURLOPT_SEEKFUNCTION pour enregistrer une + fonction de rappel qui repositionne le corps d'une requête transmis en flux, + afin que libcurl puisse le rembobiner et le renvoyer lors d'une + redirection, d'une authentification en plusieurs passes ou d'une nouvelle + tentative sur une connexion réutilisée, au lieu d'échouer avec + CURLE_SEND_FAIL_REWIND. + La fonction de rappel reçoit le CurlHandle, le + décalage et l'origine, et doit retourner l'une des valeurs + CURL_SEEKFUNC_OK, + CURL_SEEKFUNC_FAIL ou + CURL_SEEKFUNC_CANTSEEK. + + + + + + Date + + + Ajout de la classe Time\Duration. + + + + + + + FileInfo + + + finfo_file fonctionne désormais avec les flux distants. + + + + + + GMP + + + Ajout de gmp_powm_sec pour l'exponentiation modulaire + résistante aux attaques par canaux auxiliaires. + Nécessite GNU MP 5.0.0 ou ultérieur ; indisponible sur les compilations + officielles pour Windows utilisant MPIR. + + + + Ajout de gmp_prevprime pour obtenir le plus grand + nombre premier inférieur au nombre donné. + Le paramètre de sortie optionnel definitely_prime + indique si le nombre retourné est certainement premier, par opposition à + probablement premier. + Une ValueError est levée si un tel nombre + premier n'existe pas. + Cette fonction n'est disponible que lorsque PHP est compilé avec GNU MP + 6.3.0 ou ultérieur ; elle n'est pas disponible sur les compilations + officielles pour Windows utilisant MPIR. + + + + + + Intl + + + Ajout des méthodes statiques + IntlDatePatternGenerator::getSkeleton et + IntlDatePatternGenerator::getBaseSkeleton pour + générer le squelette unique et le squelette de base d'un motif de + date/heure. + + + + Ajout de Locale::getDisplayKeyword et + Locale::getDisplayKeywordValue, avec les alias + locale_get_display_keyword et + locale_get_display_keyword_value, respectivement. + + + + + Ajout de la classe IntlNumberRangeFormatter pour + formater un intervalle de deux nombres avec un squelette et une locale + donnés. + Elle est prise en charge à partir de ICU 63. + Le comportement de regroupement est l'un des suivants : + + IntlNumberRangeFormatter::COLLAPSE_AUTO + IntlNumberRangeFormatter::COLLAPSE_NONE + IntlNumberRangeFormatter::COLLAPSE_UNIT + IntlNumberRangeFormatter::COLLAPSE_ALL + + Le comportement de repli en cas d'identité est l'un des suivants : + + IntlNumberRangeFormatter::IDENTITY_FALLBACK_SINGLE_VALUE + IntlNumberRangeFormatter::IDENTITY_FALLBACK_APPROXIMATELY_OR_SINGLE_VALUE + IntlNumberRangeFormatter::IDENTITY_FALLBACK_APPROXIMATELY + IntlNumberRangeFormatter::IDENTITY_FALLBACK_RANGE + + + + + Ajout de SpoofChecker::areBidiConfusable pour + vérifier si deux chaînes sont confondables pour une direction de texte + donnée, ainsi que des constantes de direction + SpoofChecker::LTR et + SpoofChecker::RTL. + Elle est prise en charge à partir de ICU 74. + + + + Ajout de SpoofChecker::getBidiSkeleton pour + générer un squelette de confusion pour une direction de texte donnée. + Elle est prise en charge à partir de ICU 74. + + + + Ajout de SpoofChecker::getSkeleton pour générer un + squelette de confusion pour une chaîne donnée. + + + + + + IO + + + Ajout d'une nouvelle API de scrutation (polling), + composée de : + + Les classes Io\Poll\Context et Io\Poll\Watcher + Les énumérations Io\Poll\Backend et Io\Poll\Event + L'interface Io\Poll\Handle + La classe StreamPollHandle pour surveiller les flux + + + + + + + + JSON + + + Ajout d'informations supplémentaires sur l'emplacement de l'erreur dans les + messages d'erreur retournés par json_last_error_msg et + dans le message de JsonException. + + + + + + OpenSSL + + + Ajout du support de la reprise de session TLS pour les + flux. + Cela permet de sauvegarder et de restaurer des sessions client entre les + requêtes, d'implémenter un stockage de session personnalisé côté serveur et + de contrôler le comportement du cache de sessions, à l'aide des nouvelles + options de contexte SSL suivantes : + + session_data + session_new_cb + session_cache + session_cache_size + session_timeout + session_id_context + session_get_cb + session_remove_cb + num_tickets + + + + + + Ajout du support des clés pré-partagées (PSK) externes + TLS pour les flux, avec les nouvelles options de + contexte SSL + psk_client_cb et psk_server_cb. + Cela permet de définir et de recevoir des clés pré-partagées. + + + + Ajout du support des données anticipées (0-RTT) de TLS + 1.3 pour les flux. + Les clients envoient des données anticipées avec l'option de + contexte SSL + early_data ; les serveurs les acceptent avec + max_early_data et les reçoivent via la fonction de rappel + early_data_cb. + Le résultat est indiqué par "accepted", + "rejected" ou "not_sent" dans la clé + "early_data" de l'entrée "crypto" du + tableau retourné par stream_get_meta_data. + + + + + + PDO_PGSQL + + + Ajout de Pdo\Pgsql::ATTR_CHUNK_SIZE, le nombre de + lignes qu'une requête récupère par bloc. + Une valeur de 1 ou plus active le mode de récupération paresseuse de + PDO::ATTR_PREFETCH => 0. + Définir PDO::ATTR_PREFETCH remplace la taille de bloc. + Les requêtes préparées sans cette option ni + PDO::ATTR_PREFETCH reprennent la valeur définie sur la + connexion. + Nécessite libpq 17 ou ultérieur. + + + + + + Phar + + + La surcharge des méthodes SplFileInfo::getMTime et + SplFileInfo::getPathname influence désormais le + résultat des familles de méthodes + Phar::buildFromDirectory et + Phar::buildFromIterator. + Cela permet de redéfinir l'horodatage et les noms des fichiers. + + + + + + SNMP + + + Il est désormais possible d'utiliser AES192, + AES192C, AES256 et + AES256C comme protocoles de sécurité SNMPv3 si la + bibliothèque sous-jacente les prend en charge. + + + + + Il est désormais possible de réinitialiser l'arbre MIB + avec la nouvelle fonction snmp_init_mib. + + + + + Des fonctionnalités supplémentaires de contrôle de l'analyse des + MIB et de la sortie sont exposées via : + + snmp_set_mib_option + snmp_set_output_option + snmp_set_string_output_format + SNMP::$numeric_index + SNMP::$numeric_timeticks + SNMP::$extended_index + SNMP::$dont_print_units + SNMP::$escape_quotes + SNMP::$print_hex_text + SNMP::setOidOutputFormat + SNMP::setStringOutputFormat + + + + + + + + Flux + + + Ajout d'une nouvelle API d'erreurs de flux, composée de : + + Les classes StreamError et StreamException + Les énumérations StreamErrorStore, StreamErrorMode et StreamErrorCode + Les fonctions stream_last_errors et stream_clear_errors + + Elle est contrôlée à l'aide des options de contexte de flux + error_mode, error_store et + error_handler. + + + + + Ajout de l'option de contexte de flux filter.max_filter_count + pour les URL php://filter. + Lorsqu'elle est définie, l'ouverture du flux échoue avec un avertissement si + l'URL ajoutait plus de filtres que la valeur configurée. + Les valeurs négatives désactivent la vérification. + + + + + Ajout de l'option de contexte de socket + so_reuseaddr qui permet de désactiver la réutilisation + d'adresse (SO_REUSEADDR) et utilise explicitement + SO_EXCLUSIVEADDRUSE sous Windows. + + + + Ajout des options de contexte de socket + so_keepalive, tcp_keepidle, + tcp_keepintvl et tcp_keepcnt qui + permettent de définir les options de keepalive des sockets. + + + + Ajout de l'option de contexte de socket + so_linger qui définit SO_LINGER sur + les sockets TCP. + Une valeur positive active l'attente de fermeture pendant ce nombre de + secondes, zéro ou une valeur négative la désactive. + Les valeurs supérieures à 65535 sont plafonnées, car sur certaines + plateformes la durée de linger est limitée à un entier court non signé. + + + + Ajout des options de contexte de socket + so_rcvbuf et so_sndbuf qui définissent + les tailles des tampons de réception et d'envoi du socket, en octets + (SO_RCVBUF et SO_SNDBUF), sur les + sockets TCP et UDP. + La valeur doit être un entier compris entre 1 et 2147483647 ; toute autre + valeur fait échouer la création du flux. + Le système d'exploitation peut arrondir, plafonner ou ajuster autrement la + taille demandée, et peut cesser de dimensionner ce tampon automatiquement ; + la taille relue peut donc différer de celle demandée. + + + + Les flux filtrés peuvent désormais être convertis en descripteurs de + fichier, pour une utilisation avec stream_select. + + + + Ajout du paramètre de filtre "write_seek_mode" pour les + filtres de flux bz2, iconv, zlib et + convert. + Ce paramètre doit être défini via un tableau associatif dont la clé est + "write_seek_mode" et dont la valeur est l'une des + chaînes suivantes : + + "preserve" + "reset" + "strict" + + + + + + + URI + + + Ajout de Uri\Rfc3986\Uri::getUriType et + Uri\WhatWg\Url::isSpecialScheme. + + + + + Ajout de Uri\Rfc3986\Uri::getHostType et + Uri\WhatWg\Url::getHostType. + + + + + Ajout des classes Uri\Rfc3986\UriBuilder et + Uri\WhatWg\UrlBuilder. + + + + + Ajout de Uri\WhatWg\url_percent_encode. + + + + + + + diff --git a/appendices/migration86/new-functions.xml b/appendices/migration86/new-functions.xml new file mode 100644 index 0000000000..4ab02d7fa5 --- /dev/null +++ b/appendices/migration86/new-functions.xml @@ -0,0 +1,233 @@ + + + + Nouvelles fonctions + + + Core + + + + + clamp retourne la valeur donnée si elle est dans + l'intervalle, sinon retourne la borne la plus proche. + + + stream_last_errors + stream_clear_errors + stream_socket_get_crypto_status + + + + + GMP + + + gmp_powm_sec + gmp_prevprime + + + + + Intl + + + + grapheme_strrev + + IntlDatePatternGenerator::getSkeleton + + + IntlDatePatternGenerator::getBaseSkeleton + + + + Locale::getDisplayKeyword + + locale_get_display_keyword + + Locale::getDisplayKeywordValue + + locale_get_display_keyword_value + + SpoofChecker::areBidiConfusable + + + SpoofChecker::getBidiSkeleton + + + SpoofChecker::getSkeleton + + + + + + MySQLi + + + + + mysqli::quote_string + + mysqli_quote_string + + + + + Reflection + + + + ReflectionAttribute::inNamespace + + + ReflectionAttribute::getNamespaceName + + + ReflectionAttribute::getShortName + + + ReflectionConstant::inNamespace + + + + ReflectionParameter::getDocComment + + + + ReflectionProperty::isReadable + + + ReflectionProperty::isWritable + + + + + + SNMP + + + + snmp_init_mib + snmp_set_mib_option + snmp_set_output_option + snmp_set_string_output_format + + SNMP::setOidOutputFormat + + + SNMP::setStringOutputFormat + + + + + + Sodium + + + sodium_crypto_ipcrypt_keygen + sodium_crypto_ipcrypt_encrypt + sodium_crypto_ipcrypt_decrypt + sodium_crypto_ipcrypt_nd_keygen + sodium_crypto_ipcrypt_nd_encrypt + sodium_crypto_ipcrypt_nd_decrypt + sodium_crypto_ipcrypt_ndx_keygen + sodium_crypto_ipcrypt_ndx_encrypt + sodium_crypto_ipcrypt_ndx_decrypt + sodium_crypto_ipcrypt_pfx_keygen + sodium_crypto_ipcrypt_pfx_encrypt + sodium_crypto_ipcrypt_pfx_decrypt + sodium_bin2ip + sodium_ip2bin + + + + Les fonctions suivantes exposent le KEM X-Wing + (hybride ML-KEM768+X25519, le KEM recommandé par libsodium). + Elles sont disponibles lorsque PHP est compilé avec libsodium 1.0.22 ou + ultérieur. + + + sodium_crypto_kem_keypair + sodium_crypto_kem_seed_keypair + sodium_crypto_kem_secretkey + sodium_crypto_kem_publickey + sodium_crypto_kem_enc + sodium_crypto_kem_dec + + + + + Les fonctions suivantes exposent le KEM ML-KEM768 + (FIPS 203). + Elles sont disponibles lorsque PHP est compilé avec libsodium 1.0.22 ou + ultérieur. + + + sodium_crypto_kem_mlkem768_keypair + sodium_crypto_kem_mlkem768_seed_keypair + sodium_crypto_kem_mlkem768_secretkey + sodium_crypto_kem_mlkem768_publickey + sodium_crypto_kem_mlkem768_enc + sodium_crypto_kem_mlkem768_dec + + + + + + URI + + + + + Uri\Rfc3986\Uri::getUriType + + + Uri\WhatWg\Url::isSpecialScheme + + + + Uri\Rfc3986\Uri::getHostType + + + Uri\WhatWg\Url::getHostType + + + Uri\WhatWg\url_percent_encode + + + + + Zip + + + + ZipArchive::openString + + + ZipArchive::closeString + + + + + + diff --git a/appendices/migration86/other-changes.xml b/appendices/migration86/other-changes.xml new file mode 100644 index 0000000000..b9f2df79e2 --- /dev/null +++ b/appendices/migration86/other-changes.xml @@ -0,0 +1,599 @@ + + + + Autres changements + + + Changements du cœur + + + Core + + + En cas de condition OOM (mémoire insuffisante) fatale, + PHP appelle désormais abort() au lieu de + exit(1), ce qui change le code de sortie en 134 et peut + créer un core dump. + + + + La constante PHP_OS_FAMILY a une valeur + AIX lors de l'exécution sur AIX ou IBM i via PASE. + + + + + + + + Changements dans les modules SAPI + + + CLI + + + Le serveur de développement + intégré accepte désormais les requêtes utilisant la méthode + HTTP QUERY au lieu de retourner + 501 Not Implemented. + + + + Le serveur de développement + intégré ne reflète plus l'en-tête Host des + requêtes. + + + + + + + + Fonctions modifiées + + + Core + + + header_register_callback déclare désormais + true comme type de retour. + Elle ne peut plus retourner &false; à partir de PHP 8.0.0, date à laquelle le + passage d'une fonction de rappel invalide a commencé à lancer une + TypeError. + + + + register_tick_function déclare désormais + true comme type de retour. + Elle a toujours retourné &true; en cas de succès ; une fonction de rappel + invalide lance une TypeError lors de + l'analyse des arguments, avant que le corps de la fonction ne soit + atteint. + + + + ini_get_all inclut désormais un élément + "builtin_default_value" pour chaque directive lorsque + details vaut &true;. + Il contient la valeur par défaut intégrée de la directive (ou &null; si + elle n'en a pas), indépendamment des valeurs définies dans &php.ini;, en + ligne de commande ou à l'exécution. + + + + fclose, file_put_contents et + copy retournent désormais &false; lorsque le vidage + ou la fermeture du flux échoue. + Auparavant, de tels échecs étaient silencieusement ignorés. + + + + + + Date + + + Les méthodes suivantes ont désormais des types de retour provisoires + static : + + + DateTime::createFromInterface + DateTimeImmutable::__set_state + DateTimeImmutable::modify + DateTimeImmutable::add + DateTimeImmutable::sub + DateTimeImmutable::setTimezone + DateTimeImmutable::setTime + DateTimeImmutable::setDate + DateTimeImmutable::setISODate + DateTimeImmutable::setTimestamp + DateTimeImmutable::createFromInterface + DateTimeZone::__set_state + DateInterval::__set_state + DatePeriod::__set_state + + + + + + + Filter + + + Le type de retour de filter_var_array a été restreint + de + arrayfalsenull + à arrayfalse. + La fonction établit toujours un tableau avant de filtrer, &null; n'était + donc jamais retourné. + filter_input_array n'est pas affectée : elle retourne + toujours &null; lorsque la superglobale demandée n'existe pas. + + + + + + LDAP + + + Le type de retour de ldap_free_result a été restreint + de bool à true. + La fonction retournait déjà toujours &true;. + + + + + + MySQLi + + + La structure retournée par mysqli_get_charset ne + contient plus l'élément non documenté "comment". + La valeur de "charsetnr" est désormais fixée à la + constante 0, car ce numéro était un détail + d'implémentation qui n'aurait pas dû être exposé publiquement. + + + + + + OpenSSL + + + La sortie de openssl_x509_parse contient désormais + une entrée "criticalExtensions" listant toutes les + extensions critiques du certificat. + + + + openssl_sign et openssl_verify + ont désormais un argument optionnel supplémentaire + salt_length qui permet de contrôler la longueur du + sel RSA-PSS lorsque + OPENSSL_PKCS1_PSS_PADDING est utilisé. + Il accepte une longueur explicite ou l'une des nouvelles constantes + OPENSSL_RSA_PSS_SALTLEN_*. + + + + + + PDO_DBLIB + + + Lors de l'utilisation de connexions persistantes, une vérification de + disponibilité de la connexion est désormais effectuée dans + PDO::__construct. + + + + + + Phar + + + Phar::mungServer prend désormais en charge les + valeurs par référence. + + + + + + Readline + + + readline_completion_function déclare désormais + true comme type de retour. + Elle a toujours retourné &true; en cas de succès ; une fonction de rappel + invalide lance une TypeError lors de + l'analyse des arguments, avant que le corps de la fonction ne soit + atteint. + + + + + + Reflection + + + Les sorties de + ReflectionClassConstant::__toString et de + ReflectionConstant::__toString affichent + désormais les valeurs de constantes bool sous la forme + true et false plutôt que + 1 et une chaîne vide. + Cela affecte également d'autres façons d'afficher les constantes de + classe, par ex. ReflectionClass::__toString. + + + + + + Sockets + + + socket_addrinfo_lookup a désormais un argument + optionnel supplémentaire error_code qui, lorsqu'il + n'est pas &null;, reçoit le code d'erreur en cas d'échec (l'une des + constantes EAI_*). + + + + Le type de retour de socket_cmsg_space a été restreint + de intnull à + int. + Tous les chemins d'échec lancent une + ValueError à partir de PHP 8.0.0, &null; n'était + donc jamais retourné. + + + + + + Zip + + + Le type de retour de zip_entry_close a été restreint + de bool à true. + La fonction retournait déjà toujours &true;. + + + + + + + + Autres changements aux extensions + + + Fileinfo + + + Mise à jour vers file 5.48. + Les bases de données magic compilées sur mesure avec d'anciennes versions + de file doivent être régénérées. + + + + + + Hash + + + La version intégrée de xxHash a été mise à jour vers 0.8.2. + + + + + + MySQLi + + + Ajout de la nouvelle constante MYSQLI_OPT_COMPRESS. + + + + + + Opcache + + + Le JIT est désormais pris en charge pour les + compilations ZTS sur Apple Silicon. + + + + + + + + Changements dans la gestion des fichiers INI + + + Core + + + L'option INI error_include_args + a été ajoutée pour rendre cohérent l'affichage des arguments de fonction + dans les erreurs ; elle est désactivée par défaut. + Auparavant, le fait qu'une fonction affiche un paramètre dans l'erreur + dépendait de chaque appel à la fonction d'erreur interne. + Désormais, tous les paramètres tels qu'ils ont réellement été passés à la + fonction seront affichés. + Cela utilise la même infrastructure que les traces d'appels : les + paramètres sensibles ne seront donc pas affichés, et les chaînes seront + tronquées selon + zend.exception_string_param_max_len. + + + + + + + MBString + + + La directive INI + mbstring.detect_order + met désormais à jour l'ordre de détection interne lorsqu'elle est modifiée + à l'exécution via ini_set. + Auparavant, les modifications à l'exécution avec + ini_set n'avaient aucun effet sur + mb_detect_order. + Définir la directive à &null; ou à une chaîne vide à l'exécution laisse + désormais inchangé l'ordre de détection précédemment configuré. + + + + + + MySQLi + + + mysqli.default_port vérifie + désormais la validité de la valeur, qui doit être comprise entre + 0 et 65535 inclus. + + + + + + Opcache + + + opcache.jit_debug accepte un + nouveau drapeau : ZEND_JIT_DEBUG_TRACE_EXIT_INFO_SRC. + Lorsqu'il est utilisé avec ZEND_JIT_DEBUG_TRACE_EXIT_INFO, + la source des points de sortie est affichée dans les informations de + sortie, dans les compilations de débogage. + + + + + + + + Performance + + + Core + + + printf n'utilisant que %s et + %d sera compilée en l'interpolation de chaîne + équivalente, évitant le coût d'un appel de fonction et l'analyse répétée de + la chaîne de format. + + + + Les arguments sont désormais passés plus efficacement aux constructeurs + connus (par ex. lors de l'utilisation de new self()). + + + + array_map utilisant comme fonction de rappel un + callable de première + classe ou une + application + partielle de fonction sera compilée en la boucle + foreach équivalente, + évitant la création de Closure intermédiaires et le + coût de l'appel de fonctions de rappel utilisateur depuis des fonctions + internes, et offrant une meilleure visibilité au JIT. + + + + Les performances de la VM TAILCALL ont été améliorées, + et elle est désormais activée sous Windows lors de la compilation avec + Clang 19 ou ultérieur sur x86_64. + + + + Les performances des compilations ZTS ont été + améliorées. + + + + Ajout d'un cache de fermetures sans état. + + + + + Le code profondément récursif qui amène la VM à allouer de nouvelles pages + de pile devrait désormais être plus rapide. + + + + Amélioration des performances du tri des tableaux à un seul élément. + + + + Amélioration des performances des fonctions suivantes : + + + addcslashes, lors de la génération d'échappements octaux + array_fill_keys + array_intersect + array_map, avec plusieurs tableaux passés + array_product et array_sum, pour les tableaux ne contenant que des entiers + array_unshift + array_walk + intval, pour intval('0b...', 2) et intval('+0b...', 2) + pathinfo, lorsqu'un seul composant est demandé + str_pad + str_repeat, lorsque le multiplicateur vaut 1 + str_split + + + + + + + DOM + + + DOMText::splitText et + Dom\Text::splitText sont plus rapides et + consomment moins de mémoire. + + + + + + GD + + + imagebmp, imagewbmp, + imagegd et imagegd2 mettent + désormais la sortie en tampon lors de l'écriture vers des flux PHP, ce qui + améliore significativement les performances d'écriture des images dans des + fichiers. + + + + Amélioration des performances de imagegrabscreen et + imagegrabwindow sous Windows. + + + + + + Intl + + + Amélioration des performances de + IntlCalendar::getAvailableLocales et de + IntlDateFormatter::localtime/datefmt_localtime + grâce à la préallocation des tableaux qu'elles retournent. + + + + Amélioration des performances de + transliterator_list_ids et de + resourcebundle_locales grâce à la préallocation des + tableaux qu'elles retournent. + + + + Optimisation de l'appel de la fonction de rappel dans + IntlChar::enumCharTypes. + + + + + + JSON + + + Amélioration des performances de l'encodage des tableaux et des objets. + + + + Amélioration des performances de la génération de l'indentation dans + json_encode lors de l'utilisation de + JSON_PRETTY_PRINT. + + + + + + MBString + + + Amélioration des performances de mb_str_pad. + + + + + + Phar + + + Réduction des allocations temporaires lors de l'itération sur les + répertoires Phar. + + + + + + URI + + + Amélioration des performances de + Uri\WhatWg\Url::parse lors de la collecte des + erreurs de validation grâce à la préallocation du tableau d'erreurs. + + + + Réduction des allocations lors de la lecture des hôtes IPv6/IPvFuture et + des chemins avec Uri\Rfc3986\Uri. + + + + Amélioration des performances et de la consommation de mémoire lors de + l'utilisation des accesseurs normalisants (non bruts) sur des URI déjà + normalisées avec Uri\Rfc3986\Uri. + + + + + + Zip + + + Amélioration des performances de + ZipArchive::addGlob et de + ZipArchive::addPattern grâce à la préallocation + des tableaux qu'elles retournent. + + + + Les copies de chaînes sont évitées dans + ZipArchive::addFromString. + + + + + + + + diff --git a/appendices/migration86/windows-support.xml b/appendices/migration86/windows-support.xml new file mode 100644 index 0000000000..2999421f1d --- /dev/null +++ b/appendices/migration86/windows-support.xml @@ -0,0 +1,59 @@ + + + + Support de Windows + + + Core + + + Les compilations officielles pour Windows utilisent désormais Visual Studio 2026 (VS18). + + + + + + LibXML + + + La bibliothèque libxml2 utilisée par les compilations officielles pour + Windows a été mise à jour vers la version 2.15.3. + En conséquence, DOMDocument::$documentURI pour les + documents chargés depuis un fichier local contient désormais un chemin + natif du système de fichiers au lieu d'une URI de + fichier. + + + + + + OpenSSL + + + La bibliothèque OpenSSL utilisée par les compilations officielles pour + Windows a été mise à jour vers OpenSSL 4. + + + + + +