2024 年日本 PHP 研討會

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 現在,根據常見的 PHP 類型強制轉換語義,整數強制轉換會引發類型錯誤 E_WARNING

參見

新增註解

使用者貢獻的註解 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