PHP 8.4.1 Released!

Autres changements

Changement du noyau

Closures

Les noms de fermeture ont été ajustés pour inclure le nom de la fonction parente et la ligne de définition pour les rendre plus faciles à distinguer, par exemple dans les traces de pile.

Fibres

Les commutations de fibres pendant l'exécution du destructeur sont désormais autorisées. Cela était précédemment bloqué en raison de conflits avec la collecte des déchets.

Les destructeurs peuvent désormais être exécutés dans une fibre séparée :

Lorsque le ramasse-miettes est déclenché dans une fibre, les destructeurs appelés par le ramasse-miettes sont exécutés dans une fibre séparée : la gc_destructor_fiber. Si cette fibre est suspendue, une nouvelle est créée pour exécuter les destructeurs restants. Le gc_destructor_fiber précédent n'est plus référencé par le ramasse-miettes et peut être collecté s'il n'est plus référencé ailleurs. Les objets dont le destructeur est suspendu ne seront pas collectés tant que le destructeur ne retourne pas ou que la Fiber n'est pas collectée.

Gestionnaires de sortie

Les drapeaux d'état des gestionnaires de sortie passés au paramètre flags de ob_start() sont maintenant effacés.

output_add_rewrite_var() utilise désormais url_rewriter.hosts à la place de session.trans_sid_hosts pour la sélection des hôtes qui seront réécrits.

Changements dans les modules SAPI

apache2handler

Le support pour l'EOL Apache 2.0 et 2.2 a été supprimé. La version minimale d'Apache requise est désormais 2.4.

CLI

Le serveur intégré recherche un fichier d'index de manière récursive en parcourant les répertoires parents si le fichier spécifié ne peut pas être localisé. Ce processus était précédemment ignoré si le chemin semblait faire référence à un fichier, c'est-à-dire si le dernier composant du chemin contenait un point. Dans ce cas, une erreur 404 était renvoyée. Le comportement a été modifié pour rechercher un fichier d'index dans tous les cas.

FPM

La vidange des en-têtes sans corps réussira désormais.

La page d'état dispose d'un nouveau champ pour afficher un pic de mémoire.

La configuration /dev/poll de events.mechanism pour Solaris/Illumos a été retirée.

Fonctions changées

Core

trigger_error() et user_error() ont désormais un type de retour de true au lieu de bool.

DOM

DOMDocument::registerNodeClass() a désormais un type de retour de true au lieu de bool. Il pouvait retourner que true en pratique.

Hash

hash_update() a désormais un type de retour de true au lieu de bool. Il pouvait retourner que true en pratique.

Intl

NumberFormatter::ROUND_TOWARD_ZERO et NumberFormatter::ROUND_AWAY_FROM_ZERO ont été ajoutés en tant qu'alias pour NumberFormatter::ROUND_DOWN et NumberFormatter::ROUND_UP pour être cohérent avec les nouveaux modes PHP_ROUND_*.

ResourceBundle::get() a désormais un type de retour provisoire de ResourceBundle|array|string|int|null.

Les fonctions idn_to_ascii() et idn_to_utf8() lancent désormais toujours des exceptions ValueError si le nom de domain est vide ou trop long.

Les fonctions idn_to_ascii() et idn_to_utf8() lancent désormais toujours des exceptions ValueError si le paramètre variant n'est pas INTL_IDNA_VARIANT_UTS46.

LibXML

libxml_set_streams_context() lance désormais immédiatement une TypeError lorsqu'une ressource non contextuelle de flux est passée à la fonction, au lieu de lancer plus tard lorsque le contexte de flux est utilisé.

MBString

Le comportement de mb_strcut() est désormais plus cohérent sur les chaînes UTF-8 et UTF-16 invalides. Il n'y a pas de changement de comportement pour les chaînes UTF-8 et UTF-16 valides.

ODBC

Le row de odbc_fetch_object(), odbc_fetch_array(), de odbc_fetch_into() a désormais une valeur par défaut de null, restant cohérent avec odbc_fetch_row(). Auparavant, les valeurs par défaut étaient -1, -1, et 0, respectivement.

OpenSSL

L'extra_attributes dans openssl_csr_new() définit les attributs du CSR au lieu du DN du sujet, ce qui était incorrectement fait précédemment.

Le dn dans openssl_csr_new() permet de définir un array de valeurs pour une seule entrée.

Un nouveau serial_hex a été ajouté à openssl_csr_sign() pour permettre de définir des numéros de série au format hexadécimal.

Analyser un ASN.1 UTCTime avec openssl_x509_parse() échoue si les secondes sont omises pour les versions d'OpenSSL inférieures à 3.2 (-1 est retourné pour de tels champs). Les versions d'OpenSSL supérieures à 3.3 ne chargeaient déjà pas de tels certificats.

PDO

