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 — Lê um caracter do ponteiro de arquivo
Descrição
string fgetc
( resource $handle
)
Obtém um caractere de um dado ponteiro de arquivo.
Parâmetros
- handle
-
O ponteiro do arquivo tem de ser válido por uma chamada a fopen() ou fsockopen() (e ainda não fechado por fclose()).
Valor Retornado
Retorna uma string contendo um único caractere lido do ponteiro do arquivo passado por handle . Retorna FALSE em EOF.
Aviso
Esta função pode retornar o booleano FALSE, mas também pode retornar um valor não-booleano que pode ser avaliado como FALSE, como 0 ou "". Leia a seção em Booleanos para maiores informações. Utilize o operador === para testar o valor retornado por esta função.
Exemplos
Exemplo #1 Um exemplo da fgetc()
<?php
$fp = fopen('algumarquivo.txt', 'r');
if (!$fp) {
echo 'Não é possivel abrir algumarquivo.txt';
}
while (false !== ($char = fgetc($fp))) {
echo "$char\n";
}
?>
Notas
Nota: Esta função é compatível com dados binários
Veja Também
- fread() - Leitura binary-safe de arquivo
- fopen() - Abre um arquivo ou URL
- popen() - Abre um processo como ponteiro de arquivo
- fsockopen() - Abre um socket de conexão Internet ou de domínio Unix
- fgets() - Lê uma linha de um ponteiro de arquivo
fgetc
alex at alexdemers dot me
11-May-2009 05:30
11-May-2009 05:30
ktraas at gmail dot com (Kevin Traas)
24-Mar-2009 03:08
24-Mar-2009 03: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"` ) );
