PHP 8.5.0 Released!

Autres changements

Core changes

Core

Le minuteur haute résolution (hrtime()) sur macOS utilise désormais l'API recommandée clock_gettime_nsec_np(CLOCK_UPTIME_RAW) au lieu de mach_absolute_time().

CGI/CLI

L'option -z ou --zend-extension a été supprimée car elle n'était pas fonctionnelle. Utilisez plutôt -d zend_extension=[chemin].

PDO_ODBC

Le comportement de récupération pour les colonnes plus grandes a été modifié. Plutôt que de récupérer des blocs de 256 octets, PDO_ODBC essaiera de récupérer une taille de bloc plus grande ; actuellement, il s'agit de la taille de la page moins la surcharge de la chaîne. Les pilotes qui renvoient SQL_NO_TOTAL dans SQLGetData sont également mieux gérés. Cela devrait améliorer la compatibilité et les performances.

Changements dans les modules SAPI

CLI

Tenter de définir un titre de processus trop long avec cli_set_process_title() échouera désormais au lieu de tronquer silencieusement le titre donné.

Une nouvelle option --ini=diff a été ajoutée pour afficher les paramètres INI modifiés par rapport à la valeur par défaut intégrée.

FPM

FPM avec httpd ProxyPass décode éventuellement le chemin complet du script. Ajout du paramètre INI fastcgi.script_path_encoded pour empêcher ce nouveau comportement.

La limite du journal d'accès FPM respecte désormais la valeur de log_limit.

Fonctions modifiées

Intl

grapheme_extract() assigne correctement la valeur $next lorsqu'il saute des octets de départ invalides. Auparavant, il y avait des cas où il pointait vers le début de la limite du grapheme au lieu de la fin.

transliterator_get_error_code(), transliterator_get_error_message(), TransLiterator::getErrorCode(), et TransLiterator::getErrorMessage() ne renvoient plus false? Renvoyer false n'était en fait jamais possible.

Les fonctions suivantes supportent désormais un argument $locale : grapheme_strpos(), grapheme_stripos(), grapheme_strrpos(), grapheme_strripos(), grapheme_substr(), grapheme_strstr() et grapheme_stristr()

LDAP

ldap_get_option() accepte désormais une connexion null, comme ldap_set_option(), pour permettre la récupération des options globales.

libxml

libxml_set_external_entity_loader() a désormais un type de retour formel de true.

OpenSSL

openssl_public_encrypt() et openssl_private_decrypt() ont un nouveau paramètre $digest_algo qui permet de spécifier l'algorithme de hachage pour le padding OAEP.

openssl_sign() et openssl_verify() ont un nouveau paramètre $padding pour permettre l'utilisation d'un padding RSA PSS plus sécurisé.

Le paramètre $cipher_algo de openssl_cms_encrypt() peut être une chaîne avec le nom du chiffrement. Cela permet d'utiliser plus d'algorithmes, y compris les algorithmes de chiffrement AES GCM pour les données enveloppées authentifiées.

PCNTL

pcntl_exec() a désormais un type de retour formel de false.

pcntl_waitid() prend un argument supplémentaire resource_usage pour recueillir diverses métriques spécifiques à la plateforme sur le processus enfant.

PDO_PGSQL

Pdo\Pgsql::copyFromArray() supporte désormais les entrées de type iterable.

Pdo\Pgsql::setAttribute() et Pdo\Pgsql::prepare() supportent la définition de PDO::ATTR_PREFETCH à 0, ce qui active le mode de récupération paresseuse. Dans ce mode, les instructions ne peuvent pas être exécutées en parallèle.

PostgreSQL

pg_copy_from() supporte désormais les entrées de type iterable.

pg_connect() vérifie si l'argument connection_string contient un octet nul.

pg_close_stmt() vérifie si l'argument statement_name contient un octet nul.

POSIX

posix_ttyname() définit last_error à EBADF lorsqu'il rencontre un descripteur de fichier invalide.

posix_isatty() génère un message E_WARNING lorsqu'il rencontre un descripteur de fichier invalide.

posix_fpathconf() vérifie les descripteurs de fichiers invalides et définit last_error à EBADF et génère un E_WARNING.

Reflection

La sortie de ReflectionClass::__toString() pour les enums a changé pour mieux indiquer que la classe est un enum, et que les cas d'enum sont des cas d'enum plutôt que des constantes de classe normales.

La sortie de ReflectionProperty::__toString() pour les propriétés avec hooks a changé pour indiquer quels hooks la propriété possède, que ces hooks soit finals, et si la propriété est virtuelle. Cela affecte également la sortie de ReflectionClass::__toString() lorsqu'une classe contient des propriétés avec hooks.

Sockets

socket_create()/socket_bind() peuvent créer des sockets de la famille AF_PACKET.

socket_getsockname() obtient l'index de l'interface et sa représentation sous forme de chaîne avec un socket AF_PACKET.

Zlib

L'arguement $use_include_path des fonctions gzfile(), gzopen() et readgzfile() a été changé de int à bool.

Les fonctions gzfile(), gzopen() et readgzfile() ont désormais le comportement attendu avec le contexte de flux par défaut.

