У меня проблема с чтением команд ввода из консольного приложения, созданного на php.
ПРОБЛЕМА
Если пользователь, использующий консоль по ошибке, нажимает два или более раз ENTER или несколько символов во время загрузки процесса, команда читается перед тем, как задать вопрос, а затем пропустить следующий.
Я пробовал эти методы для ввода входного значения, но каждый раз обнаруживаю одну и ту же проблему:
fgets(STDIN);
readline("Question: ");
stream_get_line(STDIN, 1024, "\n");
Пример кода:
<?php
for($i = 0; $i < 15; $i++){
$read = readline("Question $i: "); // Look at the number
echo "Your answer is: " . $read . PHP_EOL;
sleep(2); // Now on execution try press ENTER one ore more times
}
ПОПЫТКИ
Я попробовал это, но этот метод не работает на буферах (я попробовал в любом случае, чтобы быть уверенным):
$handle = fopen('php://stdin', 'r+');
ftruncate($handle, 0);
rewind($handle);
fclose($handle);
$read = readline("Question: ");
ВОПРОС
Как я могу читать и ждать ввода в момент отображения вопроса, отбрасывая предыдущий ввод?