sapi_windows_set_ctrl_handler

CTRLイベント のハンドラを設定したり削除したりする

説明

bool sapi_windows_set_ctrl_handler(callablenull $handler, bool $add = true)

CTRL イベントのハンドラを設定したり削除したりします。 これによって、Windows の CLI プロセスが、 CTRL+CCTRL+BREAK イベントに割り込んだり、無視したり出来るようになります。 マルチスレッド環境では、この操作はメインスレッドからのみ可能です。

パラメータ

handler

設定したり削除したりするコールバック関数。 設定した場合、この関数は CTRL+C または CTRL+BREAK イベントが発生した場合にいつでも呼び出されます。 関数のシグネチャは次のとおりです:

void handler(int $event)
event
受け取った CTRL イベント; PHP_WINDOWS_EVENT_CTRL_C または PHP_WINDOWS_EVENT_CTRL_BREAK
nullhandler に設定すると、 CTRL+Cイベント をプロセスに無視させますが、 CTRL+BREAK イベントは無視しません。

add

true に設定し、ハンドラを設定します。 false の場合、ハンドラは削除されます。

戻り値

成功した場合に true を、失敗した場合に false を返します。

例1 基本的な sapi_windows_set_ctrl_handler 関数の使い方

以下の例は、 CTRLイベント にどのように割り込むかを示しています。

<?php
function ctrl_handler(int $event)
{
    switch ($event) {
        case PHP_WINDOWS_EVENT_CTRL_C:
            echo "You have pressed CTRL+C\n";
            break;
        case PHP_WINDOWS_EVENT_CTRL_BREAK:
            echo "You have pressed CTRL+BREAK\n";
            break;
    }
}

sapi_windows_set_ctrl_handler('ctrl_handler');
while (true); // ハンドラがトリガできるように無限ループにする
?>

参考

  • sapi_windows_generate_ctrl_event