(PHP 4, PHP 5, PHP 7, PHP 8)
register_shutdown_function — Регистрирует функцию, которая выполнится при завершении работы скрипта
Функция регистрирует callback
-функцию,
которая выполнится после завершения работы скрипта или при вызове функции
exit().
Разработчику доступен множественный вызов функции register_shutdown_function(), при этом каждый обработчик вызывается в порядке регистрации. При вызове функции exit() внутри зарегистрированной shutdown-функции обработка останавливается и другие обработчики завершения работы не вызываются.
При вызове функции register_shutdown_function() внутри функции завершения работы новый shutdown-обработчик добавляется в конец очереди.
callback
Callback-функция, которую требуется зарегистрировать.
Callback-функции завершения работы выполняются как часть запроса, поэтому умеют выводить данные и получать доступ к буферам вывода.
args
Дополнительные аргументы для функции завершения работы.
Функция не возвращает значения после выполнения.
Пример #1 Пример регистрации обработчика завершения работы функцией register_shutdown_function()
<?php
function shutdown()
{
// Функция завершения работы,
// которая выполнит последние операции
// перед завершением работы скрипта
echo 'Скрипт успешно завершился', PHP_EOL;
}
register_shutdown_function('shutdown');
?>
Замечание:
Веб-серверы наподобие Apache иногда изменяют рабочий каталог скрипта в конце главного потока выполнения кода, тогда shutdown-функция получает изменённый путь к рабочему каталогу, поскольку выполняется позднее.
Замечание:
Функции завершения работы не выполняются, если процесс останавливается сигналами SIGTERM или SIGKILL. Перехват сигнала SIGKILL невозможен, но функция pcntl_signal() умеет устанавливать обработчик сигнала SIGTERM, который вызывает функцию exit(), чтобы завершить работу скрипта правильно.
Замечание:
Время выполнения функций завершения работы не учитывается во времени, которое отслеживает директива max_execution_time. Поэтому shutdown-функции вызываются, даже если процесс завершается из-за превышения времени выполнения. Shutdown-функции не прерываются, даже если время директивы
max_execution_time
истекает, пока выполняется функция завершения работы.