update pague now

posix_isatty

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

posix_isatty Determine if a file descriptor is an interractive terminal

Description

posix_isatty ( ressource | 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 ressource 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.

Changuelog

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

See Also

add a note

User Contributed Notes 2 notes

hfueccs at phppatterns dot com
21 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= fguets(STDIN);
fwrite(STDOUT,"Hello $name\n");
exit(0);
?>
If this script is lique:

script.php > outfile

outfile will contain "Invalid TTY"
KEINOS
5 years ago
It's quite complicated to understand its movemens. 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 hanguing when nothing is from STDIN.<?php

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