©
This document uses PHP Chinese website manual Release
(PHP 4, PHP 5)
readline — 读取一行
$prompt
] )从用户端读取一行.你必须自己使用 readline_add_history() 将这一行添加到历史记录中
prompt
你可以指定一个字符串来作为用户的提示信息
从用户端返回一个行字符串.返回的该行的行尾换行符会被删除
Example #1 readline() Example
<?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 ());
?>
[#1] Anonymous [2011-05-30 08:51:08]
The readline library is not available on Windows.
<?php
if (PHP_OS == 'WINNT') {
echo '$ ';
$line = stream_get_line(STDIN, 1024, PHP_EOL);
} else {
$line = readline('$ ');
}
?>
[#2] sean [2009-06-21 02:00:53]
I wanted a function that would timeout if readline was waiting too long... this works on php CLI on linux:
<?php
function readline_timeout($sec, $def)
{
return trim(shell_exec('bash -c ' .
escapeshellarg('phprlto=' .
escapeshellarg($def) . ';' .
'read -t ' . ((int)$sec) . ' phprlto;' .
'echo "$phprlto"')));
}
?>
Just call readline_timeout(5, 'whatever') to either read something from stdin, or timeout in 5 seconds and default to 'whatever'. I tried just using shell_exec without relying on bash -c, but that didn't work for me, so I had to go the round about way.
[#3] taneli at crasman dot fi [2009-03-24 00:21:10]
If you want to prefill the prompt with something when using readline, this worked for me:
<?php
function readline_callback($ret)
{
global $prompt_answer, $prompt_finished;
$prompt_answer = $ret;
$prompt_finished = TRUE;
readline_callback_handler_remove();
}
readline_callback_handler_install('Enter some text> ',
'readline_callback');
$prefill = 'foobar';
for ($i = 0; $i < strlen($prefill); $i++)
{
readline_info('pending_input', substr($prefill, $i, 1));
readline_callback_read_char();
}
$prompt_finished = FALSE;
$prompt_answer = FALSE;
while (!$prompt_finished)
readline_callback_read_char();
echo 'You wrote: ' . $prompt_answer . "\n";
?>
[#4] rojaro at gmail dot com [2008-10-31 07:28:41]
Note that readline() will return boolean "false" when the user presses CTRL+D.
[#5] soletan at toxa dot de [2006-09-04 05:44:17]
To haukew at gmail dot com:
readline provides more features than reading a single line of input ... your example misses line editing and history. If you don't need that, use something as simple as this:
function readline( $prompt = '' )
{
echo $prompt;
return rtrim( fgets( STDIN ), "\n" );
}
[#6] christian at gaeking dot de [2004-01-22 10:01:53]
A workaround if readline is not compiled into php, because for example the command is only needed within an installation routine. It works as follows under Linux:
$f=popen("read; echo \$REPLY","r");
$input=fgets($f,100);
pclose($f);
echo "Entered: $input\n";
[#7] cox at idecnet dot com [2002-02-03 08:06:39]
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