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 — Lit un caractère dans un fichier
Description
string fgetc
( resource
$handle
)Lit un caractère dans un fichier.
Liste de paramètres
-
handle -
Le pointeur de fichier doit être valide et pointer sur un fichier ouvert avec succès par fopen() ou fsockopen() (et pas encore fermé par fclose()).
Valeurs de retour
Retourne une chaîne contenant un seul caractère, lu depuis le fichier pointé par
handle. Retourne FALSE à la fin du fichier.
Avertissement
Cette fonction peut
retourner FALSE, mais elle peut aussi retourner une valeur équivalent à
FALSE. Veuillez lire la section sur
les booléens pour plus d'informations.
Utilisez l'opérateur ===
pour tester la valeur de retour exacte de cette fonction.
Exemples
Exemple #1 Exemple avec fgetc()
<?php
$fp = fopen('somefile.txt', 'r');
if (!$fp) {
echo 'Impossible d'ouvrir le fichier somefile.txt';
}
while (false !== ($char = fgetc($fp))) {
echo "$char\n";
}
?>
Notes
Note: Cette fonction gère les chaînes binaires.
Voir aussi
- fread() - Lecture du fichier en mode binaire
- fopen() - Ouvre un fichier ou une URL
- popen() - Crée un processus de pointeur de fichier
- fsockopen() - Ouvre un socket de connexion Internet ou Unix
- fgets() - Récupère la ligne courante sur laquelle se trouve le pointeur du fichier
sfinktah at php dot spamtrak dot org
22-Mar-2011 06:33
alex at alexdemers dot me
11-May-2009 10:30
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);
}
?>
ktraas at gmail dot com (Kevin Traas)
23-Mar-2009 07:08
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"` ) );
