PHP Conference Nagoya 2025

posix_isatty

(PHP 4, PHP 5, PHP 7, PHP 8)

posix_isattyファイル記述子が対話型端末であるかどうかを定義する

説明

posix_isatty(resource|int $file_descriptor): bool

ファイル記述子 file_descriptor が、 有効な端末デバイスを指しているかどうかを調べます。

パラメータ

file_descriptor

ファイル記述子。ファイルリソースか、あるいは int で指定します。 int を指定した場合は、システムコールにそのまま渡せるファイル記述子だとみなします。

戻り値

file_descriptor がオープンされており、 かつ端末に接続されている場合に true、 それ以外の場合に false を返します。

変更履歴

バージョン 説明
8.3.0 通常の PHP の型変換のセマンティクスに従い、 整数を変換した場合に、型のエラーに関する E_WARNING が発生するようになりました。

参考

add a note

User Contributed Notes 2 notes

up
2
hfuecks at phppatterns dot com
20 years ago
Can be useful to determine whether output is being piped elsewhere, for PHP shell scripts, for example;

#!/usr/local/bin/php
<?php
if ( !posix_isatty(STDOUT) ) {
fwrite(STDOUT, "Invalid TTY\n");
exit(
2);
}
fwrite(STDOUT, "Enter you name\n");
$name = fgets(STDIN);
fwrite(STDOUT,"Hello $name\n");
exit(
0);
?>

If this script is like:

script.php > outfile

outfile will contain "Invalid TTY"
up
1
KEINOS
3 years ago
It's quite complicated to understand its movements. But it determines if the file_descriptor is open AND connected to a terminal.

Thus, while receiving data from the STDIN, for example, it will return false.

This move is useful to optionally pipe STDIN to a PHP script, to avoid hanging when nothing is from STDIN.

<?php

// Simply echoes the contents from STDIN if any
// and "no stdin" if not.
echo (posix_isatty(STDIN)) ? 'no stdin' . PHP_EOL : file_get_contents('php://stdin');
?>
To Top