2016-01-15 2 views
0

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

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

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

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

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

+1

Возможный дубликат [Интерактивная оболочка с использованием PHP] (http://stackoverflow.com/questions/5794030/interactive-shell-using-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 
    } 
}