PHP Conference Japan 2024

posix_isatty

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

posix_isatty确定文件描述符是否是交互式终端

描述

posix_isatty(资源|整数 $file_descriptor): 布尔值

确定文件描述符 file_descriptor 是否引用有效的终端类型设备。

参数

file_descriptor

文件描述符,预期为文件 资源整数。整数将被假定为可以直接传递给底层系统调用的文件描述符。

返回值

如果 file_descriptor 是连接到终端的打开描述符,则返回 true;否则返回 false

变更日志

版本 描述
8.4.0 当传递的文件描述符/流无效时,将errno(错误号)设置为EBADF
8.3.0 现在针对整数强制转换会引发类型错误E_WARNING,遵循通常的PHP类型强制转换语义。

参见

添加注释

用户贡献的注释 2 条注释

hfuecks at phppatterns dot com
20 年前
例如,对于PHP shell脚本,这可以用来确定输出是否正在被管道传输到其他地方;

#!/usr/local/bin/php
<?php
if ( !posix_isatty(STDOUT) ) {
fwrite(STDOUT, "无效的TTY\n");
exit(
2);
}
fwrite(STDOUT, "请输入您的姓名\n");
$name = fgets(STDIN);
fwrite(STDOUT,"您好,$name\n");
exit(
0);
?>

如果该脚本类似于

script.php > outfile

outfile 将包含“无效的TTY”
KEINOS
3年前
理解它的运行机制相当复杂。但它确定file_descriptor是否已打开并连接到终端。

因此,例如,在从STDIN接收数据时,它将返回false。

此功能对于选择性地将STDIN管道传输到PHP脚本非常有用,以避免在STDIN没有任何内容时挂起。

<?php

// 只回显STDIN中的内容(如果有)
//如果没有,则回显"no stdin"
echo (posix_isatty(STDIN)) ? 'no stdin' . PHP_EOL : file_get_contents('php://stdin');
?>
To Top