From ae8db07352846bb5f0964196e58e21ca9341250e Mon Sep 17 00:00:00 2001 From: lacatoire Date: Mon, 26 Oct 2026 07:58:30 +0100 Subject: [PATCH] [Sync-En] ini: memory_hard_limit_percent and host- and path-specific sections --- appendices/ini.core.xml | 116 +++++++++++++++++++++++++++++++++++- appendices/ini.list.xml | 88 ++++++++++++++------------- appendices/ini.sections.xml | 18 +++++- 3 files changed, 179 insertions(+), 43 deletions(-) diff --git a/appendices/ini.core.xml b/appendices/ini.core.xml index 614d12296d..502ec6ce32 100644 --- a/appendices/ini.core.xml +++ b/appendices/ini.core.xml @@ -1,5 +1,5 @@ - +
@@ -398,6 +398,12 @@ Fatal error: Maximum execution time of 30+2 seconds exceeded (terminated) in Unk INI_SYSTEM Disponible a partir de PHP 8.5.0 + + memory_hard_limit_percent + &null; + INI_ALL + Disponible a partir de PHP 8.5.12, 8.4.27, 8.3.36 y 8.2.35 + @@ -416,6 +422,16 @@ Fatal error: Maximum execution time of 30+2 seconds exceeded (terminated) in Unk Esta opción determina la memoria límite, en bytes, que un script está permitido asignar. Esto evita que un script mal codificado use toda la memoria. Tenga en cuenta que para no tener ningún límite, debe establecer esta directiva en -1. + + A partir de PHP 8.5.12, 8.4.27, 8.3.36 y 8.2.35, este es un límite + flexible: una asignación que lo supera puede, en la mayoría de los + casos, completarse antes de que se produzca el error fatal, por lo que + el uso de memoria de un proceso puede superar brevemente + memory_limit. Un límite estricto independiente, + controlado por + memory_hard_limit_percent, + acota cuánto puede superarse. + &ini.shorthandbytes; @@ -443,6 +459,104 @@ Fatal error: Maximum execution time of 30+2 seconds exceeded (terminated) in Unk + + + memory_hard_limit_percent + int + + + + Disponible a partir de PHP 8.5.12, 8.4.27, 8.3.36 y 8.2.35. Establece + un límite estricto de memoria, expresado como porcentaje de + memory_limit. + Por ejemplo, con memory_limit=128M y + memory_hard_limit_percent=150, el límite estricto es + 192M. A diferencia de + memory_limit, el límite + estricto nunca puede superarse. + + + + Esta directiva se introdujo en las versiones de seguridad del + 21 de octubre de 2026, que corrigen dos vulnerabilidades críticas + (CVE-2026-109618, CVE-2026-109619) que pueden permitir la ejecución + remota de código sin autenticación, una de ellas desencadenada a + través del manejo de la falta de memoria. Si esta directiva no se + reconoce, la versión de PHP en uso está afectada por estas + vulnerabilidades y debe actualizarse de inmediato. Consulte el + aviso de seguridad + para obtener más detalles. + + + + Cuando una asignación supera memory_limit + (el límite flexible), la memoria se asigna de todos modos, y el error + fatal habitual se produce cuando el motor alcanza un punto seguro. + Las funciones de cierre registradas con + register_shutdown_function se siguen ejecutando. + + + Cuando una asignación superaría el límite estricto, el proceso se + termina inmediatamente con el código de salida 137. + Se escribe un mensaje directamente en el flujo de error estándar, con + un aspecto similar al siguiente: + + + + + + El mensaje no pasa por el mecanismo de gestión de errores, por lo que + no se transmite a los manejadores de errores ni se escribe en el + error_log. No se ejecuta más + código PHP: las funciones de cierre, los destructores y los manejadores + del búfer de salida se omiten por completo. + + + El valor debe ser 100 o mayor, o + -1. + + + Cuando no está establecida (el valor por defecto) o está establecida a + -1, el límite estricto es el doble de + memory_limit + si memory_limit es + 1G o menos, y + memory_limit más + 1G en caso contrario. Por ejemplo, con el valor + predeterminado memory_limit=128M, el límite estricto + es 256M, y con memory_limit=4G + es 5G. Si + memory_limit está establecida a + -1, tampoco hay límite estricto. + + + + Un valor de 100 hace que el límite estricto sea + igual a memory_limit, lo que + convierte la mayoría de las condiciones de falta de memoria en una + terminación inmediata del proceso en lugar de un error fatal. El + trabajo de cierre, como el registro, la liberación de bloqueos o la + finalización de una respuesta, nunca se ejecutará entonces ante una + falta de memoria. + + + + + Como el proceso termina sin producir salida, en entornos de múltiples + peticiones como PHP-FPM el worker que atiende la petición se termina + y el cliente no recibe ninguna respuesta de PHP; el gestor de procesos + inicia un worker de reemplazo. El código de salida + 137 es también el que se informa para un proceso + terminado por SIGKILL, por ejemplo por el OOM killer + del kernel o por un entorno de ejecución de contenedores, por lo que + conviene comprobar el flujo de error estándar para distinguir los + casos. + + + + diff --git a/appendices/ini.list.xml b/appendices/ini.list.xml index 6dac84b217..328876f736 100644 --- a/appendices/ini.list.xml +++ b/appendices/ini.list.xml @@ -1,5 +1,5 @@ - +
Lista de directivas del &php.ini; @@ -109,7 +109,7 @@ INI_PERDIR - + browscap &null; @@ -164,12 +164,12 @@ INI_ALL - - - - - - + + + + + + default_charset "UTF-8" @@ -298,14 +298,14 @@ INI_ALL - + exit_on_timeout "" INI_ALL - + expose_php "1" @@ -342,15 +342,15 @@ INI_SYSTEM - + from "" INI_ALL - - + + hard_timeout "2" @@ -393,9 +393,9 @@ INI_ALL - - - + + + ignore_repeated_errors "0" @@ -426,14 +426,14 @@ INI_ALL - + last_modified "0" INI_ALL - + log_errors "0" @@ -488,21 +488,27 @@ INI_PERDIR - - - + + + memory_limit "128M" INI_ALL - - - - - - + + memory_hard_limit_percent + &null; + INI_ALL + Disponible a partir de PHP 8.5.12, 8.4.27, 8.3.36 y 8.2.35. + + + + + + + open_basedir &null; @@ -521,11 +527,11 @@ INI_PERDIR - - - - - + + + + + post_max_size "8M" @@ -574,7 +580,7 @@ INI_PERDIR - + sendmail_from &null; @@ -595,7 +601,7 @@ Anterior a PHP 7.1.0, el valor predeterminado era 17. - + short_open_tag "1" @@ -614,14 +620,14 @@ INI_ALL - + sql.safe_mode "0" INI_SYSTEM Eliminado a partir de PHP 7.2.0 - + syslog.facility "LOG_USER" @@ -646,15 +652,15 @@ INI_SYSTEM - - + + track_errors "0" INI_ALL Obsoleto a partir de PHP 7.2.0, eliminado a partir de PHP 8.0.0. - + uploadprogress.file.filename_template "/tmp/upt_%s.txt" @@ -715,7 +721,7 @@ INI_SYSTEM - + variables_order "EGPCS" @@ -818,7 +824,7 @@ &php.ini; solo - + diff --git a/appendices/ini.sections.xml b/appendices/ini.sections.xml index 4dfc0f4ea8..ee21c1721c 100644 --- a/appendices/ini.sections.xml +++ b/appendices/ini.sections.xml @@ -1,6 +1,6 @@ - +
@@ -19,6 +19,22 @@ directivas de extensión ni de zend_extension. + + Las directivas establecidas en estas secciones no pueden ser sobrescritas por + ficheros .user.ini + ni en tiempo de ejecución, como las establecidas con + php_admin_value. + + + Independientemente de su orden en &php.ini;, + [PATH=] tiene prioridad sobre + [HOST=], + y una ruta más profunda tiene prioridad sobre una menos profunda. + Con PHP-FPM, + estas secciones también tienen prioridad sobre la configuración del pool + y los parámetros de FastCGI, incluidos php_admin_value + y PHP_ADMIN_VALUE. + Secciones