To read a single key-press in CLI mode, you can either use ncurses (which will probably require additional modules for PHP) or get nasty with the *nix "/bin/stty" command)
<?php
function stty($options) {
exec($cmd = "/bin/stty $options", $output, $el);
$el AND die("exec($cmd) failed");
return implode(" ", $output);
}
function getchar($echo = false) {
$echo = $echo ? "" : "-echo";
# Get original settings
$stty_settings = preg_replace("#.*; ?#s", "", stty("--all"));
# Set new ones
stty("cbreak $echo");
# Get characters until a PERIOD is typed,
# showing their hexidecimal ordinal values.
printf("> ");
do {
printf("%02x ", ord($c = fgetc(STDIN)));
} while ($c != '.');
# Return settings
stty($stty_settings);
}
getchar();
?>
fgetc
(PHP 4, PHP 5)
fgetc — Взима символ от файлов указател
Описание
Взима символ от файлов указател.
Параметри
- handle
-
Файловият указател трябва да бъде валиден, и трябва да сочи към файл, който е бил отворен успешно чрез функция fopen() или fsockopen() (и все още да не е затворен от fclose()).
Връщани стойности
Връща низ, съдържащ един символ, от файл указан чрез манипулатор handle . Символът се взима от текущата позиция, сочена от указателя на файла. Връща FALSE в случаите, когато указателят на файла е в неговия край (EOF).
Тази функция може да върне булева стойност FALSE, но може също да върне небулева стойност, която се интерпретира като FALSE, като 0 или "". Вижте раздел Булев тип за повече информация. Използвайте оператора === за проверка на връщаната стойност от тази функция.
Примери
Example #1 Пример за fgetc()
<?php
$fp = fopen('somefile.txt', 'r');
if (!$fp) {
echo 'Не мога да отворя somefile.txt';
}
while (false !== ($char = fgetc($fp))) {
echo "$char\n";
}
?>
Бележки
Забележка: Тази функция е двоично сигурна (binary-safe).
Вж. също
- fread() - Двоично-безопасно изчитане на файл
- fopen() - Отваря файл или URL
- popen() - Отваря файлов манипулатор към процес
- fsockopen() - Open Internet or Unix domain socket connection
- fgets() - Взима ред от файл от позицията, сочена от файловия указател
The best and simplest way to get input from a user in the CLI with only PHP is to use fgetc() function with the STDIN constant:
<?php
echo 'Are you sure you want to quit? (y/n) ';
$input = fgetc(STDIN);
if ($input == 'y')
{
exit(0);
}
?>
I was using command-line PHP to create an interactive script and wanted the user to enter just one character of input - in response a Yes/No question. Had some trouble finding a way to do so using fgets(), fgetc(), various suggestions using readline(), popen(), etc. Came up with the following that works quite nicely:
$ans = strtolower( trim( `bash -c "read -n 1 -t 10 ANS ; echo \\\$ANS"` ) );
