PHP CLI颜色整行背景

时间:2013-02-22 18:03:03

标签: php bash

我想在使用命令行的PHP应用程序中为整行背景颜色着色。问题是我没有找到任何“更聪明”的方法来做到:

public function outFullLine($string, $center = false)
{
    $terminalColumns = exec('tput cols');
    $emptyRow = implode(array_fill(0, $terminalColumns, " "));

    if ($center) {
        $position = strlen($emptyRow) / 2 - strlen($string) / 2;
    } else {
        $position = 0;
    }

    $outputString = substr_replace(
        $emptyRow,
        $string,
        $position,
        strlen($string)
    );

    fwrite(STDOUT, $string);
}

那么有没有办法做到这一点,而没有实际填补空白行?我想这更像是一个bash而不是PHP问题所以我标记了两个。

2 个答案:

答案 0 :(得分:1)

请花点时间: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/

或者上课然后调用颜色:

class ColorCLI {
            static $foreground_colors = array(
                    'black'        => '0;30', 'dark_gray'    => '1;30',
                    'blue'         => '0;34', 'light_blue'   => '1;34',
                    'green'        => '0;32', 'light_green'  => '1;32',
                    'cyan'         => '0;36', 'light_cyan'   => '1;36',
                    'red'          => '0;31', 'light_red'    => '1;31',
                    'purple'       => '0;35', 'light_purple' => '1;35',
                    'brown'        => '0;33', 'yellow'   => '1;33',
                    'light_gray'   => '0;37', 'white'        => '1;37',
            );

            static $background_colors = array(
                    'black'        => '40', 'red'          => '41',
                    'green'        => '42', 'yellow'       => '43',
                    'blue'         => '44', 'magenta'      => '45',
                    'cyan'         => '46', 'light_gray'   => '47',
            );

            // Returns colored string
            public static function getColoredString($string, $foreground_color = null, $background_color = null) {
                    $colored_string = "";

                    // Check if given foreground color found
                    if ( isset(self::$foreground_colors[$foreground_color]) ) {
                            $colored_string .= "\033[" . self::$foreground_colors[$foreground_color] . "m";
                    }
                    // Check if given background color found
                    if ( isset(self::$background_colors[$background_color]) ) {
                            $colored_string .= "\033[" . self::$background_colors[$background_color] . "m";
                    }

                    // Add string and end coloring
                    $colored_string .=  $string . "\033[0m";

                    return $colored_string;
            }

            // Returns all foreground color names
            public static function getForegroundColors() {
                    return array_keys(self::$foreground_colors);
            }

            // Returns all background color names
            public static function getBackgroundColors() {
                    return array_keys(self::$background_colors);
            }
    }

首先需要计算字符总数,然后将颜色填充到一行:

$screenwidth = exec('tput cols');
$screenheight = exec('tput lines');

选中此颜色以及行:http://blog.apokalyptik.com/2007/11/20/colorizing-php-cli-scripts/以及此完整的类代码示例:https://github.com/runekaagaard/php-termcolor/blob/master/termcolor.php

答案 1 :(得分:0)

在为字符及其背景着色时,要为整行着色,必须用空白字符填充它,例如空格或制表符。顺便说一下,有一个很好的Console Color pear class