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"` ) );
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
ktraas at gmail dot com (Kevin Traas) ¶
4 years ago
sfinktah at php dot spamtrak dot org ¶
2 years ago
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();
?>
alex at alexdemers dot me ¶
4 years ago
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);
}
?>
