PHP цикл прослушивания для ввода пользователя

У меня есть PHP-скрипт, который запускается на консоли.

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

Мне нужно принять ввод с консоли. Я не хочу, чтобы цикл останавливался каждый раз и ждал, пока я введу какой-нибудь текст.

Я хочу, чтобы цикл продолжался как обычно, если я что-то наберу в консоли, скрипт php сможет прочитать этот текст и обновить некоторую переменную.

Можно ли это сделать?

1

Решение

Вы можете сделать это с неблокирующим вводом / выводом. Вам понадобится 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
}
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]