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);
}
?>
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 comme 0 ou "". 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 une socket de connexion Internet ou Unix
- fgets() - Récupère la ligne courante sur laquelle se trouve le pointeur du fichier
fgetc
alex at alexdemers dot me
11-May-2009 07:30
11-May-2009 07:30
ktraas at gmail dot com (Kevin Traas)
24-Mar-2009 04:08
24-Mar-2009 04: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"` ) );
