Strona główna >PHP >Leksykon PHP – funkcje >register_shutdown_function

register_shutdown_function

register_shutdown_function($callback, ...$args)

Rejestruje funkcję, która wykona się po zakończeniu skryptu – po ostatnim wierszu, po exit, po błędzie krytycznym i po nieprzechwyconym wyjątku.

Parametry

  • $callback – funkcja do wykonania.
  • $args – opcjonalny, wartości, które funkcja dostanie przy wykonaniu.

Przykłady

// zapis błędów krytycznych, których set_error_handler() nie przechwyci
function check_on_shutdown() {
    $error = error_get_last();
    if ($error !== null && in_array($error["type"], array(E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR), true)) {
        error_log("Błąd krytyczny: " . $error["message"] . " w " . $error["file"] . ":" . $error["line"]);
    }
}
register_shutdown_function("check_on_shutdown");
// funkcja z argumentem – czas działania skryptu
function run_time($start) {
    $seconds = microtime(true) - $start;
    if ($seconds > 5) {
        error_log("Wolna strona: " . round($seconds, 1) . " s");
    }
}
register_shutdown_function("run_time", microtime(true));
// funkcja wykona się także po exit
// exit;

Na co uważać

  • Funkcje wykonują się w kolejności rejestracji. Jeśli któraś wywoła exit, następne już się nie wykonają.
  • Katalog roboczy może być przy wykonaniu inny (na przykład pod Apache). W ścieżkach używaj __DIR__.
  • Wyjście z funkcji jeszcze trafi do przeglądarki, ale nagłówki mogą być już wysłane.
  • Przy błędzie „Allowed memory size exhausted” funkcji zostaje niewiele pamięci. Pisz ją oszczędnie.
  • Żeby naprawdę zakończyć żądanie przed długą pracą w tle, pod PHP-FPM służy fastcgi_finish_request().

Powiązane funkcje:
set_error_handler()
set_exception_handler()
error_log()
microtime()