转自: http://www.neatstudio.com/show-2568-1.shtmlphp
终端显示颜色,在之前的想法当中,都是由于有了.profile的配色方案。而我通常也都是 采用默认的(snakevil是写过一个bash带颜色的方案的。我以为太花哨了就没有使用)html
为何忽然间又想到这个?是由于在使用PHP输出LOG的时候,千篇一率,从屏幕中找关键字很累,因此就想着,是否是用PHP也能够输出这种带颜色的关键字?固然,这是由于我正好看到了一个PHP是这么输出的,它就是laraval,它的工具(laraval.phar)在命令行的输出就是有不一样颜色的,它给了我指引,意思就是,这个想法是能够实现的。python
OK。找资料,知道在终端中用指定的字符来作为背景色和字体色(http://blog.csdn.net/acmee/article/details/6613060)git
文中这样介绍:github
1、shell下的实现方法 shell
先来说在shell下,如何实现。用echo命令就能够实现,参看如下例子: 编程
echo -e "\033[32mHello, world!"
echo -e "\033[20;1H\033[1;4;32mHello,world\033[0m"
int color = 32; printf("\033[20;1H\033[1;4;%dmHello, world.\033[0m", color);
color=32 print “\033[20;1H\033[1;4;%dHello, world.\033[0m"%color
其实在看到这一段以前,snakevil在本身的github的项目(https://github.com/snakevil/bashrc.x)中也介绍过,其实我相对仍是喜欢ubuntu的默认配色,snakevil的这个配色我是真心不是特别喜欢。。ubuntu
但究竟怎么用PHP输出呢?在用PHP输出以前,找了一下网络,发现已经有有用perl实现过了。那么说实在的。若是没有使用到一些特别的函数,其实php和perl实在是太象了,因此,能够直接参考(http://perldoc.perl.org/Term/ANSIColor.html),这里的代码,除了那个类外,都仍是能够复刻的。因而,再随便找了点,果真仍是有现成的PHP代码的(http://www.if-not-true-then-false.com/2010/php-class-for-coloring-php-command-line-cli-scripts-output-php-output-colorizing-using-bash-shell-colors/)bash
好吧。这个URL太长了。仍是直接贴代码吧:网络
class Colors { private $foreground_colors = array(); private $background_colors = array(); public function __construct() { // Set up shell colors $this->foreground_colors['black'] = '0;30'; $this->foreground_colors['dark_gray'] = '1;30'; $this->foreground_colors['blue'] = '0;34'; $this->foreground_colors['light_blue'] = '1;34'; $this->foreground_colors['green'] = '0;32'; $this->foreground_colors['light_green'] = '1;32'; $this->foreground_colors['cyan'] = '0;36'; $this->foreground_colors['light_cyan'] = '1;36'; $this->foreground_colors['red'] = '0;31'; $this->foreground_colors['light_red'] = '1;31'; $this->foreground_colors['purple'] = '0;35'; $this->foreground_colors['light_purple'] = '1;35'; $this->foreground_colors['brown'] = '0;33'; $this->foreground_colors['yellow'] = '1;33'; $this->foreground_colors['light_gray'] = '0;37'; $this->foreground_colors['white'] = '1;37'; $this->background_colors['black'] = '40'; $this->background_colors['red'] = '41'; $this->background_colors['green'] = '42'; $this->background_colors['yellow'] = '43'; $this->background_colors['blue'] = '44'; $this->background_colors['magenta'] = '45'; $this->background_colors['cyan'] = '46'; $this->background_colors['light_gray'] = '47'; } // Returns colored string public function getColoredString($string, $foreground_color = null, $background_color = null) { $colored_string = ""; // Check if given foreground color found if (isset($this->foreground_colors[$foreground_color])) { $colored_string .= "\033[" . $this->foreground_colors[$foreground_color] . "m"; } // Check if given background color found if (isset($this->background_colors[$background_color])) { $colored_string .= "\033[" . $this->background_colors[$background_color] . "m"; } // Add string and end coloring $colored_string .= $string . "\033[0m"; return $colored_string; } // Returns all foreground color names public function getForegroundColors() { return array_keys($this->foreground_colors); } // Returns all background color names public function getBackgroundColors() { return array_keys($this->background_colors); } }
用法也比较简单:
// Create new Colors class $colors = new Colors(); // Test some basic printing with Colors class echo $colors->getColoredString("Testing Colors class, this is purple string on yellow background.", "purple", "yellow") . "\n"; echo $colors->getColoredString("Testing Colors class, this is blue string on light gray background.", "blue", "light_gray") . "\n"; echo $colors->getColoredString("Testing Colors class, this is red string on black background.", "red", "black") . "\n"; echo $colors->getColoredString("Testing Colors class, this is cyan string on green background.", "cyan", "green") . "\n"; echo $colors->getColoredString("Testing Colors class, this is cyan string on default background.", "cyan") . "\n"; echo $colors->getColoredString("Testing Colors class, this is default string on cyan background.", null, "cyan") . "\n";
固然,若是你以为这个代码太麻烦,还有一个简单的方法:
function colorize($text, $status) { $out = ""; switch($status) { case "SUCCESS": $out = "[42m"; //Green background break; case "FAILURE": $out = "[41m"; //Red background break; case "WARNING": $out = "[43m"; //Yellow background break; case "NOTE": $out = "[44m"; //Blue background break; default: throw new Exception("Invalid status: " . $status); } return chr(27) . "$out" . "$text" . chr(27) . "[0m"; } echo colorize("Your command was successfully executed...", "SUCCESS");
四种颜色也够了。不过。。。NOTE的blue background。。。若是你的字符仍是黑色的,真心看不到字符串了。
至此,介绍完毕,你能够试试(我已经用在项目中了)