Register shutdown function: примеры (PHP)
register_shutdown_function(callable $callback, mixed ...$args): voidФункция register_shutdown_function в PHP
Функция register_shutdown_function регистрирует callback-функцию, которая выполняется после завершения основного скрипта или при возникновении фатальной ошибки. Эта возможность применяется для задач финализации: логирования, отправки статистики, закрытия соединений с базами данных, очистки временных файлов.
Функция принимает переменное количество аргументов:
register_shutdown_function(callable $callback, mixed ...$args): void- $callback — вызываемая функция, может быть строкой с именем функции, массивом [класс, метод] или анонимной функцией.
- ...$args — необязательные аргументы, передаваемые в callback-функцию при вызове.
Примеры использования register_shutdown_function
register_shutdown_function(function() {
echo 'Скрипт завершён';
});
echo 'Основной поток выполнения. ';Основной поток выполнения. Скрипт завершён
register_shutdown_function(function($msg, $code) {
echo "$msg. Код: $code";
}, 'Завершение работы', 200);Завершение работы. Код: 200
class Logger {
public static function log() {
echo 'Логирование завершения';
}
}
register_shutdown_function(['Logger', 'log']);Логирование завершения
Альтернативные функции в PHP
Устанавливает обработчик непойманных исключений. Используется для централизованной обработки исключений вместо регистрации завершающей функции для каждой операции.
Определяет пользовательский обработчик ошибок. Обрабатывает предупреждения и ошибки, но не фатальные. Часто используется вместе с register_shutdown_function для обработки всех типов ошибок.
Магический метод, вызываемый при уничтожении объекта. Подходит для освобождения ресурсов конкретного объекта, в то время как register_shutdown_function работает на уровне всего скрипта.
Аналоги в других языках программирования
import atexit
def cleanup():
print('Очистка ресурсов')
atexit.register(cleanup)
print('Основной код')Основной код Очистка ресурсов
window.addEventListener('beforeunload', function(event) {
console.log('Страница будет закрыта');
});В JavaScript нет прямого аналога, но событие beforeunload позволяет выполнить код перед закрытием страницы.
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
System.out.println('Завершение JVM');
}));Типичные ошибки при использовании
header('Content-Type: text/html');
register_shutdown_function(function() {
header('Location: /new-page'); // Ошибка!
});Warning: Cannot modify header information - headers already sent
register_shutdown_function('undefined_function');Fatal error: Uncaught Error: Call to undefined function undefined_function()
register_shutdown_function(function() {
while(true) { // Бесконечный цикл
file_put_contents('log.txt', time());
}
});Скрипт может не завершиться, потреблять ресурсы сервера.
Изменения в последних версиях PHP
Улучшена проверка типов аргументов при вызове. Передача некорректного callable вызывает TypeError.
Ранее возвращаемые значения shutdown-функций игнорировались. Сейчас они доступны через debug_backtrace, но не влияют на выполнение.
Были внесены улучшения для корректной работы замыканий в shutdown-функциях.
Расширенные примеры использования
$start = microtime(true);
register_shutdown_function(function() use ($start) {
$time = microtime(true) - $start;
file_put_contents('time.log', "Время выполнения: $time сек");
});
// Длительная операция
for($i = 0; $i < 1000000; $i++) {}register_shutdown_function(function() {
$error = error_get_last();
if($error && $error['type'] === E_ERROR) {
mail('admin@site.com', 'Фатальная ошибка', print_r($error, true));
}
});
// Вызов несуществующей функции
nonexistent_function();register_shutdown_function(function() {
echo 'Первая функция. ';
});
register_shutdown_function(function() {
echo 'Вторая функция. ';
});
register_shutdown_function(function() {
echo 'Третья функция.';
});Первая функция. Вторая функция. Третья функция.
session_start();
register_shutdown_function(function() {
session_write_close();
echo 'Сессия сохранена';
});
$_SESSION['last_visit'] = time();PHP register_shutdown_function function comments
- Php register shutdown function - аргументы и возвращаемое значение
- Функция php register_shutdown_function - описание
- register shutdown function - примеры
- register shutdown function - похожие методы на php
- register_shutdown_function на js, python, mysql
- register shutdown function изменения php
- Примеры register_shutdown_function на php