From ac852291d0da5dcbf4e2db8e72a389fa9aadfd4e Mon Sep 17 00:00:00 2001 From: Louis-Arnaud Date: Thu, 1 Oct 2026 08:50:36 +0200 Subject: [PATCH 1/2] [Sync-En] security: fix typos and grammar --- security/apache.xml | 15 ++++++----- security/cgi-bin.xml | 56 ++++++++++++++++++++--------------------- security/current.xml | 5 ++-- security/database.xml | 55 ++++++++++++++++++++-------------------- security/errors.xml | 25 +++++++++--------- security/filesystem.xml | 33 ++++++++++++------------ security/general.xml | 5 ++-- security/hiding.xml | 11 ++++---- security/intro.xml | 13 +++++----- security/variables.xml | 15 ++++++----- 10 files changed, 112 insertions(+), 121 deletions(-) diff --git a/security/apache.xml b/security/apache.xml index c3e246edc2..f8423160e0 100644 --- a/security/apache.xml +++ b/security/apache.xml @@ -1,7 +1,6 @@ - - - + + Instalado como módulo de Apache @@ -24,19 +23,19 @@ Con frecuencia, una vez la seguridad se ha establecido en un punto - en donde el usuario de PHP (en este caso, el usuario de apache) + en donde el usuario de PHP (en este caso, el usuario de Apache) tiene asociada muy poco riesgo, se descubre que PHP se encuentra ahora imposibilitado de escribir archivos en los directorios de los usuarios. O quizás se le haya desprovisto de la capacidad de acceder o modificar bases de - datos. Se ha prevenido que pudiera escribir tanto - archivos buenos como malos, o que pudiera realizar transacciones + datos. Se le ha impedido escribir tanto + archivos buenos como malos, o realizar transacciones buenas o malas en la base de datos. Un error de seguridad cometido con frecuencia en este punto es - darle permisos de administrador (root) a apache, o incrementar las - habilidades del usuario de apache de alguna otra forma. + darle permisos de administrador (root) a Apache, o incrementar las + habilidades de Apache de alguna otra forma. Incrementar los permisos del usuario de Apache hasta el nivel de diff --git a/security/cgi-bin.xml b/security/cgi-bin.xml index d8316dd641..6a8b945956 100644 --- a/security/cgi-bin.xml +++ b/security/cgi-bin.xml @@ -1,9 +1,9 @@ - + - + - Instalado como CGI binario + Instalado como binario CGI Ataques posibles @@ -15,9 +15,9 @@ seguros chroot y setuid para scripts. Esta configuración usualmente involucra la instalación del binario ejecutable de php en el directorio cgi-bin - del servidor web. La recomendación CA-96.11 del CERT recomienda - que está en contra de colocar cualquiera de los intérpretes dentro de cgi-bin. - Aún si el binario de php puede ser usado como un intérprete independiente, PHP está diseñado + del servidor web. El aviso CA-96.11 del CERT recomienda + no colocar ningún intérprete dentro de cgi-bin. + Incluso si el binario de php puede ser usado como un intérprete independiente, PHP está diseñado para prevenir los ataques que esta configuración hace posible: @@ -56,11 +56,11 @@ petición redirigida http://mi.servidor/cgi-bin/php/directorio/secreto/script.php. Desafortunadamente, si la petición es proporcionada originalmente en esta forma, - no se revisan los accesos a los directorios hechos por el servidor web /directorio/secreto/script.php, sino solamente al fichero - /cgi-bin/php. De esta forma - /cgi-bin/php cualquier usuario está habilitado a acceder - a cualquier documento protegido en el servidor web. + el servidor web no realiza comprobaciones de acceso para el fichero /directorio/secreto/script.php, sino solamente para el fichero + /cgi-bin/php. De esta forma, + cualquier usuario con acceso a /cgi-bin/php puede acceder + a cualquier documento protegido del servidor web. En PHP, las directivas de configuración en tiempo de ejecución cgi.force_redirect. Usted todavía tiene que asegurarse que sus - scripts de PHP no confían en una forma o en otra para llamar el script, + comunicar al binario de PHP que la petición es una petición redirigida de + forma segura, puede habilitar la directiva ini cgi.force_redirect. Usted todavía tiene que asegurarse de que sus + scripts de PHP no dependen de una u otra forma de llamar al script, ni directamente http://mi.servidor/cgi-bin/php/directorio/script.php ni por redirección http://mi.servidor/cgi-bin/php/directoriosecreto/script.php. - En cambio, php solamente lo analizará en este modo si éste se ha ido a través de - una regla directa del servidor web. + En cambio, php solamente lo analizará en este modo si ha pasado por + una regla de redirección del servidor web. Usualmente la redirección en la configuración de Apache se hace con @@ -120,8 +120,8 @@ AddHandler php-script .php Esta opción ha sido probada solamente con el servidor web Apache, y - se basa en que en Apache se configure en una variable de entorno no-estándar de CGI - REDIRECT_STATUS para peticiones de redirección. Si su + se basa en que Apache defina la variable de entorno CGI no estándar + REDIRECT_STATUS en las peticiones redirigidas. Si su servidor web no soporta ninguna forma de decirle si la petición es directa o redirigida, usted no puede utilizar esta opción y debe usar una de las otras formas de ejecutar la versión CGI aquí documentadas. @@ -133,16 +133,16 @@ AddHandler php-script .php Para incluir contenido activo, como scripts y ejecutables, en los directorios de documentos del servidor web es algunas veces considerado una práctica - insegura. Si, por el hecho del algún error de configuración, los scripts + insegura. Si, por algún error de configuración, los scripts no se ejecutan y son mostrados como documentos HTML regulares, esto podría resultar en una fuga de información de propiedad intelectual o de información de seguridad como las contraseñas. Por lo tanto muchos Administradores de Sistemas preferirán configurar otra estructura de directorios para scripts que sean - accesibles solamente a través del CGI de PHP, y por lo tanto siempre interpretado y no desplegado como tal. + accesibles solamente a través del CGI de PHP, y por lo tanto siempre interpretados y no mostrados como tales. - También si el método para asegurar las peticiones no es - redirigido, como se describió en la sección anterior, no está + También si el método para asegurarse de que las peticiones no son + redirigidas, como se describió en la sección anterior, no está disponible, es necesario configurar un script doc_root que sea diferente de la raíz del documento web. @@ -165,19 +165,19 @@ AddHandler php-script .php doc_root. Al abrir una URL como http://mi.servidor/~usuario/documento.php no resulta - en la apertura de un fichero bajo el directorio personal de los usuarios, pero si + en la apertura de un fichero bajo el directorio personal del usuario, sino un fichero llamado ~usuario/documento.php debajo de - doc_root (si, un nombre de directorio que inicia con una a tilde [~]). + doc_root (sí, un nombre de directorio que empieza con una tilde [~]). Si user_dir es configurado, por ejemplo public_php, una petición como http://mi.servidor/~usuario/doc.php abrirá un fichero llamado doc.php bajo el directorio - llamado public_php debajo de el directorio + llamado public_php debajo del directorio personal del usuario. Si el directorio personal del usuario es /home/usuario, el fichero ejecutado será - /home/user/public_php/doc.php. + /home/usuario/public_php/doc.php. La expansión de user_dir sucede sin tomar en cuenta @@ -205,11 +205,11 @@ AddHandler php-script .php necesitará hacer que el fichero sea ejecutable. Eso significa, tratarlo exactamente como trataría cualquier otro script de CGI escrito en Perl, sh, bash, o cualquier otro lenguaje común de script el cual utilice #! como mecanismo - de ejecución de si mismo. + de ejecución de sí mismo. Para que PHP maneje la información correctamente de PATH_INFO y - PATH_TRANSLATED con esta configuración, La directiva ini cgi.discard_path debe estar habilitada.. + PATH_TRANSLATED con esta configuración, la directiva ini cgi.discard_path debe estar habilitada. diff --git a/security/current.xml b/security/current.xml index 3c7dcf0f4a..9576ef6830 100644 --- a/security/current.xml +++ b/security/current.xml @@ -1,8 +1,7 @@ - - + - + Mantenerse al día diff --git a/security/database.xml b/security/database.xml index e147fdcc0d..e6a73579ae 100644 --- a/security/database.xml +++ b/security/database.xml @@ -1,6 +1,5 @@ - - + Seguridad en bases de datos @@ -15,7 +14,7 @@ Para obtener o almacenar cualquier información, es necesario conectarse a la base de datos, enviar una consulta válida, obtener el resultado, y cerrar la conexión. Hoy en día, el lenguaje de consultas más utilizado en esta interacción es el - Lenguaje Estructurado de Consultas (SQL, por sus siglas en inglés). Vea como un atacante puede realizar manipulaciones maliciosas con una consulta SQL. @@ -28,7 +27,7 @@ tomen acciones para aumentar la protección de una base de datos, menor es la probabilidad de que un atacante tenga éxito en exponer o abusar de cualquier información que tenga almacenada. Un buen diseño del esquema de la base de datos y de la aplicación - se ocupará de sus mayores temores. + se ocupará de sus mayores preocupaciones. @@ -51,7 +50,7 @@ Se pueden crear distintos usuarios de una base de datos para cada aspecto de la aplicación con permisos muy limitados a los objetos de dicha base de datos. Solamente deberían otorgarse los privilegios necesarios, evitando así que el mismo usuario - pueda interactuar con la base de datos en diferentes casos y uso. Esto significa que si + pueda interactuar con la base de datos en diferentes casos de uso. Esto significa que si un intruso obtiene acceso a una base de datos utilizando las credenciales de la aplicación, solamente puede efectuar los cambios que la aplicación permita. @@ -63,7 +62,7 @@ Se pueden establecer las conexiones sobre SSL para cifrar las comunicaciones cliente/servidor y aumentar la seguridad, o también emplear ssh para cifrar la conexión de red entre los clientes y el servidor de bases de datos. - Si se utiliza algunas de estas opciones, será difícil para un posible atacante + Si se utiliza alguna de estas opciones, será difícil para un posible atacante la monitorización del tráfico y la obtención de información de la base de datos. - + - + Reportando errores @@ -37,7 +36,7 @@ Esto no es algo raro para un desarrollador de PHP que utilice las funciones show_source, highlight_string, o highlight_file como una medida de depuración, pero en - un sitio en escena, esto puede exponer variables ocultas, sintáxis sin revisar, + un sitio en escena, esto puede exponer variables ocultas, sintaxis sin revisar, y otra información peligrosa. Es especialmente peligroso el código en ejecución de fuentes conocidas con manejadores de depuración incluidos, o utilizar técnicas comunes de depuración. Si los atacantes pueden determinar qué técnica en @@ -58,7 +57,7 @@ Sin importar el método de manejo de errores, la capacidad de probar - errores en un sistema conlleva a proveer a un atacante con mas + errores en un sistema conlleva proporcionar a un atacante más información. @@ -68,7 +67,7 @@ lo alimenta con datos erróneos que lo podrían habilitar a que determine que ese sistema fue construido con PHP. - + El error de una función puede indicar ya sea, un sistema que puede estar ejecutando un motor específico de base de datos, o dar las pistas de cómo una página web puede estar programada o diseñada. Esto permite una investigación más profunda dentro @@ -76,20 +75,20 @@ en una página web. Pasando diferentes porciones de datos erróneos, por ejemplo, un atacante puede determinar el orden de autenticación en un script, (por medio del número de línea de los errores) como también probar exploits - que pueden ser utilizados en diferentes ubicaciones del script. - - + que pueden estar presentes en diferentes ubicaciones del script. + + Un error del sistema de archivos o un error general de PHP puede indicar qué permisos tiene el servidor web, así también la estructura y organización de ficheros en el servidor web. El código de error escrito por el desarrollador puede agravar este problema, conllevando a la explotación fácil de la, hasta entonces, información "oculta". - + Hay tres grandes soluciones a este problema. La primera consiste en examinar todas las funciones, e intentar arreglar la mayoría de los errores. La segunda es deshabilitar completamente la notificación de errores - de el código en ejecución. La tercera es utilizar las funciones de manejo de error + del código en ejecución. La tercera es utilizar las funciones de manejo de error propias de PHP para crear su propio manejador de errores. Dependiendo de su política de seguridad, puede ser que encuentre que las tres sean aplicables a su situación. @@ -99,8 +98,8 @@ la función propia de PHP error_reporting, para ayudarle a asegurar su código y encontrar el uso de variables que podrían ser peligrosas. Al probar su código, antes de distribuirlo, con E_ALL, - usted puede encontrar rapidamente áreas donde sus variables pueden ser abiertas para envenenamiento - o modificación en otras maneras. Una vez usted está listo para distribuirlo, + usted puede encontrar rápidamente áreas donde sus variables pueden ser abiertas para envenenamiento + o modificación en otras maneras. Una vez que esté listo para distribuirlo, debería deshabilitar completamente el reporte de errores poniendo el valor de error_reporting a 0, o apagar el visor de errores utilizando la opción display_errors del fichero &php.ini; diff --git a/security/filesystem.xml b/security/filesystem.xml index 826f05c572..24865fc96f 100644 --- a/security/filesystem.xml +++ b/security/filesystem.xml @@ -1,24 +1,23 @@ - - + - + Seguridad del Sistema de Archivos PHP está sujeto a la seguridad integrada en la mayoría de sistemas de servidores con respecto a los permisos de archivos y directorios. Esto permite controlar qué archivos en el sistema de archivos se pueden leer. Se debe - tener cuidado con los archivos que son legibles para garantizar - que son seguros para la lectura por todos los usuarios que tienen acceso al + tener cuidado con los archivos legibles por cualquier usuario (world-readable) para garantizar + que son seguros para su lectura por todos los usuarios que tienen acceso al sistema de archivos. - Desde que PHP fue diseñado para permitir el acceso a nivel de usuarios para el sistema de archivos, + Dado que PHP fue diseñado para permitir el acceso a nivel de usuarios para el sistema de archivos, es perfectamente posible escribir un script PHP que le permita leer archivos del sistema como /etc/passwd, modificar sus conexiones de red, enviar trabajos de impresión masiva, etc. Esto tiene algunas - implicaciones obvias, es necesario asegurarse que los archivos + implicaciones obvias, es necesario asegurarse de que los archivos que se van a leer o escribir son los apropiados. @@ -42,7 +41,7 @@ $homedir = "/home/$username"; unlink("$homedir/$userfile"); -echo "El archivo ha sido eliminado!"; +echo "¡El archivo ha sido eliminado!"; ?> ]]> @@ -50,7 +49,7 @@ echo "El archivo ha sido eliminado!"; Dado que el nombre de usuario y el nombre del archivo son enviados desde un formulario, estos pueden representar un nombre de archivo y un nombre de usuario que pertenecen a otra persona, - incluso se podría borrar el archivo a pesar que se supone que no estaría permitido hacerlo. + incluso se podría borrar el archivo a pesar de que se supone que no estaría permitido hacerlo. En este caso, usted desearía usar algún otro tipo de autenticación. Considere lo que podría suceder si las variables enviadas son "../etc/" y "passwd". El código entonces se ejecutaría efectivamente como: @@ -68,7 +67,7 @@ $homedir = "/home/$username"; // "/home/../etc" unlink("$homedir/$userfile"); // "/home/../etc/passwd" -echo "El archivo ha sido eliminado!"; +echo "¡El archivo ha sido eliminado!"; ?> ]]> @@ -146,14 +145,14 @@ if (!ctype_alnum($username) || !preg_match('/^(?:[a-z0-9_-]|\.(?!\.))+$/iD', $us - - Dependiendo de sus sistema operativo, hay una gran variedad de archivos + + Dependiendo de su sistema operativo, hay una gran variedad de archivos a los que debe estar atento, esto incluye las entradas de dispositivos (/dev/ - o COM1), archivos de configuracion (archivos /etc/ y archivos .ini), + o COM1), archivos de configuración (archivos /etc/ y archivos .ini), las muy conocidas carpetas de almacenamiento (/home/, My Documents), etc. Por esta razón, por lo general es más fácil crear una política en donde se prohíba todo excepto lo que expresamente se permite. - + Cuestiones relacionadas a bytes nulos @@ -162,7 +161,7 @@ if (!ctype_alnum($username) || !preg_match('/^(?:[a-z0-9_-]|\.(?!\.))+$/iD', $us Como un byte nulo denota el fin de una cadena en C, las cadenas que contengan estos no serán consideradas por completo, sino sólo hasta que ocurra un byte nulo. - El siguiente ejemplo muestra un código vulnerable que presenta este problema: + El siguiente ejemplo muestra el código vulnerable que presenta este problema: Script vulnerable a bytes nulos @@ -182,8 +181,8 @@ if (file_exists('/home/wwwrun/' . $file . '.php')) { - Por lo tanto, cualquier cadena que se utiliza en una operación de sistema de archivos siembre deben - ser validados correctamente. He aquí una versión mejorada del ejemplo anterior: + Por lo tanto, cualquier cadena que se utiliza en una operación de sistema de archivos siempre debe + ser validada correctamente. He aquí una versión mejorada del ejemplo anterior: Validando correctamente la entrada diff --git a/security/general.xml b/security/general.xml index 3bf3e040d9..2deae4f77f 100644 --- a/security/general.xml +++ b/security/general.xml @@ -1,7 +1,6 @@ - - - + + Consideraciones generales diff --git a/security/hiding.xml b/security/hiding.xml index ca1d4a36f6..20fba62edd 100644 --- a/security/hiding.xml +++ b/security/hiding.xml @@ -1,20 +1,19 @@ - - + - + Ocultar PHP En general, la seguridad por ocultación es una de las formas más débiles de seguridad. - Aunque en algunos casos, es aconsejable cada pequeño elemento extra de seguridad. + Pero en algunos casos, es aconsejable cada pequeño elemento extra de seguridad. - + Unas cuantas técnicas simples pueden ayudar a ocultar PHP, posiblemente retrasando a un atacante que esté tratando de descubrir debilidades en el sistema. Al establecer expose_php a off en el fichero &php.ini;, se reduce la cantidad de información disponible. - + Otra táctica es configurar servidores web como Apache para interpretar diferentes tipos de ficheros por medio de PHP, ya sea con una directiva diff --git a/security/intro.xml b/security/intro.xml index 354148f5fa..1f9a5f0169 100644 --- a/security/intro.xml +++ b/security/intro.xml @@ -1,20 +1,19 @@ - - - + + Introducción PHP es un potente lenguaje, y su intérprete, bien como módulo del servidor web o bien como binario CGI, puede acceder a ficheros, ejecutar comandos o abrir conexiones de - red desde el servidor. Estas propiedades hacen que, por omisión, + red desde el servidor. Estas propiedades hacen que, por defecto, sea inseguro todo lo que se ejecute en un servidor web. PHP está diseñado específicamente para ser un lenguaje más seguro para escribir aplicaciones CGI que Perl o C. Partiendo de un correcto ajuste de opciones de configuración para tiempo de ejecución y en tiempo de compilación, y el uso de prácticas de programación - apropiadas, pueden proporcionarle la combinación de libertad y de + apropiadas, puede proporcionarle exactamente la combinación de libertad y de seguridad que necesita. @@ -28,8 +27,8 @@ La flexibilidad de configuración de PHP rivaliza igualmente con la flexibilidad de su código. PHP puede ser usado para construir completas aplicaciones de servidor, con toda la potencia de un usuario de consola, - o se puede usar sólo desde el lado del servidor implicando un menor - riesgo dentro de un entorno controlado. El cómo construir ese entorno, y cómo + o se puede usar para simples inclusiones del lado del servidor (server-side includes) con poco + riesgo dentro de un entorno estrictamente controlado. El cómo construir ese entorno, y cómo de seguro es, depende del desarrollador PHP. diff --git a/security/variables.xml b/security/variables.xml index 7c8ac330a9..b7fbf0fc23 100644 --- a/security/variables.xml +++ b/security/variables.xml @@ -1,8 +1,7 @@ - - + - + Datos Enviados por el Usuario @@ -51,7 +50,7 @@ exec ($evil_var); - ¿Puede ser usado este script en formas malintencionadas? + ¿Puede ser usado este script de formas no previstas? @@ -66,13 +65,13 @@ exec ($evil_var); - + Al preguntarse adecuadamente estas preguntas mientras escribe su script, en lugar de hacerlo posteriormente, usted previene una desafortunada re-implementación del programa cuando desee incrementar el nivel de seguridad. Al comenzar con esta mentalidad, no garantizará la seguridad de su sistema, pero puede ayudar a mejorarla. - + Mejore la seguridad deshabilitando las configuraciones de conveniencia que oscurecen el origen, la validez o la integridad de los datos de entrada. @@ -86,13 +85,13 @@ exec ($evil_var); usuario y escapar datos de manera inconsistente. Aunque ya no están en PHP, riesgos similares persisten si la gestión de la entrada es incorrecta. - + Habilite error_reporting(E_ALL) para ayudar a detectar variables no inicializadas y validar la entrada. Utilice tipos estrictos (declare(strict_types=1), introducido en PHP 7) para imponer la seguridad de tipos, prevenir conversiones de tipos no intencionadas y mejorar la seguridad general. - + + Utilización de la línea de comandos @@ -17,12 +17,12 @@ - El nombre, la ubicación y la existencia de los binarios &cli;/CGI dependerán de la forma en que PHP esté instalado en su sistema. Por defecto, al ejecutar make, ambos binarios CGI y &cli; se compilan y se nombran respectivamente sapi/cgi/php y sapi/cli/php en su directorio fuente PHP. Se observará que ambos se nombran php. Lo que sucede después durante el make install depende de su línea de configuración. Si un módulo SAPI, como apxs, se ha elegido durante la configuración, o si la opción se ha activado, el &cli; se copia en {PREFIX}/bin/php durante el make install, de lo contrario, el CGI se colocará aquí. Si, por ejemplo, figura en su línea de configuración, el &cli; se copia en {PREFIX}/bin/php durante el make install. Si se desea forzar la instalación del binario CGI, ejecute make install-cli después del make install. De lo contrario, también se puede especificar en su línea de configuración. + El nombre, la ubicación y la existencia de los binarios &cli;/CGI dependerán de la forma en que PHP esté instalado en su sistema. Por defecto, al ejecutar make, ambos binarios CGI y &cli; se compilan y se nombran respectivamente sapi/cgi/php-cgi y sapi/cli/php en su directorio fuente PHP. Se observará que ambos se nombran php. Lo que sucede después durante el make install depende de su línea de configuración. Si un módulo SAPI, como apxs, se ha elegido durante la configuración, o si la opción se ha activado, el &cli; se copia en {PREFIX}/bin/php durante el make install, de lo contrario, el CGI se colocará aquí. Si, por ejemplo, figura en su línea de configuración, el &cli; se copia en {PREFIX}/bin/php durante el make install. Si se desea forzar la instalación del binario CGI, ejecute make install-cli después del make install. De lo contrario, también se puede especificar en su línea de configuración. - Dado que ambas opciones y están activadas por defecto, tener simplemente en su línea de configuración no implica necesariamente que el CLI se renombre a {PREFIX}/bin/php durante el make install. + Dado que ambas opciones y están activadas por defecto, tener simplemente en su línea de configuración no implica necesariamente que el &cli; se copie como {PREFIX}/bin/php durante el make install. @@ -57,7 +57,7 @@ Aunque el CGI SAPI proporciona una forma de eliminar los encabezados HTTP, no es posible activar los encabezados HTTP en el &cli.sapi;. - &cli; se ejecuta en modo silencioso por defecto, aunque las opciones y se mantienen para mantener la compatibilidad con versiones anteriores de CGI. + &cli; se ejecuta en modo silencioso por defecto, aunque las opciones y se mantienen por compatibilidad, de modo que sea posible utilizar scripts CGI antiguos. No cambia el directorio actual al del script. (Las opciones y se mantienen por razones de compatibilidad). @@ -68,11 +68,11 @@ - Hay varias directivas del &php.ini; que son ignoradas por el &cli.sapi;, ya que no tienen sentido en un entorno shell: + Hay varias directivas del &php.ini; que son sobrescritas por el &cli.sapi;, ya que no tienen sentido en un entorno shell: - Directivas &php.ini; ignoradas + Directivas &php.ini; sobrescritas @@ -83,14 +83,14 @@ - + html_errors &false; Por defecto a &false;, ya que puede ser bastante difícil leer mensajes de error en un terminal cuando están enterrados en etiquetas HTML no interpretadas. - + implicit_flush &true; En un terminal, generalmente es deseable que cualquier salida de print, echo y otros, se muestre inmediatamente, y no se coloque en un búfer. Sin embargo, siempre es posible utilizar la bufferización de salida si se desea retrasar una salida, o bien manipular su contenido una última vez. @@ -137,7 +137,7 @@ if (php_sapi_name() === 'cli') { &false; - Aunque esta configuración INI está codificada a &false;, las funciones relacionadas con la visualización del búfer están disponibles. + Aunque esta configuración INI está fijada en &false;, las funciones relacionadas con la visualización del búfer están disponibles. @@ -156,7 +156,7 @@ if (php_sapi_name() === 'cli') { - Estas directivas no pueden inicializarse con otros valores en el archivo &php.ini; o por cualquier otro método. Es una limitación, ya que estos valores por defecto se aplican una vez que todos los otros archivos de configuración han sido analizados. Sin embargo, estos valores pueden modificarse durante la ejecución (lo cual no es lógico para ciertas directivas, como register_argc_argv). + Estas directivas no pueden inicializarse con otro valor desde el archivo de configuración &php.ini; ni desde uno personalizado (si se especifica). Esta limitación existe porque los valores se aplican una vez que todos los archivos de configuración han sido analizados. Sin embargo, estos valores pueden modificarse durante la ejecución (lo cual no es lógico para ciertas directivas, como register_argc_argv). @@ -174,7 +174,7 @@ if (php_sapi_name() === 'cli') { - El &cli.sapi; no transforma el directorio actual en el directorio de ejecución del script. + El &cli.sapi; no cambia el directorio actual al directorio del script ejecutado. @@ -183,7 +183,7 @@ if (php_sapi_name() === 'cli') { <programlisting role="php"> <![CDATA[ <?php -// Una prueba simple: muestra el directorio de ejecución */ +// Nuestra aplicación de prueba simple, llamada test.php echo getcwd(), "\n"; ?> ]]> @@ -220,9 +220,9 @@ $ php -f otro_directorio/test.php </para> </example> <note> - <para> - El <acronym>CGI</acronym> <acronym>SAPI</acronym> se comporta de la misma manera que el &cli.sapi;, pasándole la opción <option>-C</option>, cuando se invoca en la línea de comandos. - </para> + <simpara> + El <acronym>CGI</acronym> <acronym>SAPI</acronym> admite este comportamiento del &cli.sapi; mediante la opción <option>-C</option> cuando se ejecuta desde la línea de comandos. + </simpara> </note> </listitem> </itemizedlist> @@ -306,7 +306,7 @@ Uso: php [opciones] [-f] <archivo> [--] [args...] <entry>--bindpath</entry> <entry> <para> - Enlaza la ruta para los externos, en modo servidor FASTCGI (solo <acronym>CGI</acronym>). + Ruta de enlace (bind path) para el modo servidor FASTCGI externo (solo <acronym>CGI</acronym>). </para> </entry> </row> @@ -348,9 +348,9 @@ Uso: php [opciones] [-f] <archivo> [--] [args...] <informalexample> <screen> <![CDATA[ -$ php -c /custom/directory/ mon_script.php +$ php -c /custom/directory/ mi_script.php -$ php -c /custom/directory/custom-file.ini mon_script.php +$ php -c /custom/directory/custom-file.ini mi_script.php ]]> </screen> </informalexample> @@ -386,12 +386,12 @@ $ php -c /custom/directory/custom-file.ini mon_script.php <title>Ejemplo de uso de <literal>-d</literal> para establecer una configuración INI -h y -? --help y --usage - Muestra información sobre la lista actual de opciones de la línea de comandos, así como su descripción. + Muestra una lista de las opciones de línea de comandos con una descripción de una línea de lo que hace cada una. @@ -548,7 +548,7 @@ array(370) { - Si se utiliza un shell diferente de sh/bash, pueden encontrarse otros problemas; si es apropiado, se puede abrir un informe de errores a través de &url.php.bugs;. Es muy fácil tener problemas al intentar incluir variables de shell en el código, o al usar las barras invertidas para la protección. ¡Se le ha advertido! + Si se utiliza un shell diferente de sh/bash, pueden encontrarse otros problemas; si es apropiado, se puede abrir un informe de errores a través de &url.php.bugs;. Es muy fácil tener problemas al intentar usar variables (del shell o de PHP) en el código de la línea de comandos, o al usar barras invertidas para escapar, así que extreme las precauciones. ¡Queda advertido! @@ -580,7 +580,7 @@ array(370) { Código PHP a ejecutar para cada línea de entrada. - Hay dos variables especiales disponibles en este modo: $argn y $argi. $argn debe contener la línea PHP procesada en ese momento, mientras que $argi debe contener el número de la línea. + Hay dos variables especiales disponibles en este modo: $argn y $argi. $argn contendrá la línea que PHP está procesando en ese momento, mientras que $argi contendrá el número de la línea. @@ -598,7 +598,7 @@ array(370) { --process-end - Código PHP a ejecutar después de realizar la entrada. + Código PHP a ejecutar después de procesar la entrada. @@ -618,7 +618,7 @@ Total Lines: 37328 --server - Inicia el servidor web interno. Disponible desde 5.4.0. + Inicia el servidor web interno. @@ -685,7 +685,7 @@ Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies Muestra los nombres de los archivos de configuración y los directorios analizados. Opcionalmente, pasar --ini=diff para mostrar las diferencias - entre los archivos de configuración cargados y la configuración por omisión. + entre los archivos de configuración cargados y la configuración por defecto. Ejemplo con <literal>--ini</literal> @@ -827,7 +827,7 @@ Extension [ extension #19 json version 1.2.1 ] { --rextinfo - Muestra la información de configuración para la extensión dada (la misma información devuelta por la función phpinfo). Las informaciones de configuración internas están disponibles utilizando el nombre de extensión "main" o "core". + Muestra la información de configuración para la extensión dada (la misma información devuelta por la función phpinfo). La información de configuración del núcleo está disponible utilizando "main" como nombre de extensión. @@ -880,15 +880,15 @@ date.sunrise_zenith => 90.583333 => 90.583333 - - Ambos métodos (usando o no) ejecutan el script contenido en el archivo mon_script.php. Tenga en cuenta que no existe restricción sobre los archivos que se pueden ejecutar; en particular, no es necesario que la extensión del archivo sea .php. - + + Ambos métodos (usando o no) ejecutan el script contenido en el archivo my_script.php. Tenga en cuenta que no existe restricción sobre los archivos que se pueden ejecutar; en particular, no es necesario que la extensión del archivo sea .php. + @@ -897,12 +897,12 @@ php -f mon_script.php - En este caso, se debe prestar especial atención a las variables de entorno, que serán reemplazadas, y a las comillas, que tienen significados especiales en la línea de comandos. + Se debe prestar especial atención a la sustitución de variables del shell y al uso de comillas. @@ -915,7 +915,7 @@ php -r 'print_r(get_defined_constants());' Alimentar la entrada estándar con código PHP (stdin). - Esto proporciona la posibilidad de crear código PHP dinámicamente, luego proporcionarlo a PHP y, finalmente, procesarlo nuevamente en el shell. Aquí hay un ejemplo ficticio: + Esto proporciona la posibilidad de crear código PHP dinámicamente y proporcionarlo al ejecutable, como en este ejemplo (ficticio): @@ -1012,7 +1012,7 @@ array(4) { if ($argc != 2 || in_array($argv[1], array('--help', '-help', '-h', '-?'))) { ?> -Esto es una línea de comando a una opción. +Este es un script PHP de línea de comandos con una opción. Uso: @@ -1064,7 +1064,7 @@ Esto es una línea de comando a una opción. - En Windows, PHP puede configurarse para funcionar sin necesidad de proporcionar las extensiones C:\php\php.exe o .php, tal como se describe en la línea de comandos PHP bajo Microsoft Windows. + En Windows, PHP puede configurarse para funcionar sin necesidad de indicar la ruta C:\php\php.exe ni la extensión .php, tal como se describe en la línea de comandos PHP bajo Microsoft Windows. @@ -1208,7 +1208,7 @@ php > Autocompletado usando la tecla de tabulación - Presionar dos veces la tecla de tabulación cuando hay varias posibles completaciones mostrará una lista de estas completaciones: + Presionar dos veces la tecla de tabulación cuando hay varias posibilidades de autocompletado mostrará una lista de ellas: strp ]]> - Cuando solo hay una posible completación, presionar la tecla de tabulación una vez completará el resto en la misma línea: + Cuando solo hay una posibilidad de autocompletado, presionar la tecla de tabulación una vez completará el resto en la misma línea: strpt[TAB]ime( ]]> - La completación también funcionará para los nombres que se han definido durante la sesión actual del shell interactivo: + El autocompletado también funcionará para los nombres que se han definido durante la sesión actual del shell interactivo: \> - Indica el carácter utilizado para el prompt. Por defecto, será >, pero puede cambiarse cuando el shell se encuentra en un bloque indeterminado o en una cadena de caracteres. Los caracteres posibles son: ' " { + Indica el carácter utilizado para el prompt. Por defecto, será >, pero puede cambiarse cuando el shell se encuentra dentro de un bloque o una cadena sin terminar. Los caracteres posibles son: ' " { ( > @@ -1328,7 +1328,7 @@ php > - Los archivos incluidos a través de auto_prepend_file y auto_append_file se analizan en este modo, pero con algunas restricciones; es decir, las funciones deben haber sido definidas antes de la llamada. + Los archivos incluidos a través de auto_prepend_file y auto_append_file se analizan en este modo, pero con algunas restricciones; por ejemplo, las funciones deben haber sido definidas antes de la llamada. @@ -1345,7 +1345,7 @@ php > CTRL Z - seguido de ENTER (Windows), este script será evaluado. Esto es básicamente idéntico a invocar el &cli.sapi; sin la opción . + seguido de ENTER (Windows), este script será evaluado. Esto es básicamente idéntico a invocar el &cli.sapi; sin la opción . A partir de PHP 8.1.0, invocar el &cli.sapi; con la opción falla si la extensión readline no está disponible. diff --git a/features/connection-handling.xml b/features/connection-handling.xml index 1fba3189b3..9fb0f86b16 100644 --- a/features/connection-handling.xml +++ b/features/connection-handling.xml @@ -1,6 +1,5 @@ - - + @@ -26,7 +25,7 @@ desconexión de un cliente provoque la interrupción del script. A veces es práctico que los scripts continúen ejecutándose hasta el final, incluso si el cliente ya no está - presente para recibir la información. Sin embargo, por omisión, el script + presente para recibir la información. Sin embargo, por defecto, el script se detendrá tan pronto como el cliente se desconecte. Este comportamiento puede ser modificado con la directiva en el fichero &php.ini; o @@ -35,10 +34,10 @@ ignore_user_abort. Si no se solicita a PHP que ignore la desconexión, y el usuario se desconecta, el script será terminado. La única excepción es si se ha registrado una función de cierre, con register_shutdown_function. - Con tal función, cuando el usuario interrumpe su - solicitud, en la próxima ejecución del script, - PHP se dará cuenta de que el último script no ha sido - terminado, y desencadenará la función de cierre. + Con tal función, cuando el usuario remoto pulsa su botón STOP, + la próxima vez que el script intente enviar algo a la salida, + PHP detectará que la conexión ha sido interrumpida + y se llamará a la función de cierre. Esta función también será llamada al final del script, si este termina normalmente. Para poder tener un comportamiento diferente según el estado del script al finalizar, @@ -50,7 +49,7 @@ El script también puede ser interrumpido automáticamente después de un cierto tiempo. - Por omisión, el tiempo límite es de 30 segundos. Este valor + Por defecto, el tiempo límite es de 30 segundos. Este valor puede ser cambiado utilizando la directiva PHP en el fichero &php.ini; o con la directiva @@ -71,7 +70,8 @@ posible si se solicita a PHP que ignore las desconexiones de los usuarios. PHP aún así notará el hecho de que el usuario se ha desconectado, pero el script continuará. Luego, cuando alcance el límite de - tiempo, el script caducará. En ese momento, la + tiempo, el script será interrumpido y se llamará a su función de cierre, + si existe. En ese momento, la función connection_status devolverá 3. diff --git a/features/cookies.xml b/features/cookies.xml index ef097da384..e2d77f8a8c 100644 --- a/features/cookies.xml +++ b/features/cookies.xml @@ -1,6 +1,5 @@ - - + @@ -18,20 +17,20 @@ la visualización de su script hasta que se haya decidido enviar una cookie o encabezados. - + Todas las cookies enviadas al servidor por el cliente serán automáticamente incluidas en un array superglobal $_COOKIE si variables_order contiene "C". Si se desea asignar múltiples valores a una sola cookie, se debe añadir [] al nombre de la cookie. - + - + Para más detalles, incluyendo notas sobre errores de los navegadores, ver las funciones setcookie y setrawcookie. - + + Rastreo dinámico de DTrace @@ -96,16 +96,16 @@ que proporcionen sus propias sondas deben ser construidas por separado como extensiones compartidas. - - Para habilitar las sondas, definir la variable de entorno a los procesos PHP objetivo. - + + Para habilitar las sondas, definir la variable de entorno para los procesos PHP objetivo. + Sondas estáticas DTrace en el núcleo de PHP
Las siguientes sondas estáticas están disponibles en PHP - + Nombre de la sonda @@ -365,14 +365,14 @@ php*:::request-startup Cuando el monitoreo haya terminado, el script D puede ser interrumpido con un - CTRLC + CTRLC. En máquinas multi-CPU, el orden de las sondas puede no ser secuencial. Esto depende del CPU que ha procesado las sondas, y de cómo los hilos migran de un CPU a otro. La visualización de los timestamps de las sondas - permite reducir la confusión, por ejemplo : + permite reducir la confusión, por ejemplo: - + @@ -41,7 +41,7 @@ -
+ @@ -51,7 +51,7 @@ ]]>
- _URL_ en el ejemplo anterior debe ser reemplazado y apuntar a un fichero PHP. + __URL__ en el ejemplo anterior debe ser reemplazado y apuntar a un fichero PHP. El campo oculto MAX_FILE_SIZE (medido en bytes) debe preceder al campo input de tipo file y su valor representa el tamaño máximo aceptado del fichero por PHP. Este elemento de formulario debe ser siempre utilizado, ya que permite informar al usuario que la transferencia deseada es demasiado grande antes de llegar al final de la carga. Tenga en cuenta que este parámetro puede ser "engañado" fácilmente desde el lado del navegador, por lo que no se debe confiar en él, tratándose finalmente de una funcionalidad de conveniencia del lado del cliente. El parámetro PHP (del lado del servidor) sobre el tamaño máximo de un fichero cargado, no puede ser engañado. @@ -79,9 +79,9 @@ $_FILES['userfile']['type'] - - El tipo MIME del fichero, si el navegador ha proporcionado esta información. Por ejemplo, esto podría ser "image/gif". Este tipo mime no es verificado por PHP y, por lo tanto, no se debe tomar su valor para sincronizarse. - + + El tipo MIME del fichero, si el navegador ha proporcionado esta información. Por ejemplo, esto podría ser "image/gif". Este tipo MIME no es verificado por PHP y, por lo tanto, no se debe dar por sentado su valor. + @@ -119,7 +119,7 @@ - El fichero cargado será almacenado temporalmente en el directorio temporal del sistema, a menos que se proporcione otro directorio con la directiva upload_tmp_dir del &php.ini;. El directorio por defecto del servidor puede ser cambiado en el entorno a través de la variable TMPDIR. Modificar el valor de esta variable con la función putenv en un script PHP será sin efecto. Esta variable de entorno también puede ser utilizada para asegurarse de que otras operaciones funcionen también en los ficheros cargados. + El fichero cargado será almacenado temporalmente en el directorio temporal del sistema, a menos que se proporcione otro directorio con la directiva upload_tmp_dir del &php.ini;. El directorio por defecto del servidor puede ser cambiado en el entorno a través de la variable TMPDIR. Modificar el valor de esta variable con la función putenv en un script PHP no tendrá efecto. Esta variable de entorno también puede ser utilizada para asegurarse de que otras operaciones funcionen también en los ficheros cargados. Validación de carga de ficheros @@ -133,12 +133,12 @@ $uploadfile = $uploaddir . basename($_FILES['userfile']['name']); echo '
';
 if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
