web-dev-qa-db-fra.com

changer la couleur du texte de ma sortie sur l'invite de commande?

Supposons que j'ai un fichier php et que je souhaite changer la couleur du texte de ma sortie pour une application basée sur une console ...

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

Je veux changer la couleur du texte de $answer.

C'est possible? Si oui, comment puis-je faire cela?

5
Shreejay Pendse

Vous pouvez maintenant utiliser les couleurs vraies 24 bits dans un terminal sous Ubuntu 16.04.

enter image description here

  • La séquence d'échappement en avant-plan est ^[38;2;<red>;<green>;<blue>m
  • La séquence d'échappement en arrière-plan est ^[48;2;<red>;<green>;<blue>m
  • <red> <green> <blue> va de 0 à 255 inclus.
  • La séquence d'échappement ^[0m rétablit la sortie par défaut.

Voir codes de couleur RVB graphique

Démonstration de vraie couleur 24 bits dans un script :

enter image description here

Voici le script modifié pour produire une sortie en couleur.

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

Exemple de sortie du script ci-dessus:

Sample output

3
souravc

Ceci est certainement possible avec codes d'échappement ANSI :

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

affichera "du texte coloré" en rouge et du "texte blanc" en blanc (à moins que vous n'ayez choisi des couleurs par défaut différentes pour votre terminal).

Les caractères \033 indiquent le début d'un code d'échappement. [31m est la couleur rouge. [0m signifie la fin du fragment codé. Pour plus de couleurs, voir ici .

Pour les autres effets, tels que gras:

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

voir le premier lien. Vous pouvez essayer ces codes sur une ligne de commande en procédant comme suit:

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

Au lieu de séquences codées en dur, vous devriez utiliser une bibliothèque telle que PHP Ncurses qui sera plus susceptible de fonctionner sur plusieurs types de terminaux

L'exemple de 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();
?>
_

De ncurses_has_colors :

Vérifie si le terminal a des capacités de couleur. Cette fonction peut être utilisée pour écrire des programmes indépendants du terminal .

[c'est moi qui souligne]

Utilisez ncurses_attr(NCURSES_A_BOLD); pour les caractères gras. Notez que cette fonction et les fonctions associées sont marquées comme expérimentales.

De ncurses_attron

Avertissement Cette fonction est EXPÉRIMENTALE. Le comportement de cette fonction, son nom et la documentation qui l’entoure peuvent changer sans préavis dans une future version de PHP. Cette fonction doit être utilisée à vos risques et périls.

Avertissement Cette fonction n'est actuellement pas documentée. seule sa liste d'arguments est disponible.

[en soulignant les leurs]

Vous pouvez trouver d'autres bibliothèques. Vous devez vous assurer qu'ils utilisent des techniques indépendantes du terminal. J'ai trouvé plusieurs qui utilisent des séquences codées en dur à la place.

Notez que l’équivalent en ligne de commande (Shell) utilise tput pour être indépendant du terminal. J'inclus cette information comme point de départ pour référence. Ils devraient être évités.

3
Dennis Williamson