Signatur
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
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";
}
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;
}
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
// 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.