PHP readline() 当 STDIN 不是键盘时

标签 php stream redirect stdin readline

我正在编写一个能够从标准输入读取然后请求确认的脚本。

<?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/

相关文章:

php - codeigniter 表单验证错误消息不显示

PHP:用逗号分隔数组

php - 从价格栏中获取 0-5000 和 50001-10000 之间的价格?

python - python中无法pickled的多进程任务?

node.js - 如何在以多部分形式处理文件流之前等待字段

stream - 在 Windows Phone 8 SD 卡上读取文件的问题

ruby-on-rails - 使用表单重定向

.htaccess - 301 将整个网站重定向到单个页面

powershell - 将 stdout 和 stderr 捕获到文件,同时将它们保留在终端中

php - 如何仅针对某些字段向 phpMyAdmin 添加自定义编辑器?