摘要:CLI模式其实就是命令行运行模式,英文全称Command-Line Interface(命令行接口),在终端运行PHP时默认都是白色字体,从屏幕中找关键字很...
CLI模式其实就是命令行运行模式,英文全称Command-Line Interface(命令行接口),在终端运行PHP时默认都是白色字体,从屏幕中找关键字很累,为了提高体验,我们需要把一些关键字设置成彩色的。
在shell下实现方法:
echo -e "\033[32mHello, world!"
当你在终端里敲下这条命令后,是不是发现系统用绿色输出了"Hello,world!",不止如此,连之后的命令提示符都变成了绿色?不要着急,听我继续说。echo命令-e选项的作用是激活终端对反斜线转义符(即\)的解释。引号内\033用于引导非常规字符序列,在这里的作用就是引导设置输出属性,后边的[32m就是将前景色设置为绿色,字母m表示设置的属性类别,数字代表属性值。设置可以单独使用,例如:
echo -e "\033[0m"
这行命令的作用是恢复属性为默认值,也就是说0m设置项用于恢复默认值。现在你的终端是不是又一切正常了?
理解了这些,剩下的就简单了。用这种命令,除了设置文本前景色,还可以设置很多属性。下边列出其他的设置项:
\033[0m 关闭所有属性 \033[1m 设置高亮度 \033[4m 下划线 \033[5m 闪烁 \033[7m 反显 \033[8m 消隐 \033[30m 至 \33[37m 设置前景色 \033[40m 至 \33[47m 设置背景色 \033[nA 光标上移n行 \033[nB 光标下移n行 \033[nC 光标右移n行 \033[nD 光标左移n行 \033[y;xH设置光标位置 \033[2J 清屏 \033[K 清除从光标到行尾的内容 \033[s 保存光标位置 \033[u 恢复光标位置 \033[?25l 隐藏光标 \033[?25h 显示光标 各数字所代表的颜色如下: 字背景颜色范围:40----49 40:黑 41:深红 42:绿 43:黄色 44:蓝色 45:紫色 46:深绿 47:白色 字颜色:30-----------39 30:黑 31:红 32:绿 33:黄 34:蓝色 35:紫色 36:深绿 37:白色
另外,同类的多种设置项可以组合在一起,中间用分号(;)隔开。如下:
echo -e "\033[20;1H\033[1;4;32mHello,world\033[0m"
这行命令首先\033[20;1H将光标移动到终端第20行第1列,之后的\033[1;4;32m将文本属性设置为高亮、带下划线且颜色为绿色,然后输出Hello,world;最后\033[0m将终端属性恢复为默认值,这样就不会看到连命令完成后的命令提示符也变了样儿了。
通过以上各种命令的组合就可以实现对终端输出地复杂控制。
以上是在Shell中的实现方法,在PHP中怎么使用呢?我写了一个例子:
<?php class Colors { private $foreground_colors = array(); private $background_colors = array(); public function __construct() { $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'; } public function getColoredString($string, $foreground_color = null, $background_color = null) { $colored_string = ""; if (isset($this->foreground_colors[$foreground_color])) { $colored_string .= "\033[" . $this->foreground_colors[$foreground_color] . "m"; } if (isset($this->background_colors[$background_color])) { $colored_string .= "\033[" . $this->background_colors[$background_color] . "m"; } $colored_string .= $string . "\033[0m"; return $colored_string; } public function getForegroundColors() { return array_keys($this->foreground_colors); } public function getBackgroundColors() { return array_keys($this->background_colors); } } // 用法也比较简单: $colors = new Colors(); echo $colors->getColoredString("黄底紫字", "purple", "yellow"); echo $colors->getColoredString("浅灰底蓝字", "blue", "light_gray"); echo $colors->getColoredString("黑底红字", "red", "black"); echo $colors->getColoredString("绿底深蓝字", "cyan", "green"); echo $colors->getColoredString("默认背景上的青字", "cyan"); echo $colors->getColoredString("默认颜色文字在青色背景上", null, "cyan");