Readline 函数
在线手册:中文  英文

readline

(PHP 4, PHP 5)

readlineReads a line

说明

string readline ([ string $prompt ] )

Reads a single line from the user. You must add this line to the history yourself using readline_add_history().

参数

prompt

You may specify a string with which to prompt the user.

返回值

Returns a single string from the user. The line returned has the ending newline removed.

范例

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());
?>


Readline 函数
在线手册:中文  英文

用户评论:

Anonymous (2011-05-30 09:12:26)

Calling readline() always enables filename autocompletion even if not requested. It does so by looking for files in the current working directory.
EDIT: if you don't want/need this then register your own completion function using http://php.net/manual/en/readline-completion-function

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(STDIN1024PHP_EOL);
} else {
  
$line readline('$ ');
}
?>

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.

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$i1));
    
readline_callback_read_char();
  }

  
$prompt_finished FALSE;
  
$prompt_answer FALSE;
  while (!
$prompt_finished)
    
readline_callback_read_char();
  echo 
'You wrote: ' $prompt_answer "\n";
?>

rojaro at gmail dot com (2008-10-31 07:28:41)

Note that readline() will return boolean "false" when the user presses CTRL+D.

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" );
}

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";

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

易百教程