Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to enable color for PHP CLI?

How do I enable the colors for output of CLI? The below one is, running on Ubuntu.

enter image description here

If you see the screenshot, obviously the colors is enabled for terminal. And, if I call echo, it doesn't colorize the result, but if I use echo -e, it colorizes.
I checked manual page of echo, and -e means enable interpretation of backslash escapes
How can I enable this option for PHP CLI?

like image 589
Barbayar Dashzeveg Avatar asked Dec 02 '15 04:12

Barbayar Dashzeveg


3 Answers

First we use an escape character so we can actually define a output color. This is done with \033 (\e). Then we open the color statement with [31m. Red in this case.

The "some colored text" will be the text outputted in a different color. And after that we have to close the color statement with \033[0m.

php -r 'echo "\033[31m some colored text \033[0m some white text \n";' 

ref 1

ref 2

enter image description here

like image 52
jayxhj Avatar answered Sep 29 '22 11:09

jayxhj


For lazier

function colorLog($str, $type = 'i'){
    switch ($type) {
        case 'e': //error
            echo "\033[31m$str \033[0m\n";
        break;
        case 's': //success
            echo "\033[32m$str \033[0m\n";
        break;
        case 'w': //warning
            echo "\033[33m$str \033[0m\n";
        break;  
        case 'i': //info
            echo "\033[36m$str \033[0m\n";
        break;      
        default:
        # code...
        break;
    }
}
like image 30
Giangimgs Avatar answered Sep 29 '22 10:09

Giangimgs


After doing some experiments, I made these codes:

function formatPrint(array $format=[],string $text = '') {
  $codes=[
    'bold'=>1,
    'italic'=>3, 'underline'=>4, 'strikethrough'=>9,
    'black'=>30, 'red'=>31, 'green'=>32, 'yellow'=>33,'blue'=>34, 'magenta'=>35, 'cyan'=>36, 'white'=>37,
    'blackbg'=>40, 'redbg'=>41, 'greenbg'=>42, 'yellowbg'=>44,'bluebg'=>44, 'magentabg'=>45, 'cyanbg'=>46, 'lightgreybg'=>47
  ];
  $formatMap = array_map(function ($v) use ($codes) { return $codes[$v]; }, $format);
  echo "\e[".implode(';',$formatMap).'m'.$text."\e[0m";
}
function formatPrintLn(array $format=[], string $text='') {
  formatPrint($format, $text); echo "\r\n";
}

//Examples:
formatPrint(['blue', 'bold', 'italic','strikethrough'], "Wohoo");
formatPrintLn(['yellow', 'italic'], " I'm invicible");
formatPrintLn(['yellow', 'bold'], "I'm invicible");

Just copy and paste the code above and... Enjoy :)

like image 39
Fandi Susanto Avatar answered Sep 29 '22 10:09

Fandi Susanto