【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;
}
|
これで一定時間入力がなかった場合、タイムアウトを発生させて処理を終わらせることができます。
参考