Чтение ввода с клавиатуры

Задача
Необходимо прочитать клавиатурный ввод пользователя.

Решение
Для этого нужна функция fopen() со специальным именем файла php://stdin:

print "Type your message. Type '.' on a line by itself when you're done.\n";
$fh = fopen('php://stdin','r') or die($php_errormsg);
$last_line = false; $message = '';
while (! $last_line) {
$next_line = fgets($fp,1024);
if (".\n" == $next_line) {
$last_line = true;
} else {
$message .= $next_line;
}
}
print "\nYour message is:\n$message\n";

Если инсталлировано расширение Readline, вызывайте функцию readline():

$last_line = false; $message = '';
while (! $last_line) {
$next_line = readline();
if ('.' == $next_line) {
$last_line = true;
} else {
$message .= $next_line."\n";
}
}
print "\nYour message is:\n$message\n";

Обсуждение
Получив с помощью функции fopen() дескриптор файла, указывающего на stdin, для обработки ввода можно использовать все стандартные функции чтения файла (fread(), fgets() и т.


д.). В данном решении задействована функция fgets(), за один раз возвращающая одну строку ввода. Если вызывается функция fread(), то ввод все равно должен завершаться символом новой строки, чтобы заставить функцию fread() вернуть значение. Например, если выполнить код:

$fh = fopen('php://stdin','r') or die($php_errormsg);
$msg = fread($fh,4);
print "[$msg]";

и ввести строку tomato, а затем символ новой строки, то на выходе получится строка [toma]. Функция fread(), как указано, забирает из stdin только четыре символа, но ей нужен символ новой строки – как сигнал выхода из ожидания ввода с клавиатуры. Расширение Readline предоставляет интерфейс к библиотеке GNU Readline. Функция readline() возвращает строку за один раз без символа новой строки в конце. Readline позволяет редактировать строки в стиле Emacs и vi. Ее можно применять для хранения истории введенных ранее команд:

$command_count = 1;
while (true) {
$line = readline("[$command_count]--> ");
readline_add_history($line);
if (is_readable($line)) {
print "$line is a readable file.\n";
}
$command_count++;
}

Этот пример показывает приглашение с увеличивающимся счетчиком перед каждой строкой. Поскольку каждая строка добавляется к истории прочитанных строк с помощью функции readline_add_history(), нажатие стрелок вверх и вниз позволяет прокручивать введенные строки.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Анализ аргументов программы
Анализ аргументов программы с помощью getopt
Показ в окне графических элементов управления
Показ в окне нескольких графических элементов управления
Показ меню

Вернуться в раздел: PHP / 20. PHP на стороне клиента