register_shutdown_function

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

register_shutdown_functionРегистрирует функцию, которая выполнится при завершении работы скрипта

Описание

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

Функция регистрирует 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 истекает, пока выполняется функция завершения работы.

Смотрите также