register_shutdown_function
シャットダウン時に実行する関数を登録する
説明
void register_shutdown_function(callable $callback
, mixed ...$args
)
register_shutdown_function は複数回コールする
ことが可能で、登録された順に関数がコールされます。
登録した関数内で 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
が経過しても、実行中の関数は終了しません。