-    echo "El fichero es válido, y ha sido cargado con éxito. Aquí hay más información :\n";
+    echo "El fichero es válido, y ha sido cargado con éxito.\n";
 } else {
-    echo "Ataque potencial por carga de ficheros. Aquí hay más información :\n";
+    echo "¡Posible ataque por carga de ficheros!\n";
 }
 
-echo 'Aquí hay algunas informaciones de depuración :';
+echo 'Aquí hay más información de depuración:';
 print_r($_FILES);
 
 echo '
'; @@ -149,7 +149,7 @@ echo '';
- El script PHP que recibe el fichero cargado debe poder gestionar el fichero de manera apropiada. Se puede utilizar la variable $_FILES['userfile']['size'] para recalar todos los ficheros que son demasiado grandes o demasiado pequeños. Se puede utilizar la variable $_FILES['userfile']['type'] para descartar los ficheros que no tienen el tipo correcto, pero utilizarla únicamente para una serie de verificaciones, ya que este valor está completamente bajo el control del cliente y no es verificado por PHP. Se puede utilizar la información en $_FILES['userfile']['error'] y adaptar su política en función de los códigos de error. Sea cual sea su política, se debe borrar el fichero del directorio temporal o moverlo. + El script PHP que recibe el fichero cargado debe poder gestionar el fichero de manera apropiada. Se puede utilizar la variable $_FILES['userfile']['size'] para descartar todos los ficheros que son demasiado grandes o demasiado pequeños. Se puede utilizar la variable $_FILES['userfile']['type'] para descartar los ficheros que no tienen el tipo correcto, pero utilizarla únicamente para una serie de verificaciones, ya que este valor está completamente bajo el control del cliente y no es verificado por PHP. Se puede utilizar la información en $_FILES['userfile']['error'] y adaptar su política en función de los códigos de error. Sea cual sea su política, se debe borrar el fichero del directorio temporal o moverlo. Si no se selecciona ningún fichero en el formulario, PHP devolverá 0 en $_FILES['userfile']['size'] y nada en $_FILES['userfile']['tmp_name']. @@ -160,7 +160,7 @@ echo ''; Envío de un array de ficheros - PHP soporta los arrays en HTML así como con los ficheros. + PHP soporta los arrays en HTML incluso con los ficheros. $error) { Errores clásicos - La variable MAX_FILE_SIZE no puede especificar un tamaño de fichero mayor que el tamaño que ha sido fijado por upload_max_filesize, en el &php.ini;. El valor por defecto es 2 megaoctetos. + La variable MAX_FILE_SIZE no puede especificar un tamaño de fichero mayor que el tamaño que ha sido fijado por upload_max_filesize, en el &php.ini;. El valor por defecto es 2 megabytes. Si se activa un límite de memoria, puede ser necesario un valor mayor de memory_limit. Asegúrese de haber definido un valor para memory_limit lo suficientemente grande. @@ -230,7 +230,7 @@ foreach ($_FILES["pictures"]["error"] as $key => $error) { Si post_max_size está definido de manera demasiado baja, los ficheros grandes no podrán ser cargados. Asegúrese de definir post_max_size con un tamaño suficiente. - La configuración de max_file_uploads controla el número máximo de ficheros que pueden ser enviados en una solicitud. Si el número de ficheros enviados supera este límite, entonces $_FILES dejará de recibir. Por ejemplo, si max_file_uploads vale 10, entonces $_FILES nunca contendrá más de 10 entidades. + La configuración de max_file_uploads controla el número máximo de ficheros que pueden ser enviados en una solicitud. Si el número de ficheros enviados supera este límite, entonces $_FILES dejará de procesar ficheros una vez alcanzado el límite. Por ejemplo, si max_file_uploads vale 10, entonces $_FILES nunca contendrá más de 10 elementos. No validar los ficheros que se manipulan puede dar acceso a los usuarios a ficheros sensibles en otras carpetas. @@ -287,7 +287,7 @@ foreach ($_FILES["pictures"]["error"] as $key => $error) { En los campos de carga de fichero HTML, es posible cargar un directorio entero con el atributo webkitdirectory. Esta funcionalidad es soportada en la mayoría de los navegadores modernos. - Con la información full_path, es posible almacenar las rutas relativas o reconstruir la misma jerarquía de directorios en el directorio. + Con la información full_path, es posible almacenar las rutas relativas o reconstruir la misma jerarquía de directorios en el servidor. $error) { Carga por método PUT - PHP soporta el método HTTP PUT utilizado por los navegadores para almacenar ficheros en un servidor. Las solicitudes de tipo PUT son mucho más simples que las cargas de ficheros utilizando el tipo POST, y se parecen a: + PHP soporta el método HTTP PUT utilizado por algunos clientes para almacenar ficheros en un servidor. Las solicitudes de tipo PUT son mucho más simples que las cargas de ficheros utilizando el tipo POST, y se parecen a: - Normalmente, esto significa que el servidor remoto guardará los datos que siguen en el fichero: /path/filename.html de su disco. Esto no es, por supuesto, muy seguro permitir que Apache o PHP sobrescriban cualquier fichero de la arborescencia. Para evitar esto, primero se debe indicar al servidor que se desea que un script PHP dado gestione la solicitud. Con Apache, hay una directiva para ello: Script. Puede ser colocada en cualquier lugar del fichero de configuración de Apache. En general, los webmasters la colocan en el bloque <Directory>, o tal vez en el bloque <VirtualHost>. La siguiente línea hará muy bien el trabajo: + Normalmente, esto significa que el servidor remoto guardará los datos que siguen en el fichero: /path/filename.html de su disco. Esto no es, por supuesto, muy seguro permitir que Apache o PHP sobrescriban cualquier fichero de su árbol web. Para evitar esto, primero se debe indicar al servidor que se desea que un script PHP dado gestione la solicitud. Con Apache, hay una directiva para ello: Script. Puede ser colocada en cualquier lugar del fichero de configuración de Apache. En general, los webmasters la colocan en el bloque <Directory>, o tal vez en el bloque <VirtualHost>. La siguiente línea hará muy bien el trabajo: - + @@ -15,7 +15,7 @@ Una variable PHP se almacena internamente en un contenedor llamado "zval". Un contenedor zval contiene, además del tipo de la variable y su valor, dos informaciones adicionales. - La primera se llama "is_ref" y es un valor booléano que indica si + La primera se llama "is_ref" y es un valor booleano que indica si una variable forma parte de una referencia o no. Gracias a esta información, el motor de PHP sabe diferenciar las variables normales de las referencias. Como PHP permite al programador utilizar referencias, mediante el operador &, un contenedor @@ -43,7 +43,7 @@ $a = "new string"; En este caso, el nuevo símbolo a se crea en el ámbito global, y se crea un nuevo contenedor con el tipo string y el valor - new string. El bit "is_ref" se establece por omisión en &false; ya que ninguna + new string. El bit "is_ref" se establece por defecto en &false; ya que ninguna referencia ha sido creada por el programador. El contador de referencias "refcount" se establece en 1 ya que solo hay un símbolo que utiliza este contenedor. Es de destacar que las referencias (es decir, "is_ref" es &true;) con "refcount" @@ -331,7 +331,7 @@ a: (refcount=2, is_ref=1)=array ( de estas fugas de memoria, entonces obviamente esto puede convertirse en un problema importante. Esto es particularmente problemático para los scripts que duran mucho tiempo, como los demonios para los cuales la solicitud nunca termina, o incluso en grandes suites de pruebas unitarias. Este último caso se encontró al lanzar las pruebas unitarias del componente Template de la - biblioteca eZ Components. En algunos casos, la suite de pruebas requería más de 2Go de + biblioteca eZ Components. En algunos casos, la suite de pruebas requería más de 2 GB de memoria, que el servidor de prueba no tenía realmente disponible. @@ -339,20 +339,20 @@ a: (refcount=2, is_ref=1)=array ( Limpieza de Ciclos - + Tradicionalmente, los mecanismos de conteo de referencias, como los utilizados anteriormente en PHP, no saben manejar las fugas de memoria debidas a referencias circulares; sin embargo, desde PHP 5.3.0, un algoritmo síncrono derivado del análisis Concurrent Cycle Collection in Reference Counted Systems se utiliza para abordar este problema en particular. - + Una explicación completa del funcionamiento del algoritmo iría un poco más allá del alcance de esta sección, pero aquí presentaremos los principios básicos. En primer lugar, estableceremos algunas reglas básicas. Si un refcount se incrementa, el contenedor siempre se utiliza, por lo tanto, no se limpia. Si el refcount - se decrementa y llega a cero, el contenedor zval puede ser eliminado y la memoria liberada. En primer lugar, esto significa - que los ciclos perturbadores solo pueden crearse cuando el refcount se decrementa a un valor - diferente de cero. Luego, en un ciclo problemático, es posible detectar la basura verificando si es posible o no + se decrementa y llega a cero, el contenedor zval puede ser eliminado y la memoria liberada. Esto significa + que los ciclos de basura solo pueden crearse cuando el refcount se decrementa a un valor + diferente de cero. En segundo lugar, en un ciclo de basura, es posible detectar la basura verificando si es posible o no decrementar su refcount en uno, verificando luego qué zvals tienen un refcount a cero. @@ -383,7 +383,7 @@ a: (refcount=2, is_ref=1)=array ( paso anterior será entonces eliminada de la memoria. - Ahora que se sabe globalmente cómo funciona el algoritmo, se verá cómo se ha integrado en PHP. Por omisión, el recolector de basura de PHP está + Ahora que se sabe globalmente cómo funciona el algoritmo, se verá cómo se ha integrado en PHP. Por defecto, el recolector de basura de PHP está activado. Sin embargo, hay una opción de &php.ini; para cambiar esto: zend.enable_gc. @@ -498,8 +498,8 @@ for ( $i = 0; $i <= 100000; $i++ ) muy claramente en los gráficos de uso de memoria de PHP 5.3. Después de cada 10.000 iteraciones, el mecanismo se desencadena y libera la memoria asociada a las variables circularmente referenciadas. El mecanismo en cuestión no tiene mucho trabajo en este ejemplo, porque la estructura que se fugó es extremadamente simple. - El diagrma muestra que el uso máximo de memoria de PHP 5.3 es de aproximadamente - 9Mo, mientras que sigue aumentando con PHP 5.2. + El diagrama muestra que el uso máximo de memoria de PHP 5.3 es de aproximadamente + 9 MB, mientras que sigue aumentando con PHP 5.2.
@@ -556,7 +556,7 @@ time php -dzend.enable_gc=1 -dmemory_limit=-1 -n example2.php En mi máquina, el primer comando parece durar siempre 10,7 segundos, mientras que el segundo comando tarda aproximadamente 11,4 segundos. Esto corresponde a un retraso de aproximadamente el 7%. Sin embargo, la cantidad total de memoria utilizada por el script se reduce - en un 98%, pasando de 931Mo a 10Mo. Este benchmark no es muy científico ni representativo de aplicaciones reales, pero demuestra concretamente en qué medida el mecanismo + en un 98%, pasando de 931 MB a 10 MB. Este benchmark no es muy científico ni representativo de aplicaciones reales, pero demuestra concretamente en qué medida el mecanismo de recolección de basura puede ser útil en términos de consumo de memoria. El punto positivo es que el retraso es siempre del 7%, en el caso particular de este script, mientras que la memoria preservada será cada vez más importante a medida que aparezcan referencias circulares durante la ejecución.