如何为 PHP CLI 启用颜色?

问题描述 投票:0回答:4

如何启用 CLI 输出的颜色? 下面是在 Ubuntu 上运行的。



如果您看到屏幕截图,显然终端已启用颜色。而且,如果我调用

echo
,它不会使结果着色,但如果我使用
echo -e
,它就会着色。
我检查了
echo
的手册页,
-e
意味着启用反斜杠转义的解释
如何为 PHP CLI 启用此选项?

php bash shell ubuntu command-line-interface
4个回答
134
投票

首先我们使用转义字符,这样我们就可以实际定义输出颜色。这是通过

\033
( ) 完成的。然后我们用
[31m
打开颜色声明。在这种情况下为红色。

“一些彩色文本”将以不同颜色输出的文本。之后我们必须用

\033[0m
关闭颜色声明。

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

参考1

参考2


30
投票

适合懒人

function colorLog(string $str, string $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;
    }
}

13
投票

做了一些实验后,我编写了这些代码:

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

只需复制并粘贴上面的代码即可......尽情享受:)


2
投票

以可重用类的形式提供更清洁的解决方案。

PHP 类:

class CLI
{

    // this method requires one variable. the second, color, is optional
    function cout_color($content, $color=null)
    {
        
        // if a color is set use the color set.
        if(!empty($color))
        {
            // if our color string is not a numeric value
            if(!is_numeric($color))
            {
                    //lowercase our string value.
                    $c = strtolower($color);
                
            }
            else
                {   
                    // check if our color value is not empty.
                    if(!empty($color))
                    {
                        
                        $c = $color;
                    
                    }
                    else
                        { 
                            // no color was set so lets pick a random one...
                            $c = rand(1,14);
                            
                        }
                    
                }
                
        }
        else    // no color argument was passed, so lets pick a random one w00t
            { 
                
                $c = rand(1,14);
                            
            }
        
        $cheader = '';
        $cfooter = "\033[0m";
        
        // let check which color code was used so we can then wrap our content.
        switch($c)
        {
                    
            case 1:
            case 'red':
                
                // color code header.
                $cheader .= "\033[31m";

            break;
            
            case 2:
            case 'green':
                
                // color code header.
                $cheader .= "\033[32m";

            break;

            case 3:
            case 'yellow':
                
                // color code header.
                $cheader .= "\033[33m";

            break;
            
            case 4:
            case 'blue':
                
                // color code header.
                $cheader .= "\033[34m";

            break;
            
            case 5:
            case 'magenta':
                
                // color code header.
                $cheader .= "\033[35m";

            break;
            
            case 6:
            case 'cyan':
                
                // color code header.
                $cheader .= "\033[36m";

            break;
            
            case 7:
            case 'light grey':
                
                // color code header.
                $cheader .= "\033[37m";

            break;
            
            case 8:
            case 'dark grey':
                
                // color code header.
                $cheader .= "\033[90m";

            break;
            
            case 9:
            case 'light red':
                
                // color code header.
                $cheader .= "\033[91m";

            break;
            
            case 10:
            case 'light green':
                
                // color code header.
                $cheader .= "\033[92m";

            break;
            
            case 11:
            case 'light yellow':
                
                // color code header.
                $cheader .= "\033[93m";

            break;
            
            case 12:
            case 'light blue':
                
                // color code header.
                $cheader .= "\033[94m";

            break;
            
            case 13:
            case 'light magenta':
                
                // color code header.
                $cheader .= "\033[95m";

            break;
            
            case 14:
            case 'light cyan':
                
                // color code header.
                $cheader .= "\033[92m";

            break;
            
        }
          
        // wrap our content.
        $content = $cheader.$content.$cfooter;
        
        //return our new content.
        return $content;
        

    }
      
     

}

基本用法:

//create a new object
$cli = new CLI();

//example string
$text = 'Success!';

//color via class color id
$text = $cli->cout_color($text, 2);

//color via string name
//$text = $cli->cout_color($text, 'green');

//for random color, ignore the second parameter.:
//$text = $cli->cout_color($text);

echo $text;

修改您的项目要求。祝你好运。

© www.soinside.com 2019 - 2024. All rights reserved.