【问题标题】:How to enable color for PHP CLI?如何为 PHP CLI 启用颜色?
【发布时间】:2016-03-06 05:18:51
【问题描述】:

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



如果您看到屏幕截图,显然终端的颜色已启用。而且,如果我调用echo,它不会对结果着色,但如果我使用echo -e,它会着色。
我检查了echo 的手册页,-e 表示启用反斜杠转义解释
如何为 PHP CLI 启用此选项?

【问题讨论】:

    标签: php bash shell ubuntu command-line-interface


    【解决方案1】:

    首先我们使用转义字符,这样我们就可以实际定义输出颜色。这是通过\033 (\e) 完成的。然后我们用[31m 打开颜色声明。在这种情况下为红色。

    “一些彩色文本”将以不同颜色输出的文本。之后我们必须用\033[0m关闭颜色声明。

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

    ref 1

    ref 2

    【讨论】:

    • 是的,在我将 \e 替换为 033 后它起作用了。谢谢。
    • 你可以了解更多here
    • 或者不依赖echo的序列,而是使用ANSI-C引用直接在字符串中生成ANSI序列:$'\e[31mblah blah\e[0m。这样您就不需要记住\033 或其他任何内容。
    • 顺便说一句,单引号不起作用 :) 使用双引号
    • +1 超级有用。仅供参考,如果其他人需要help looking up color codes
    【解决方案2】:

    懒人

    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;
        }
    }
    

    【讨论】:

    • 这是一个比接受的答案更好的答案
    • 这将是一个很好的辅助函数,时间也很好,$date = date('h:i:s', time());
    【解决方案3】:

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

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

    只需复制并粘贴上面的代码,然后...享受吧:)

    【讨论】:

      【解决方案4】:

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

      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;
      

      根据您的项目要求进行修改。祝你好运。

      【讨论】:

        猜你喜欢
        • 2018-05-20
        • 2017-03-17
        • 2015-04-15
        • 2016-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-27
        相关资源
        最近更新 更多