Il est désormais possible de récupérer la valeur de l'attribut PDO::ATTR_STRINGIFY_FETCHES avec PDO::getAttribute().

Une nouvelle constante PDO::PGSQL_ATTR_RESULT_MEMORY_SIZE a été ajoutée pour récupérer l'utilisation de la mémoire des résultats de requête avec PDO::getAttribute() pour les pilotes qui le prennent en charge.

PDO_FIREBIRD

Il est désormais possible de récupérer la valeur des attributs FB_ATTR_DATE_FORMAT, FB_ATTR_TIME_FORMAT, FB_ATTR_TIMESTAMP_FORMAT, avec PDO::getAttribute().

Ajout de nouveaux attributs pour spécifier le niveau d'isolation de transaction et le mode d'accès. Cinq constantes liées à cette fonctionnalité ont été ajoutées :

  • Pdo\Firebird::TRANSACTION_ISOLATION_LEVEL
  • Pdo\Firebird::READ_COMMITTED
  • Pdo\Firebird::REPEATABLE_READ
  • Pdo\Firebird::SERIALIZABLE
  • Pdo\Firebird::WRITABLE_TRANSACTION

Lors de l'utilisation de connexions persistantes, il y a maintenant une vérification de vivacité dans le constructeur.

Le contenu qui est construit change en fonction de la valeur de FB_API_VER dans ibase.h. Une nouvelle méthode statique Pdo\Firebird::getApiVersion() peut être utilisée pour obtenir cette information. Cette information est également maintenant référencée dans phpinfo().

Cinq nouveaux types de données sont désormais disponibles : INT128, DEC16, DEC34, TIMESTAMP_TZ, TIME_TZ . Ceux-ci sont disponibles à partir de Firebird 4.0.

PDO_MYSQL

Il est désormais possible de récupérer la valeur de l'attribut PDO::ATTR_FETCH_TABLE_NAMES avec PDO::getAttribute().

PDO_PGSQL

Support de la récupération de l'utilisation de la mémoire des requêtes pour PDO::PGSQL_ATTR_RESULT_MEMORY_SIZE.

Si la colone est de type FLOAT4OID ou FLOAT8OID la valeur sera maintenant retournée en tant que float au lieu d'une string.

PGSQL

Le paramètre conditions de pg_select() est désormais facultatif et accepte un tableau vide.

Phar

Les méthodes Phar::setAlias(), Phar::setDefaultStub() peuvent désormais avoir un type de retour provisoire de true au lieu de bool.

POSIX

posix_isatty() définit désormais le numéro d'erreur lorsque l'argument de descripteur de fichier/flux est invalide.

Reflection

ReflectionGenerator::getFunction() peut maintenant être appelé après que le générateur ait fini d'exécuter.

Sockets

Le paramètre backlog de socket_create_listen() a désormais une valeur par défaut de SOMAXCONN. Auparavant, c'était 128.

Sodium

Les fonctions sodium_crypto_aead_aes256gcm_()* sont désormais disponibles sur les processeurs aarch64 avec les extensions cryptographiques ARM.

SPL

Les méthodes SplPriorityQueue::insert(), SplPriorityQueue::recoverFromCorruption(), SplHeap::insert(), SplHeap::recoverFromCorruption() peuvent désormais avoir un type de retour provisoire de true à la place de bool.

SplObjectStorage implémente désormais SeekableIterator.

Standard

La valeur par défaut du 'cost' pour l'algorithme de hachage PASSWORD_BCRYPT utilisé par la fonction password_hash() a été augmentée de 10 à 12.

debug_zval_dump() indique désormais si un tableau est compacté.

long2ip() a désormais un type de retour de string à la place de string|false.

highlight_string() a désormais un type de retour de string|true à la place de string|bool.

print_r() a désormais un type de retour de string|true à la place de string|bool.

Arrondir avec round()

Le paramètre mode de la fonction round() a été étendu pour accepter RoundingMode|int, acceptant des instances d'un nouvel énumérateur RoundingMode.

Quatre nouveaux modes ont été ajoutés à la fonction round() : RoundingMode::PositiveInfinity, RoundingMode::NegativeInfinity, RoundingMode::TowardsZero, RoundingMode::AwayFromZero

L'implementation interne de l'arrondi aux entiers a été réécrite pour être plus facile à vérifier pour la correction et plus facile à maintenir. Quelques bugs d'arrondi ont été corrigés à la suite de la réécriture. Par exemple, auparavant, l'arrondi de 0.49999999999999994 à l'entier le plus proche aurait donné 1.0 au lieu du résultat correct 0.0. Des entrées supplémentaires pourraient également être affectées et donner des résultats différents par rapport aux versions PHP précédentes.

