diff --git a/appendices/ini.core.xml b/appendices/ini.core.xml index a01ed2a3a0..d45f9170cd 100644 --- a/appendices/ini.core.xml +++ b/appendices/ini.core.xml @@ -1,5 +1,5 @@ - +
Description des directives internes du &php.ini; @@ -461,6 +461,12 @@ Fatal error: Maximum execution time of 30+2 seconds exceeded (terminated) in Unk INI_SYSTEM Disponible à partir de PHP 8.5.0 + + memory_hard_limit_percent + &null; + INI_ALL + Disponible à partir de PHP 8.5.12, 8.4.27, 8.3.36 et 8.2.35 + @@ -482,6 +488,16 @@ Fatal error: Maximum execution time of 30+2 seconds exceeded (terminated) in Unk la mémoire par un script mal codé. Il est à noter que pour n'avoir aucune limite, il faut définir cette directive à -1. + + À partir de PHP 8.5.12, 8.4.27, 8.3.36 et 8.2.35, il s'agit d'une limite + souple : une allocation qui la franchit est, dans la plupart des cas, + autorisée à se terminer avant que l'erreur fatale ne soit levée, de sorte + que l'utilisation mémoire d'un processus peut brièvement dépasser + memory_limit. Une limite stricte distincte, + contrôlée par + memory_hard_limit_percent, + borne l'ampleur de ce dépassement. + &ini.shorthandbytes; @@ -510,6 +526,104 @@ Fatal error: Maximum execution time of 30+2 seconds exceeded (terminated) in Unk + + + memory_hard_limit_percent + int + + + + Disponible à partir de PHP 8.5.12, 8.4.27, 8.3.36 et 8.2.35. Définit + une limite mémoire stricte, exprimée en pourcentage de + memory_limit. + Par exemple, avec memory_limit=128M et + memory_hard_limit_percent=150, la limite stricte est de + 192M. Contrairement à + memory_limit, la limite stricte + ne peut jamais être dépassée. + + + + Cette directive a été introduite dans les versions de sécurité du + 21 octobre 2026, qui corrigent deux vulnérabilités critiques + (CVE-2026-109618, CVE-2026-109619) pouvant permettre une exécution de + code à distance sans authentification, l'une d'elles étant déclenchée + par la gestion des dépassements de mémoire. Si cette directive n'est + pas reconnue, la version de PHP utilisée est affectée par ces + vulnérabilités et doit être mise à jour immédiatement. Consulter + l'avis de sécurité + pour plus de détails. + + + + Lorsqu'une allocation dépasse memory_limit + (la limite souple), la mémoire est tout de même allouée, et l'erreur + fatale habituelle est levée dès que le moteur atteint un point sûr. + Les fonctions d'arrêt enregistrées avec + register_shutdown_function sont toujours exécutées. + + + Lorsqu'une allocation dépasserait la limite stricte, le processus est + immédiatement terminé avec le code de sortie 137. + Un message est écrit directement sur le flux d'erreur standard, + ressemblant à ceci : + + + + + + Le message ne passe pas par le mécanisme de gestion des erreurs : il + n'est donc pas transmis aux gestionnaires d'erreurs ni écrit dans + error_log. Plus aucun code PHP + n'est exécuté : les fonctions d'arrêt, les destructeurs et les + gestionnaires de tampon de sortie sont tous ignorés. + + + La valeur doit être supérieure ou égale à 100, ou + égale à -1. + + + Lorsque cette directive n'est pas définie (valeur par défaut) ou vaut + -1, la limite stricte est égale au double de + memory_limit si + memory_limit vaut + 1G ou moins, et à + memory_limit plus + 1G dans le cas contraire. Par exemple, avec la valeur + par défaut memory_limit=128M, la limite stricte est de + 256M, et avec memory_limit=4G + elle est de 5G. Si + memory_limit vaut + -1, il n'y a pas non plus de limite stricte. + + + + Une valeur de 100 rend la limite stricte égale à + memory_limit, ce qui transforme + la plupart des dépassements de mémoire en une terminaison immédiate du + processus au lieu d'une erreur fatale. Les traitements de fin de + requête, tels que la journalisation, la libération de verrous ou + l'achèvement d'une réponse, ne seront alors jamais exécutés en cas de + dépassement de mémoire. + + + + + Comme le processus se termine sans produire de sortie, dans les + environnements qui traitent plusieurs requêtes par processus, tels que + PHP-FPM, le worker qui traite la requête est terminé et le client ne + reçoit aucune réponse de PHP ; le gestionnaire de processus démarre un + worker de remplacement. Le code de sortie 137 est + aussi celui rapporté pour un processus tué par + SIGKILL, par exemple par l'OOM killer du noyau ou + par un environnement d'exécution de conteneurs : il faut donc consulter + le flux d'erreur standard pour distinguer les cas. + + + + diff --git a/appendices/ini.list.xml b/appendices/ini.list.xml index d5856995ab..fc07917b22 100644 --- a/appendices/ini.list.xml +++ b/appendices/ini.list.xml @@ -1,6 +1,5 @@ - - +
Liste des directives du &php.ini; @@ -110,7 +109,7 @@ INI_PERDIR - + browscap &null; @@ -165,12 +164,12 @@ INI_ALL - - - - - - + + + + + + default_charset "UTF-8" @@ -299,14 +298,14 @@ INI_ALL - + exit_on_timeout "" INI_ALL - + expose_php "1" @@ -343,15 +342,15 @@ INI_SYSTEM - + from "" INI_ALL - - + + hard_timeout "2" @@ -394,9 +393,9 @@ INI_ALL - - - + + + ignore_repeated_errors "0" @@ -427,14 +426,14 @@ INI_ALL - + last_modified "0" INI_ALL - + log_errors "0" @@ -489,21 +488,27 @@ INI_PERDIR - - - + + + memory_limit "128M" INI_ALL - - - - - - + + memory_hard_limit_percent + &null; + INI_ALL + Disponible à partir de PHP 8.5.12, 8.4.27, 8.3.36 et 8.2.35. + + + + + + + open_basedir &null; @@ -522,11 +527,11 @@ INI_PERDIR - - - - - + + + + + post_max_size "8M" @@ -575,7 +580,7 @@ INI_PERDIR - + sendmail_from &null; @@ -596,7 +601,7 @@ Antérieur à PHP 7.1.0, la valeur par défaut était 17. - + short_open_tag "1" @@ -615,14 +620,14 @@ INI_ALL - + sql.safe_mode "0" INI_SYSTEM Supprimé à partir de PHP 7.2.0 - + syslog.facility "LOG_USER" @@ -647,15 +652,15 @@ INI_SYSTEM - - + + track_errors "0" INI_ALL Obsolète à partir de PHP 7.2.0, supprimée à partir de PHP 8.0.0 - + uploadprogress.file.filename_template "/tmp/upt_%s.txt" @@ -719,7 +724,7 @@ INI_SYSTEM - + variables_order "EGPCS" @@ -822,7 +827,7 @@ &php.ini; uniquement - + diff --git a/appendices/ini.sections.xml b/appendices/ini.sections.xml index 5c09fd9556..060f2f42e9 100644 --- a/appendices/ini.sections.xml +++ b/appendices/ini.sections.xml @@ -1,7 +1,5 @@ - - - +
Liste des sections du fichier &php.ini; @@ -19,6 +17,22 @@ pas définir des directives extension et zend_extension. + + Les directives définies dans ces sections ne peuvent pas être écrasées par + des fichiers .user.ini + ni à l'exécution, comme celles définies avec + php_admin_value. + + + Quel que soit leur ordre dans le &php.ini;, + [PATH=] est prioritaire sur + [HOST=], + et un chemin plus profond sur un chemin moins profond. + Avec PHP-FPM, + ces sections sont également prioritaires sur la configuration du pool + et les paramètres FastCGI, y compris php_admin_value + et PHP_ADMIN_VALUE. + Sections diff --git a/language/functions.xml b/language/functions.xml index 6a779e5d15..18f6b87b1b 100644 --- a/language/functions.xml +++ b/language/functions.xml @@ -1,5 +1,5 @@ - + Les fonctions @@ -764,7 +764,14 @@ var_dump(foo(...[1, 2], b: 20)); // Erreur fatale. Le paramètre nommé $b écra ]]> - + + + Certaines fonctions internes documentent une signature alternative, comme + session_set_save_handler, dont les noms de paramètres + n'existent pas dans la fonction elle-même. Ces noms ne peuvent pas être + utilisés comme arguments nommés et provoquent une erreur. + + diff --git a/reference/session/functions/session-set-save-handler.xml b/reference/session/functions/session-set-save-handler.xml index 1dee618db1..784a1cd3ae 100644 --- a/reference/session/functions/session-set-save-handler.xml +++ b/reference/session/functions/session-set-save-handler.xml @@ -1,5 +1,5 @@ - + @@ -21,9 +21,7 @@ callablevalidate_sid callableupdate_timestamp - - Il est possible d'enregistrer le prototype suivant : - + Signature alternative (non prise en charge avec les arguments nommés) : boolsession_set_save_handler objectsessionhandler