PHP 8.4.6 Released!

posix_isatty

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

posix_isattyDetermine if a file descriptor is an interactive terminal

Description

posix_isatty(resource|int $file_descriptor): bool

Determines if the file descriptor file_descriptor refers to a valid terminal type device.

Parameters

file_descriptor

The file descriptor, which is expected to be either a file resource or an int. An int will be assumed to be a file descriptor that can be passed directly to the underlying system call.

Return Values

Returns true if file_descriptor is an open descriptor connected to a terminal and false otherwise.

Changelog

Version Description
8.4.0 Set errno (error number) to EBADF when the file descriptor/stream passed is invalid.
8.3.0 Type error E_WARNINGs are now raised for integer coercions following the usual PHP type coercion semantics.

See Also

User Contributed Notes

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"
KEINOS
4 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