Erkennen, wenn stdin ein TTY-Gerät (Terminal) oder Rohr in PHP ist?
Frage
Ich schrieb einen PHP-Skript. Ich will es Hilfemeldung zeigen, wenn sie mit der Standardeingabe mit einem TTY-Gerät (Terminal) vor dem Lesen und Ausführen interaktiv, aber derzeit Show genannt, wenn sie mit einer Datei oder einen Strom von der Leitung als Standardeingabe bezeichnet.
Gibt es eine Möglichkeit, dies von PHP zu erkennen?
Lösung
Verwenden Sie posix_isatty
.
Diese Funktion akzeptiert sowohl einen Dateideskriptor (eine ganze Zahl) und einen PHP-Stream. Wenn es einen PHP-Strom empfängt, wird es automatisch versucht, warf es um einen Dateideskriptor zu erhalten, und es stattdessen verwenden.
Andere Tipps
Seit 7.2 PHP können Sie verwenden stream_isatty
, die auch unter Windows funktioniert.
Zum Beispiel:
php -r "var_dump(stream_isatty(STDERR));"
Ergebnisse in
bool(true)
Aber
php -r "var_dump(stream_isatty(STDERR));" 2>output.txt
Ergebnisse in
bool(false)
(dies funktioniert natürlich auf STDOUT auch).