International PHP Conference Berlin 2025

sapi_windows_vt100_support

(PHP 7 >= 7.2.0, PHP 8)

sapi_windows_vt100_supportWindows コンソールの出力バッファに関連付けられたストリームのVT100サポート状況を取得/設定する

説明

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

enable が省略されるか、null の場合、 この関数は stream の VT100 制御コードが有効になっている場合に true を返します。 無効になっている場合 false を返します。

enable が指定され、bool の場合、 この関数は stream の VT100 の機能を 有効/無効 にしようとします。 VT100 の機能が無事有効(または無効)にできた場合、この関数は true を返します。 失敗した場合 false を返します。

起動時に、PHP は STDOUT/STDERR の VT100 の機能を有効にしようとします。これらのストリームがファイルにリダイレクトされると、VT100 の機能は有効にならないかもしれません。

VT100 のサポートが有効な場合、VT100 のターミナルで有効な制御シーケンスが使えます。 これによって、ターミナルの出力を変更できます。Windows では、 これらの制御シーケンスは Console Virtual Terminal Sequence と呼ばれています。

警告

この関数は、Windows 10 API で実装されている ENABLE_VIRTUAL_TERMINAL_PROCESSING フラグを使います。 よって、古いWindowsバージョンでは VT100の機能は有効にならないかもしれません。

パラメータ

stream

この関数で操作するストリーム

enable

bool を指定すると、 (true の場合) VT100の機能が有効になり、 (false の場合) 無効になります。

戻り値

enable が省略されるか、null の場合、 VT100 の機能が有効になっている場合に true を返します。 無効になっている場合 false を返します。

enablebool を指定すると、 成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン 説明
8.0.0 enable は、nullable になりました。

例1 sapi_windows_vt100_support() でデフォルトの状態を出力する

デフォルトでは、 STDOUT / STDERR で VT100 の機能が有効になっています。

php -r "var_export(sapi_windows_vt100_support(STDOUT));echo ' ';var_export(sapi_windows_vt100_support(STDERR));"

上の例の出力は、 たとえば以下のようになります。

true true

ストリームがリダイレクトされた場合、 VT100 の機能は有効になりません。

php -r "var_export(sapi_windows_vt100_support(STDOUT));echo ' ';var_export(sapi_windows_vt100_support(STDERR));" 2>NUL

上の例の出力は、 たとえば以下のようになります。


true false

例2 sapi_windows_vt100_support() で状態を変更する

ストリームがリダイレクトされた場合、 STDOUTSTDERR のVT100の機能は有効にできません。

php -r "var_export(sapi_windows_vt100_support(STDOUT, true));echo ' ';var_export(sapi_windows_vt100_support(STDERR, true));" 2>NUL

上の例の出力は、 たとえば以下のようになります。

true false

例3 VT100 のサポートを有効にする例

<?php
$out
= fopen('php://stdout','w');
fwrite($out, 'Just forgot a lettr.');
// カーソルを2文字分左に移動
fwrite($out, "\033[2D");
// 空白をひとつ分挿入し、既存のテキストを右に移動させる -> Just forgot a lett r.
fwrite($out, "\033[1@");
fwrite($out, 'e');
?>

上の例の出力は以下となります。

Just forgot a letter.
add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top