« get_defined_functions
register_tick_function »

register_shutdown_function

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

register_shutdown_function — シャットダウン時に実行する関数を登録する

説明

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

スクリプト処理が完了したとき、あるいは exit() がコールされたときに実行するコールバック関数を登録します。

register_shutdown_function() は複数回コールする ことが可能で、登録された順に関数がコールされます。 登録した関数内で exit() をコールした場合、 処理はそこで終了してその他のシャットダウン関数はコールされません。

警告

PHP 8.4.0 以降は、登録したシャットダウン関数内で引数なしの exit() をコールすると、終了コードが 0 にリセットされます。 明示的にステータスを指定して exit() をコールした場合は、 すべてのバージョンで、それ以前の終了コードが上書きされます。

シャットダウン関数は、 別のシャットダウン関数をキューの最後に追加するために、 register_shutdown_function() そのものをコールしても構いません。

パラメータ

callback

登録するコールバック。

シャットダウン時のコールバックは、リクエストの一部として実行されます。 したがって、コールバック関数からも出力を送信できるし、出力バッファにもアクセスできます。

args

シャットダウン関数にパラメータを渡すには、ここで追加のパラメータを渡します。

戻り値

値を返しません。

例

例1 register_shutdown_function() の例

<?php
function shutdown()
{
    // これがシャットダウン関数で、
    // スクリプトの処理が完了する前に
    // ここで何らかの操作をすることができます

    echo 'Script executed with success', PHP_EOL;
}

register_shutdown_function('shutdown');
?>

注意

注意:

Apache などいくつかの Web サーバーでは、スクリプトの作業ディレクトリが シャットダウン関数内で変わることがあります。

注意:

SIGTERM あるいは SIGKILL でプロセスが終了した場合は、シャットダウン関数を実行しません。 SIGKILL を横取りすることはできませんが、SIGTERM 用のハンドラは pcntl_signal() で登録できます。ここで exit() を使えば、きれいに終わらせることができます。

注意:

シャットダウン関数は、 max_execution_time の経過とは別に実行されます。 つまり、プロセスが非常に長時間実行された後に終了しても、 シャットダウン関数はコールされます。 さらに、 シャットダウン関数を実行中に max_execution_time が経過しても、実行中の関数は終了しません。

参考

関連キーワード:
シャットダウン   登録   shutdown   register   exit   スクリプト   バック   コード   callback   args   完了   ステータス   execution   time   経過   defined   functions   tick   callable   mixed   複数回   リセット   明示   キュー   最後
関連する関数・ページ:
function.session-register-shutdown   function.exit   function.register-tick-function   book.funchand   features.connection-handling   ref.funchand