stream_isatty în PHP

Stream-uri PHP 7.2+

Verifică dacă un stream este legat de un terminal, de exemplu dacă scriptul afișează direct în consolă.

Sintaxă
stream_isatty($stream): bool

Ce face stream_isatty

Un script CLI afișează uneori într-un terminal, alteori într-un fișier sau în alt program (php script.php > rezultat.txt). stream_isatty(STDOUT) îți spune care este cazul.

Se folosește ca să pui culori sau bare de progres doar când cineva se uită la terminal. Când ieșirea merge într-un fișier, codurile de culoare ar strica textul.

Parametri

Parametru Descriere
$stream Stream-ul verificat, de obicei STDOUT sau STDERR.

Ce returnează

true dacă stream-ul este un terminal, altfel false.

Exemple

Exemplul 1: Ieșirea acestui exemplu

Exemplele de pe această pagină sunt rulate de un program care adună rezultatul, nu într-un terminal. De aceea primul rezultat este false. Rulat din terminal, ar fi true.

<?php
var_dump(stream_isatty(STDOUT));
var_dump(stream_isatty(fopen("php://memory", "r")));

Rezultat

bool(false)
bool(false)

Exemplul 2: Culoare doar în terminal

<?php
function succes(string $mesaj): string
{
    return stream_isatty(STDOUT) ? "\033[32m$mesaj\033[0m" : $mesaj;
}

echo succes("Backup terminat: 42 de fișiere") . "\n";

Rezultat

Backup terminat: 42 de fișiere

Greșeli frecvente

  • Folosești constanta STDOUT într-o pagină web. Ea există doar în PHP CLI. Pe server web, deschide php://stdout sau nu folosi deloc verificarea.

Comenzi înrudite

  • php_uname: Returnează informații despre sistemul de operare pe care rulează PHP.
  • fwrite / fputs: Scrie un text într-un fișier deschis cu fopen. fputs este același lucru, cu alt nume.