Autres changements aux l'extensions

cURL

curl_setopt() avec la valeur d'option CURLOPT_FOLLOWLOCATION n'est plus traitée comme un booléen mais comme un entier pour gérer CURLFOLLOW_OBEYCODE et CURLFOLLOW_FIRSTONLY.

Fileinfo

Mise à jour de file de 5.45 à 5.46.

Le type de retour de finfo_open() a été changé en finfo au lieu de resource.

Intl

Le mécanisme d'erreur interne d'Intl a été modernisé pour indiquer plus précisément quel site d'appel a causé quelle erreur. De plus, certaines exceptions ext/date ont été encapsulées dans une IntlException maintenant.

Lexbor

Une extension lexbor toujours activée a été ajoutée. Elle contient la bibliothèque lexbor qui a été séparée de ext/dom pour être réutilisée parmi d'autres extensions. La nouvelle extension n'est pas directement exposée à l'espace utilisateur.

Opcache

L'extension Opcache est désormais toujours construite dans le binaire PHP et est toujours chargée. Les directives INI opcache.enable et opcache.enable_cli sont toujours respectées.

PCRE

Mise à jour de pcre2lib de 10.44 à 10.46.

PDO_Sqlite

Mise à jour de la version minimale prise en charge de 3.7.7 à 3.7.17.

Readline

Les types de retour de readline_add_history(), readline_clear_history(), et readline_callback_handler_install() ont été changés en true, plutôt que bool.

Reflection

ReflectionConstant n'est plus finale.

Changements dans la gestion des fichiers INI

Core

Ajout de fatal_error_backtraces pour contrôler si les erreurs fatales doivent inclure une trace.

Ajout de la directive INI max_memory_limit, disponible uniquement au démarrage, pour contrôler la valeur maximale de memory_limit pouvant être configurée au démarrage ou à l'exécution. Dépasser cette valeur émet un avertissement, sauf si elle est définie à -1, et définit memory_limit sur la valeur actuelle de max_memory_limit à la place.

Opcache

Ajout de opcache.file_cache_read_only pour prendre en charge un répertoire opcache.file_cache en lecture seule, pour une utilisation avec des systèmes de fichiers en lecture seule (par exemple, des conteneurs Docker en lecture seule). À utiliser de préférence avec opcache.validate_timestamps=0, opcache.enable_file_override=1, et opcache.file_cache_consistency_checks=0.

Note: Un cache généré avec une version différente de PHP, un chemin de fichier différent, ou des paramètres différents (y compris les extensions chargées), peut être ignoré.

La valeur par défaut de opcache.jit_hot_loop est désormais 61 (un nombre premier) pour éviter qu'elle soit un multiple du nombre d'itérations de boucle. Il est recommandé que ce paramètre soit défini sur un nombre premier.

La modification de opcache.memory_consumption lorsque la mémoire partagée OPcache est déjà configurée signalera désormais correctement un échec au lieu de ne rien faire silencieusement et d'afficher des valeurs trompeuses dans PHPInfo.

OpenSSL

Ajout de openssl.libctx pour sélectionner le type de contexte de la bibliothèque OpenSSL. Soit un libctx personnalisé pour chaque thread peut être utilisé, soit un seul libctx global (par défaut) est utilisé.

Performance

Core

Suppression des OPcodes pour les comparaisons d'identité avec des booléens, en particulier pour le modèle match(true).

Ajout de la spécialisation des OPcodes pour les comparaisons === [] et !== [].

La création des objets exception est désormais beaucoup plus rapide.

Les parties du code qui utilisaient SSE2 ont été adaptées pour utiliser SIMD avec ARM NEON également.

Introduction de la machine virtuelle TAILCALL, activée par défaut lors de la compilation avec Clang>=19 sur x86_64 ou aarch64. La machine virtuelle TAILCALL est aussi rapide que la machine virtuelle HYBRID utilisée lors de la compilation avec GCC. Cela rend les binaires PHP construits avec Clang>=19 aussi rapides que les binaires construits avec GCC. Les performances de la machine virtuelle CALL, utilisée avec d'autres compilateurs, se sont également considérablement améliorées.

Intl

Désormais ne créer plus de copies de chaînes supplémentaires lors de la conversion des chaînes pour une utilisation dans le collateur.

MBString

Les parties du code qui utilisaient SSE2 ont été adaptées pour utiliser SIMD avec ARM NEON également.

Opcache

Augmentation des performances de l'accès aux variables TLS dans le code JITé dans les builds Glibc.

SPL

Augmentation des performances des accesseurs de dimensions et des méthodes de SplFixedArray.

Standard

Augmentation des performances des fonctions de tableau avec des callbacks (array_find(), array_filter(), array_map(), usort(), ...).

Augmentation des performances de urlencode() et rawurlencode().

Augmentation des performances de unpack() avec des répétitions anonymes en évitant de créer des chaînes temporaires et de les reparcourir.

Augmentation des performances de pack().

Augmentation mineure des performances de array_chunk().

XML

Augmentation des performances de l'accès aux propriétés de XMLReader.

Augmentation des performances de XMLWriter et réduction de la consommation mémoire.

add a note

User Contributed Notes

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