Detect if stdin is a tty device (terminal) or pipe in PHP?
I wrote a php script. I want it show help message when called with standard in开发者_如何学编程put connected to a tty device (terminal) before reading and executing interactively, but dont show when called with a file or stream from pipe as standard input.
Is there a way to detect this from PHP?
Use posix_isatty
.
This function accepts both a file descriptor (an integer) and a PHP stream. If it receives a PHP stream, it automatically attempts to cast it in order to obtain a file descriptor and use it instead.
Since PHP 7.2 you can use stream_isatty
, which works on Windows too.
For example:
php -r "var_dump(stream_isatty(STDERR));"
Results in
bool(true)
But
php -r "var_dump(stream_isatty(STDERR));" 2>output.txt
Results in
bool(false)
(this of course works on STDOUT too).
精彩评论