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.
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.
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.
Les méthodes suivantes ont désormais des types de retour provisoires static :
Le type de retour de filter_var_array() a été restreint
de
array|false|null
à array|false.
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.
Le type de retour de ldap_free_result() a été restreint
de bool à true.
La fonction retournait déjà toujours true.
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.
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_*.
Lors de l'utilisation de connexions persistantes, une vérification de disponibilité de la connexion est désormais effectuée dans PDO::__construct().
Phar::mungServer() prend désormais en charge les valeurs par référence.
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.
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().
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 ?int à
int.
Tous les chemins d'échec lancent une
ValueError à partir de PHP 8.0.0, null n'était
donc jamais retourné.
Le type de retour de zip_entry_close() a été restreint
de bool à true.
La fonction retournait déjà toujours true.
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.
La version intégrée de xxHash a été mise à jour vers 0.8.2.
Ajout de la nouvelle constante MYSQLI_OPT_COMPRESS.
Le JIT est désormais pris en charge pour les compilations ZTS sur Apple Silicon.
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.
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.default_port vérifie
désormais la validité de la valeur, qui doit être comprise entre
0 et 65535 inclus.
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.
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 :
intval('0b...', 2) et intval('+0b...', 2)1DOMText::splitText() et Dom\Text::splitText() sont plus rapides et consomment moins de mémoire.
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.
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().
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.
Amélioration des performances de mb_str_pad().
Réduction des allocations temporaires lors de l'itération sur les répertoires Phar.
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.
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().