PHP 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?
Но я пытаюсь запустить его, используя файл в качестве стандартного ввода. В этом случае функция readline() возвращает значение false, и подтверждение не запрашивается.
$ php script.php < data.txt
Или
$ echo "foobar" | php script.php
Как я могу читать как с стандартного ввода, так и с клавиатуры при вызове этого скрипта таким образом?
Спасибо.
4
Author: superruzafa, 0000-00-00
1 answers
Используйте функцию 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