20.3. Reading from the Keyboard
Problem
You need to read in some typed user input.
Solution
Use fopen( )
with the special filename
php://stdin:
print "Type your message. Type '.' on a line by itself when you're done.\n";
$fh = fopen('php://stdin','r') or die($php_errormsg);
$last_line = false; $message = '';
while (! $last_line) {
$next_line = fgets($fp,1024);
if (".\n" == $next_line) {
$last_line = true;
} else {
$message .= $next_line;
}
}
print "\nYour message is:\n$message\n";If the
Readline
extension is installed, use readline( ):
$last_line = false; $message = '';
while (! $last_line) {
$next_line = readline();
if ('.' == $next_line) {
$last_line = true;
} else {
$message .= $next_line."\n";
}
}
print "\nYour message is:\n$message\n";Discussion
Once you get a file handle pointing to stdin
with fopen( ), you can use all the standard
file-reading functions to process input (fread( ),
fgets( ), etc.) The solution uses fgets( ), which returns input a line at a time. If you use
fread( ), the input still needs to be
newline-terminated to make fread( ) return. For
example, if you run:
$fh = fopen('php://stdin','r') or die($php_errormsg);
$msg = fread($fh,4);
print "[$msg]";And type in tomato and then a newline, the output
is [toma]. The fread( ) grabs
only four characters from stdin, as directed,
but still needs the newline as a signal to return from waiting for
keyboard input.
The Readline extension provides an interface to the
GNU Readline library. The
readline( ) function returns ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access