Start · Sprachen · PHP · Referenz · sapi_windows_vt100_support

sapi_windows_vt100_support

Funktion

Liest oder setzt die VT100-Unterstützung für einen Konsolen-Stream unter Windows.

seit PHP 7.2.0 Kategorie: misc

Signatur

sapi_windows_vt100_support(resource $stream, ?bool $enable = null): bool

Beschreibung

sapi_windows_vt100_support() ermöglicht es, die VT100-Terminal-Unterstützung für einen gegebenen Konsolen-Stream (z. B. STDOUT oder STDERR) zu lesen oder zu aktivieren bzw. zu deaktivieren. VT100-Sequenzen sind ANSI-Escape-Codes, die für farbige Ausgaben, Cursor-Steuerung und andere Formatierungen in der Konsole genutzt werden.

Wird der Parameter enable weggelassen oder auf null gesetzt, verhält sich die Funktion als reiner Getter und gibt zurück, ob VT100-Unterstützung für den Stream aktuell aktiv ist. Wird enable als true oder false übergeben, versucht die Funktion, VT100-Unterstützung für den Stream zu aktivieren bzw. zu deaktivieren, und gibt bei Erfolg true zurück.

Diese Funktion ist ausschließlich auf Windows verfügbar und funktioniert nur, wenn PHP als CLI-SAPI ausgeführt wird und der übergebene Stream tatsächlich ein Konsolen-Handle ist (d. h. nicht umgeleitet wurde). Auf anderen Betriebssystemen oder bei nicht-konsolaren Streams gibt die Funktion false zurück.

Typischer Einsatz ist das portable Schreiben von CLI-Skripten, die unter Windows farbige oder formatierte Ausgaben erzeugen sollen, indem vor der Ausgabe von ANSI-Codes geprüft oder sichergestellt wird, dass VT100-Modus aktiv ist.

Parameter

Name Typ Default Beschreibung
$stream Pflicht resource Der Konsolen-Stream, für den VT100-Unterstützung gelesen oder gesetzt werden soll. Typischerweise STDOUT oder STDERR.
$enable bool|null null Wenn true, wird VT100-Unterstützung aktiviert; wenn false, deaktiviert. Wird null übergeben oder der Parameter weggelassen, wird nur der aktuelle Status abgefragt (Getter-Modus).

Rückgabewert

Typ
bool
Beschreibung

Im Getter-Modus (enable = null): Gibt true zurück, wenn VT100-Unterstützung für den Stream aktiv ist, andernfalls false.

Im Setter-Modus: Gibt true zurück, wenn das Aktivieren oder Deaktivieren erfolgreich war, andernfalls false (z. B. wenn der Stream kein Konsolen-Handle ist oder die Funktion nicht unter Windows läuft).

Beispiele

VT100-Unterstützung prüfen und aktivieren, dann farbige Ausgabe erzeugen

<?php
if (PHP_OS_FAMILY === 'Windows') {
    // VT100-Unterstützung für STDOUT aktivieren
    if (sapi_windows_vt100_support(STDOUT, true)) {
        echo "\e[32mDieser Text ist grün!\e[0m\n";
    } else {
        echo "VT100-Unterstützung konnte nicht aktiviert werden.\n";
    }
} else {
    // Auf Unix/Linux sind ANSI-Codes in der Regel immer verfügbar
    echo "\e[32mDieser Text ist grün!\e[0m\n";
}
Dieser Text ist grün! (in grüner Farbe, wenn VT100 unterstützt wird)

Aktuellen VT100-Status lesen, ohne ihn zu verändern

<?php
if (PHP_OS_FAMILY === 'Windows') {
    $stdoutSupported = sapi_windows_vt100_support(STDOUT);
    $stderrSupported = sapi_windows_vt100_support(STDERR);

    echo 'STDOUT VT100: ' . ($stdoutSupported ? 'aktiv' : 'inaktiv') . PHP_EOL;
    echo 'STDERR VT100: ' . ($stderrSupported ? 'aktiv' : 'inaktiv') . PHP_EOL;
} else {
    echo 'sapi_windows_vt100_support ist nur unter Windows verfügbar.' . PHP_EOL;
}
STDOUT VT100: inaktiv STDERR VT100: inaktiv

Portables CLI-Hilfsskript mit VT100-Farberkennung

<?php
function supports_color(mixed $stream): bool {
    if (PHP_OS_FAMILY === 'Windows') {
        return sapi_windows_vt100_support($stream);
    }
    // Auf Unix: prüfen ob der Stream ein TTY ist
    return function_exists('posix_isatty') && posix_isatty($stream);
}

function colored(string $text, string $colorCode): string {
    return supports_color(STDOUT)
        ? "\e[{$colorCode}m{$text}\e[0m"
        : $text;
}

echo colored('Erfolg!', '32') . PHP_EOL; // grün wenn unterstützt
echo colored('Fehler!', '31') . PHP_EOL; // rot wenn unterstützt
Erfolg! Fehler!

// Wichtig · Fallstricke

Plattformspezifisch: Diese Funktion existiert ausschließlich unter Windows. Der Aufruf auf anderen Betriebssystemen führt zu einem undefined function-Fehler, daher sollte stets mit function_exists('sapi_windows_vt100_support') oder PHP_OS_FAMILY === 'Windows' abgesichert werden.

Nur CLI-SAPI: Die Funktion ist ausschließlich in der CLI-SAPI verfügbar. In anderen SAPIs (z. B. FPM, Apache) ist sie nicht verfügbar.

Umgeleitete Streams: Wenn der Stream umgeleitet wurde (z. B. php script.php > datei.txt), handelt es sich nicht mehr um ein Konsolen-Handle. In diesem Fall gibt die Funktion im Setter-Modus false zurück, da VT100 nicht auf Datei-Streams angewendet werden kann.

Windows-Version: VT100-Unterstützung in der Windows-Konsole wurde erst mit Windows 10 (Version 1511) eingeführt. Auf älteren Windows-Versionen schlägt die Aktivierung fehl.