register_shutdown_function

(PHP 4, PHP 5, PHP 7, PHP 8)

register_shutdown_functionRegistra una función de retrollamada para ejecución al cierre

Descripción

register_shutdown_function(callable $callback, mixed ...$args): void

Registra una función de retrollamada callback para ejecución al cierre o cuando exit() es llamado.

Varios llamados a register_shutdown_function() son posibles en el mismo script, y las funciones serán llamadas en el mismo orden en que son registradas. Si se llama exit() durante una de las funciones de cierre, el proceso será definitivamente detenido, sin que las otras funciones sean llamadas.

Las funciones de cierre pueden también llamar a la función register_shutdown_function() ellas mismas para añadir una función de cierre al final de la cola.

Parámetros

callback

La función de retrollamada a registrar.

La función de retrollamada es ejecutada como parte de la petición, por lo tanto, es posible enviar algo a la salida desde esta última, así como acceder a los buffers de salida.

args

Es posible pasar argumentos a las funciones de cierre configurando estos argumentos adicionales.

Valores devueltos

No devuelve ningún valor.

Ejemplos

Ejemplo #1 Ejemplo con register_shutdown_function()

<?php
function shutdown()
{
// Aquí está nuestra función shutdown
// en la cual podemos realizar
// todas las últimas operaciones
// antes del fin del script.

echo 'Script ejecutado con éxito', PHP_EOL;
}

register_shutdown_function('shutdown');
?>

Notas

Nota:

El directorio de trabajo del script puede cambiar en la función de cierre bajo algunos servidores web, por ejemplo Apache.

Nota:

Las funciones de cierre no serán ejecutadas si el proceso es terminado con un señal SIGTERM o SIGKILL. Aunque no se puede interceptar un SIGKILL, se puede usar la función pcntl_signal() para instalar un manejador para un SIGTERM que utilice la función exit() para terminar correctamente.

Nota:

Las funciones de cierre se ejecutan por separado del tiempo seguido por max_execution_time. Esto significa que incluso si un proceso es terminado por haber funcionado demasiado tiempo, las funciones de cierre serán siempre llamadas. Además, si el max_execution_time alcanza su límite mientras una función de cierre está en ejecución, no será interrumpida.

Ver también