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.
+add a note

User Contributed Notes

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