readline
(PHP 4, PHP 5, PHP 7, PHP 8)
readline — 读取一行
说明
从用户端读取一行。必须使用 readline_add_history() 将这一行添加到历史记录中。
参数
prompt- 
      
可以指定字符串来作为用户的提示信息。
 
返回值
   从用户端返回单个字符串。返回的行将会移除行尾换行符。
   如果没有更多数据可读,则返回 false。
  
示例
示例 #1 readline() 示例
<?php
//get 3 commands from user
for ($i=0; $i < 3; $i++) {
$line = readline("Command: ");
readline_add_history($line);
}
//dump history
print_r(readline_list_history());
//dump variables
print_r(readline_info());
?>
  +添加备注
  
用户贡献的备注 5 notes
  
  
  Antony Penn ¶
  
 
  5 years ago
  Christian's code works well, but if you want to be able to hide the user input and not echo it to screen, you need to add -s to the read command. The code below is an expanded function that allows an optional prompt and optional hiding of the input:
function read_password($prompt=null, $hide=false)
{
    if($prompt) print $prompt;
    $s = ($hide) ? '-s' : '';
    $f=popen("read $s; echo \$REPLY","r");
    $input=fgets($f,100);
    pclose($f);
    if($hide) print "\n";
    return $input;
}  
  
  turdsurfer ¶
  
 
  7 years ago
  If your CLI script accepts input from STDIN and you also want it to prompt for a password (e.g. as mysql client does), then readline() won't work for you. 
What you need to do is read from the terminal device as shown below.
function readline_terminal($prompt = '') {
    $prompt && print $prompt;
    $terminal_device = '/dev/tty';
    $h = fopen($terminal_device, 'r');
    if ($h === false) {
        #throw new RuntimeException("Failed to open terminal device $terminal_device");
        return false; # probably not running in a terminal.
    }
    $line = rtrim(fgets($h),"\r\n");
    fclose($h);
    return $line;
}
$pass = readline_terminal('Password: ');  
  
  cox at idecnet dot com ¶
  
 
  23 years ago
  In CGI mode be sure to call:
ob_implicit_flush(true);
at the top of your script if you want to be able to output data before and after the prompt.
-- Tomas V.V.Cox  
  
  Anonymous ¶
  
 
  7 years ago
  a few observations....
I use Cygwin PHP v7 and readline is available. The readline_list_history() function though is not defined.
A prompt with escape sequences are sanitized, so use something like:
<?php
echo("\e[0m\e[34mPromt>\e[0m");
$inp = readline(' ');
?>
I have not fully documented it, but I see that sometimes strings beginning with punctuation characters do not make it into the history with readline_add_history(). They also sometimes clear the prompt string.  
  
  rojaro at gmail dot com ¶
  
 
16 years ago
  Note that readline() will return boolean "false" when the user presses CTRL+D.