register_shutdown_function
(PHP 4, PHP 5, PHP 7, PHP 8)
register_shutdown_function — Регистрирует функцию, которая выполнится при завершении работы скрипта
Описание
Разработчику доступен множественный вызов функции
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
истекает, пока выполняется функция завершения работы.