我有一个在控制台上运行的PHP脚本。
while(1) {
doStuff();
sleep(2);
}
我需要接受来自控制台的输入。我不希望每次循环停止并等待我输入一些文本。
我想要的是while循环继续正常,如果我在控制台中键入内容,php脚本能够读取该文本并更新某些变量。
可以这样做吗?
答案 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
}
}