我正在编写一个能够从标准输入读取然后请求确认的脚本。
<?php
$stream = fopen('php://stdin', 'r');
$input = fgets($stream, 1024);
$confirmation = readline('Are you sure?');
if ( $confirmation == 'y' )
/* Do dangerous stuff */
当我直接运行它时:
$ php script.php
inputdata
^D
Are you sure?
但我正在尝试使用一个文件作为 STDIN 来运行它。在这种情况下,readline() 返回 false 并且不提示确认。
$ php script.php < data.txt
或
$ echo "foobar" | php script.php
以这种方式调用此脚本时,如何从 STDIN 和键盘读取两者?
谢谢。
最佳答案
使用fgetc使用 STDIN
函数。请参见下面的示例。
$input = fgets(STDIN, 1024);
echo "\nAre you sure?\n";
$conf = fgetc(STDIN);
if($conf=='y'){
echo "Great! Lets go ahead\n";
}else{
echo "Okay, May be next time\n";
}
控制台输出
示例 1
$ echo 'data
> y
> ' | php php_readline.php
Are you sure?
Great! Lets go ahead
示例 2
$ php php_readline.php
Some data
Are you sure?
n
Okay, May be next time
关于PHP readline() 当 STDIN 不是键盘时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9486322/