Correction d'un bug causé par l'arrondi "pré-arrondi" de la fonction round(). Auparavant, en utilisant "pré-arrondi" pour traiter une valeur comme 0.285 (en fait 0.28499999999999998) comme un nombre décimal et l'arrondir à 0.29. Cependant, "pré-arrondi" arrondit incorrectement certains nombres, donc cette correction supprime "pré-arrondi" et change la façon dont les nombres sont comparés, donc les valeurs sont correctement arrondies en tant que nombres décimaux.

Le nombre maximum de chiffres significatifs que round() peut gérer a été étendu d'un chiffre. Par exemple, round(4503599627370495.5) retournait 4503599627370495.5, mais retourne maintenant 4503599627370496.

Autres changements aux extensions

cURL

Le minimum de la version de libcurl requise est désormais 7.61.0.

L'option CURLOPT_DNS_USE_GLOBAL_CACHE n'a plus aucun effet et est silencieusement ignorée. Cette fonctionnalité sous-jacente a été dépréciée dans libcurl 7.11.1, et supprimée dans libcurl 7.62.0.

GMP

Changer de type d'un objet GMP en bool est désormais possible au lieu de générer une E_RECOVERABLE_ERROR. Le comportement de conversion est surchargé de sorte qu'un objet GMP représentant la valeur 0 est converti en false.

LibXML

Le minimum de la version de libxml2 requise est désormais 2.9.4.

Intl

Le comportement de la classe Intl a été normalisé pour toujours lancer des exceptions Error lors de la tentative d'utilisation d'un objet non initialisé, ou lorsque le clonage échoue.

MBString

Les tables de données Unicode ont été mises à jour en Unicode 16.0.

MySQLnd

Le support pour le nouveau type de données VECTOR de MySQL 9 a été ajouté.

OpenSSL

Le minimum de la version d'OpenSSL requise est désormais 1.1.1.

PDO_PGSQL

Le minimum de la version de libpq requise est désormais 10.0.

PGSQL

Le minimum de la version de libpq requise est désormais 10.0.

SPL

Les accès hors limites dans SplFixedArray lancent désormais des exceptions de type OutOfBoundsException au lieu de RuntimeException. Car OutOfBoundsException est une classe enfant de RuntimeException, aucun changement de comportement n'est observé lors de la tentative de capture de ces exceptions.

XSL

Les propriétés typées XSLTProcessor::$cloneDocument et XSLTProcessor::$doXInclude sont désormais déclarées.

Zlib

Le minimum de la version de zlib requise est désormais 1.2.11.

Performance

Core

Augmentation de la performance de l'analyse et de la génération de nombres à virgule flottante dans les constructions ZTS sous des charges très concurrentes. Cela affecte les fonctions printf() ainsi que les fonctions de sérialisation tel que json_encode() ou serialize().

sprintf() utilisant uniquement %s et l'interpolation de chaîne %d sera compilé en l'interpolation de chaîne équivalente, évitant les frais généraux d'un appel de fonction et l'analyse répétée de la chaîne de format.

BCMath

Augmentation de la performance des conversions de nombres et des opérations.

DOM

La performance de DOMNode::C14N() est grandement améliorée pour le cas sans requête xpath. Cela peut donner une amélioration de temps de facilement deux ordres de grandeur pour les documents avec des dizaines de milliers de nœuds.

Augmentation de la performance et réduction de la consommation de mémoire de la sérialisation XML.

Réduction de la consommation de mémoire des classes de nœuds.

FTP

Augmentation de la performance des téléversements FTP jusqu'à un facteur de 10x pour les téléversements volumineux.

Hash

Ajout des implémentations SSE2 et SHA-NI de SHA-256. Cela améliore les performances sur les processeurs pris en charge de ~1.3x (SSE2), et 3x - 5x (SHA-NI). Crédit à Colin Percival / Tarsnap pour cette optimisation.

MBString

mb_strcut() est désormais beaucoup plus rapide pour les chaînes UTF-8 et UTF-16.

La recherche des noms d'encodage mbstring est désormais beaucoup plus rapide.

La performance de la conversion de SJIS-win en Unicode est grandement améliorée.

MySQLnd

Augmentation de la performance de la cotation MySQLnd.

PCRE

Augmentation de la performance des groupes de capture nommés.

Random

Augmentation de la performance de Random\Randomizer, avec un accent spécifique sur les méthodes Random\Randomizer::getBytes(), et Random\Randomizer::getBytesFromString()().

SimpleXML

Augmentation de la performance et reduction de la consommation de mémoire de la sérialisation XML.

Standard

Les performances de strspn() et strcspn() sont grandement améliorées. Elles s'exécutent désormais en temps linéaire au lieu d'être bornées par un temps quadratique.

Augmentation de la performance de strpbrk().

get_browser() est désormais beaucoup plus rapide, jusqu'à 1.5x - 2.5x pour certains cas de test.

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top