it-swarm.com.de

Textfarbe meiner Ausgabe an der Eingabeaufforderung ändern?

Angenommen, ich habe eine php Datei und möchte die Textfarbe meiner Ausgabe für eine konsolenbasierte Anwendung ändern ...

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

Ich möchte die Textfarbe von $answer ändern.

Ist es möglich? Wenn ja, wie kann ich das machen?

5
Shreejay Pendse

Jetzt können Sie in Ubuntu 16.04 24-Bit True Color im Terminal verwenden

enter image description here

  • Die Vordergrund-Escape-Sequenz ist ^[38;2;<red>;<green>;<blue>m
  • Die Escape-Sequenz im Hintergrund lautet ^[48;2;<red>;<green>;<blue>m
  • <red> <green> <blue> reicht von 0 bis einschließlich 255.
  • Die Escape-Sequenz ^[0m setzt die Ausgabe auf den Standardwert zurück.

Siehe RGB-Farbcodes Tabelle

Demonstration von 24-Bit True Color in einem Skript :

enter image description here

Hier ist das geänderte Skript, um eine farbige Ausgabe zu erzeugen.

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

Beispielausgabe des obigen Skripts:

Sample output

3
souravc

Dies ist sicherlich möglich mit ANSI-Escape-Codes :

<?php
echo "\033[31m some colored text \033[0m some white text \n";
?>

gibt "etwas farbigen Text" in Rot und "etwas weißen Text" in Weiß aus (es sei denn, Sie haben für Ihr Terminal andere Standardfarben ausgewählt).

Die Zeichen \033 geben den Beginn eines Escape-Codes an. [31m ist die Farbe Rot. [0m kennzeichnet das Ende des codierten Fragments. Weitere Farben finden Sie unter hier .

Für andere Effekte wie Fettdruck:

\033[1m bold text \033[0m

siehe den ersten Link. Sie können diese Codes auf einer Befehlszeile ausprobieren, indem Sie Folgendes ausführen:

echo -e "\033[1m bold text \033[0m"
6
Jos

Anstelle von fest codierten Sequenzen sollten Sie eine Bibliothek wie PHP Ncurses verwenden, die mit größerer Wahrscheinlichkeit für mehr Terminaltypen geeignet ist

Das Beispiel aus 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();
?>
_

Von ncurses_has_colors :

Überprüft, ob das Terminal über Farbfunktionen verfügt. Diese Funktion kann zum Schreiben terminalunabhängiger Programme verwendet werden.

[Hervorhebung von mir]

Verwenden Sie ncurses_attr(NCURSES_A_BOLD); für Fettdruck. Beachten Sie, dass diese und die zugehörigen Funktionen als experimentell gekennzeichnet sind.

Von ncurses_attron

Warnung Diese Funktion ist EXPERIMENTELL. Das Verhalten dieser Funktion, ihr Name und die umgebende Dokumentation können sich in einer zukünftigen Version von PHP ohne Vorankündigung ändern. Diese Funktion sollte auf eigenes Risiko verwendet werden.

Warnung Diese Funktion ist derzeit nicht dokumentiert. Es ist nur die Argumentliste verfügbar.

[Betonung ihrer]

Möglicherweise finden Sie andere Bibliotheken. Sie sollten überprüfen, ob sie terminalunabhängige Techniken verwenden. Ich habe mehrere gefunden, die stattdessen hartcodierte Sequenzen verwenden.

Beachten Sie, dass das Befehlszeilenäquivalent (Shell) tput verwendet, um terminalunabhängig zu sein. Ich füge diese Informationen als Referenz hinzu. Sie sollten vermieden werden.

3