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 — Dosya tanıtıcısından bir karakter döndürür
Açıklama
$dt
)Belirtilen dosya tanıtıcısından bir karakter döndürür.
Değiştirgeler
-
dt -
Dosya tanıtıcısı geçerli olmalı ve fopen() veya fsockopen() tarafından başarıyla açılmış bir dosya için döndürülmüş olmalıdır (ve henüz fclose() tarafından kapatılmamış olmalıdır).
Dönen Değerler
Dosya tanıtıcısı dt ile belirtilen bir dosyadan
tek bir karakter içeren bir dizge döndürür. Dosya sonuna
gelindiğinde FALSE döndürür.
Bu işlev mantıksal FALSE
değeriyle dönebileceği gibi FALSE olarak değerlendirilebilecek mantıksal
olmayan bir değerle de dönebilir. Bu konuda daha fazla bilgi edinmek için
Mantıksal Değerler bölümüne
bakabilirsiniz. Bu işlevden dönen değeri sınamak için
===
işlecini kullanınız.
Örnekler
Örnek 1 - fgetc() örneği
<?php
$dt = fopen('birdosya.txt', 'r');
if (!$dt) {
echo 'birdosya.txt dosyası açılamadı';
}
while (false !== ($kar = fgetc($dt))) {
echo "$kar\n";
}
?>
Notlar
Bilginize: Bu işlev ikil dosyalarla çalışırken dosya içeriğini değiştirmez.
Ayrıca Bakınız
- fread() - Dosyayı ikil kipte okur
- fopen() - Bir dosya veya URL'yi açar
- popen() - Bir süreç tanıtıcısı açar
- fsockopen() - Bir internet veya Unix alan soketi bağlantısı açar
- fgets() - Dosya tanıtıcısından bir satır döndürür
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"` ) );
