JavaScriptを有効にしてください

【PHP】CLI で入力がなかったらタイムアウトさせる方法

 ·  ☕ 1 分で読めます

【PHP】CLI で入力がなかったらタイムアウトさせる方法

PHP で CLI で入力を求めた際、一定時間に入力されなかったらタイムアウトさせる方法

stream_selectを使用する

stream_select を使用して実現させます。

1
2
3
4
5
6
7
 stream_select(
    ?array &$read,
    ?array &$write,
    ?array &$except,
    ?int $seconds,
    ?int $microseconds = null
): int|false

第4引数にタイムアウト秒を設定することができるのでそれを利用します。

入力がなかったらタイムアウトさせる

実装は以下のようになります。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
$stdin = fopen('php://stdin', 'r');
$read = [$stdin];
$write = $except = [];
$timeout = 5;

echo "Please Input Yes/No ... (Input Time limit {$timeout} sec)" . PHP_EOL;

if (stream_select($read, $write, $except, $timeout)) {
    // 入力値受け取り
    $line = trim(fgets($stdin));

    // 入力値確認
    switch (strtolower($line)) {
        case 'y':
        case 'yes':
            echo 'Input Yes' . PHP_EOL;
            break;
        case 'n':
        case 'no':
            echo 'Input No' . PHP_EOL;
            break;
        default:
            echo 'Input Other than Yes/No' . PHP_EOL;
            break;
    }
} else {
    // 入力なし タイムアウト
    echo "timeout" . PHP_EOL;
}

これで一定時間入力がなかった場合、タイムアウトを発生させて処理を終わらせることができます。

参考

共有

こぴぺたん
著者
こぴぺたん
Copy & Paste Engineer