readline

(PHP 4, PHP 5, PHP 7, PHP 8)

readline一行読み込む

説明

readline(?string $prompt = null): string|false

ユーザーからの入力を一行読み込みます。 この行を readline_add_history() を用いてヒストリに追加する必要があります。

パラメータ

prompt

ユーザーに示す確認文字列を指定します。

戻り値

ユーザーから取得した文字列を一つだけ返します。 戻り値の最後の改行は取り除かれます。 読み取るデータが残っていない場合、false を返します。

例1 readline() の例

<?php
// ユーザーから 3 回コマンドを取得
for ($i=0; $i < 3; $i++) {
$line = readline("Command: ");
readline_add_history($line);
}

// ヒストリをダンプ
print_r(readline_list_history());

// 変数をダンプ
print_r(readline_info());
?>

add a note

User Contributed Notes 5 notes

up
16
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;}
up
7
turdsurfer
8 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: ');
up
2
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
up
0
Anonymous
8 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.
up
-1
rojaro at gmail dot com
16 years ago
Note that readline() will return boolean "false" when the user presses CTRL+D.
To Top