PHP readline()当STDIN不是键盘时

sup*_*afa 4 php redirect stdin stream readline

我正在编写一个能够从stdin读取然后请求确认的脚本.

<?php
$stream = fopen('php://stdin', 'r');
$input = fgets($stream, 1024);
$confirmation = readline('Are you sure?');
if ( $confirmation == 'y' )
    /* Do dangerous stuff */
Run Code Online (Sandbox Code Playgroud)

当我直接运行它:

$ php script.php
inputdata
^D
Are you sure?
Run Code Online (Sandbox Code Playgroud)

但我正在尝试使用STDIN文件来运行它.在这种情况下,readline()返回false并且不提示确认.

$ php script.php < data.txt
Run Code Online (Sandbox Code Playgroud)

要么

$ echo "foobar" | php script.php
Run Code Online (Sandbox Code Playgroud)

以这种方式调用此脚本时,如何从STDIN和键盘读取?

谢谢.

Shi*_*dim 6

使用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";
}
Run Code Online (Sandbox Code Playgroud)

控制台输出

样品1

    $ echo 'data
    > y
    > ' | php php_readline.php

    Are you sure? 
    Great! Lets go ahead
Run Code Online (Sandbox Code Playgroud)

样本2

$ php php_readline.php 
Some data

Are you sure?
n
Okay, May be next time
Run Code Online (Sandbox Code Playgroud)