web-dev-qa-db-ja.com

コマンドプロンプトの出力のテキストの色を変更しますか?

phpファイルがあり、コンソールベースのアプリケーションの出力のテキストの色を変更したい場合...

<?php
$Prompt = "What Is Your Name: ";
echo $Prompt;
$answer =  "You Entered: " . rtrim( fgets( STDIN ));
echo $answer;
?>

$answerのテキストの色を変更したい。

出来ますか?はいの場合、どうすればこれを行うことができますか?

5
Shreejay Pendse

Ubuntu 16.04のターミナルで24ビットのトゥルーカラーを使用できるようになりました

enter image description here

  • フォアグラウンドエスケープシーケンスは^[38;2;<red>;<green>;<blue>mです
  • バックグラウンドエスケープシーケンスは^[48;2;<red>;<green>;<blue>mです
  • <red> <green> <blue>の範囲は0〜255です。
  • エスケープシーケンス^[0mは、出力をデフォルトに戻します。

RGBカラーコードを参照してください グラフ

スクリプトの24ビットトゥルーカラー のデモ:

enter image description here

これは、色付きの出力を生成するために変更されたスクリプトです。

<?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";
?>

上記のスクリプトのサンプル出力:

Sample output

3
souravc

これは確かに 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"
6
Jos

ハードコーディングされたシーケンスの代わりに、PHP Ncurses などのライブラリを使用する必要があります。これにより、より多くの端末タイプで動作する可能性が高くなります

ncurses_color_set の例:

<?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_has_colors から:

端末にカラー機能があるかどうかを確認します。この関数を使用して、端末非依存プログラムを作成できます。

[強調鉱山]

ncurses_attr(NCURSES_A_BOLD);を使用して太字にします。この関数と関連する関数は実験的としてマークされていることに注意してください。

ncurses_attron から

警告この関数は実験的です。この関数の動作、その名前、および周辺のドキュメントは、PHPの将来のリリースで予告なく変更される可能性があります。この関数は、自己の責任において使用する必要があります。

警告この機能は現在文書化されていません。引数リストのみが利用可能です。

[それらを強調する]

他のライブラリが見つかる場合があります。端末に依存しない手法を使用していることを確認する必要があります。代わりにハードコードされたシーケンスを使用するものをいくつか見つけました。

コマンドライン(シェル)と同等のものは、端末に依存しないようにするためにtputを使用することに注意してください。参照用の出発点としてこの情報を含めます。それらは避けるべきです。

3