phpファイルがあり、コンソールベースのアプリケーションの出力のテキストの色を変更したい場合...
<?php
$Prompt = "What Is Your Name: ";
echo $Prompt;
$answer = "You Entered: " . rtrim( fgets( STDIN ));
echo $answer;
?>
$answer
のテキストの色を変更したい。
出来ますか?はいの場合、どうすればこれを行うことができますか?
^[38;2;<red>;<green>;<blue>m
です^[48;2;<red>;<green>;<blue>m
です<red> <green> <blue>
の範囲は0〜255です。^[0m
は、出力をデフォルトに戻します。RGBカラーコードを参照してください グラフ
これは、色付きの出力を生成するために変更されたスクリプトです。
<?php
$Prompt = "What Is Your Name: ";
echo $Prompt;
$answer = rtrim( fgets( STDIN ));
echo "\033[38;2;0;102;0m You \033[38;2;255;0;255m Entered: \033[38;2;255;255;0m $answer \033[0m \n";
?>
上記のスクリプトのサンプル出力:
これは確かに ANSIエスケープコード を使用して可能です:
<?php
echo "\033[31m some colored text \033[0m some white text \n";
?>
「端末に異なるデフォルトの色を選択していない限り」「赤色のテキスト」と「白色のテキスト」を出力します。
文字\033
は、エスケープコードの開始を示します。 [31m
は赤色です。 [0m
は、コード化されたフラグメントの終わりを示します。他の色については、 こちら をご覧ください。
太字などの他の効果の場合:
\033[1m bold text \033[0m
最初のリンクを参照してください。次のようなことを行うことで、コマンドラインでこれらのコードを試すことができます。
echo -e "\033[1m bold text \033[0m"
ハードコーディングされたシーケンスの代わりに、PHP Ncurses などのライブラリを使用する必要があります。これにより、より多くの端末タイプで動作する可能性が高くなります
<?php
ncurses_init();
// If the terminal supports colors, initialize and set active color
if (ncurses_has_colors()) {
ncurses_start_color();
ncurses_init_pair(1, NCURSES_COLOR_YELLOW, NCURSES_COLOR_BLUE);
ncurses_color_set(1);
}
// Write a string at specified location
ncurses_mvaddstr(10, 10, "Hello world! Yellow on blue text!");
// Flush output to screen
ncurses_refresh();
ncurses_end();
?>
端末にカラー機能があるかどうかを確認します。この関数を使用して、端末非依存プログラムを作成できます。
[強調鉱山]
ncurses_attr(NCURSES_A_BOLD);
を使用して太字にします。この関数と関連する関数は実験的としてマークされていることに注意してください。
警告この関数は実験的です。この関数の動作、その名前、および周辺のドキュメントは、PHPの将来のリリースで予告なく変更される可能性があります。この関数は、自己の責任において使用する必要があります。
警告この機能は現在文書化されていません。引数リストのみが利用可能です。
[それらを強調する]
他のライブラリが見つかる場合があります。端末に依存しない手法を使用していることを確認する必要があります。代わりにハードコードされたシーケンスを使用するものをいくつか見つけました。
コマンドライン(シェル)と同等のものは、端末に依存しないようにするためにtput
を使用することに注意してください。参照用の出発点としてこの情報を含めます。それらは避けるべきです。