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

# sapi_windows_vt100_support

(PHP 7 >= 7.2.0, PHP 8)

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

### 説明

function 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` を返します。

`enable` に bool を指定すると、 成功した場合に `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() で状態を変更する

ストリームがリダイレクトされた場合、 `STDOUT` や `STDERR` の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.

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open