PHP循环侦听用户输入

时间:2016-01-15 20:36:00

标签: php while-loop readline

我有一个在控制台上运行的PHP脚本。

while(1) {
 doStuff();
 sleep(2);
}

我需要接受来自控制台的输入。我不希望每次循环停止并等待我输入一些文本。

我想要的是while循环继续正常,如果我在控制台中键入内容,php脚本能够读取该文本并更新某些变量。

可以这样做吗?

1 个答案:

答案 0 :(得分:1)

您可以使用非阻塞I / O执行此操作。您需要stream_set_blocking方法和stream_select

stream_set_blocking(STDIN, FALSE);

while (1) {
    doStuff();

    $readStreams = [STDIN];
    $timeout = 2;

    // stream_select will block for $timeout seconds OR until STDIN
    // contains some data to read.
    $numberOfStreamsWithData = stream_select(
        $readStreams,
        $writeStreams = [],
        $except = [],
        $timeout
    );

    if ($numberOfStreamsWithData > 0) {
        $userInput = fgets(STDIN);

        // process $userInput as you see fit
    } else {
        // no user input; repeat loop as normal
    }
}