ConFoo 2025

posix_isatty

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

posix_isattyErmittelt, ob ein Dateideskriptor ein interaktives Terminal ist

Beschreibung

posix_isatty(resource|int $file_descriptor): bool

Ermittelt, ob der Dateideskriptor file_descriptor auf ein gültiges terminalartiges Gerät verweist.

Parameter-Liste

file_descriptor

Der Dateideskriptor, welcher entweder eine Datei-Ressource oder ein Wert vom Typ int sein sollte. Ist dies ein int, dann wird davon ausgegangen, dass es sich um einen Dateideskriptor handelt, welcher direkt an den zugrundeliegenden Systemaufruf übergeben werden kann.

Rückgabewerte

Gibt true zurück, falls file_descriptor ein offener Deskriptor ist, der mit einem Terminal verbunden ist, und andernfalls false.

Changelog

Version Beschreibung
8.3.0 Wenn ein Integer zwangsweise umgewandelt wird (coercive typing), wird nun ein Typfehler der Stufe E_WARNING ausgelöst, der der üblichen PHP-Semantik für Typzwang entspricht.

Siehe auch

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