Определить, является ли stdin устройством tty (терминалом) или каналом в PHP? - PullRequest
11 голосов
/ 06 сентября 2010

Я написал скрипт PHP. Я хочу показать сообщение справки при вызове со стандартным вводом, подключенным к tty-устройству (терминалу), до чтения и выполнения в интерактивном режиме, но не показывать при вызове с файлом или потоком из канала как стандартный ввод.

Есть ли способ обнаружить это из PHP?

Ответы [ 2 ]

12 голосов
/ 06 сентября 2010

Использование posix_isatty.

Эта функция принимает как файловый дескриптор (целое число), так и поток PHP.Если он получает поток PHP, он автоматически пытается привести его , чтобы получить дескриптор файла и использовать его вместо этого.

0 голосов
/ 20 марта 2018

Начиная с PHP 7.2, вы можете использовать stream_isatty, который работает и в Windows.

Например:

php -r "var_dump(stream_isatty(STDERR));"

Результат в

bool(true)

Но

php -r "var_dump(stream_isatty(STDERR));" 2>output.txt

Результат

bool(false)

(это, конечно, работает и на STDOUT).

...