Class yii\helpers\BaseConsole

Inheritanceyii\helpers\BaseConsole
Subclassesyii\helpers\Console
Available since version2.0
Source Code https://github.com/yiisoft/yii2/blob/master/framework/helpers/BaseConsole.php

BaseConsole provides concrete implementation for yii\helpers\Console.

Do not use BaseConsole. Use yii\helpers\Console instead.

Public Methods

Hide inherited methods

Method Description Defined By
ansiColorizedSubstr() Returns the portion with ANSI color codes of string specified by the start and length parameters. yii\helpers\BaseConsole
ansiFormat() Will return a string formatted with the given ANSI style. yii\helpers\BaseConsole
ansiFormatCode() Returns the ANSI format code. yii\helpers\BaseConsole
ansiStrlen() Returns the length of the string without ANSI color codes. yii\helpers\BaseConsole
ansiStrwidth() Returns the width of the string without ANSI color codes. yii\helpers\BaseConsole
ansiToHtml() Converts an ANSI formatted string to HTML. yii\helpers\BaseConsole
beginAnsiFormat() Echoes an ANSI format code that affects the formatting of any text that is printed afterwards. yii\helpers\BaseConsole
clearLine() Clears the line, the cursor is currently on by sending ANSI control code EL with argument 2 to the terminal. yii\helpers\BaseConsole
clearLineAfterCursor() Clears text from cursor position to the end of the line by sending ANSI control code EL with argument 0 to the terminal. yii\helpers\BaseConsole
clearLineBeforeCursor() Clears text from cursor position to the beginning of the line by sending ANSI control code EL with argument 1 to the terminal. yii\helpers\BaseConsole
clearScreen() Clears entire screen content by sending ANSI control code ED with argument 2 to the terminal. yii\helpers\BaseConsole
clearScreenAfterCursor() Clears text from cursor to the end of the screen by sending ANSI control code ED with argument 0 to the terminal. yii\helpers\BaseConsole
clearScreenBeforeCursor() Clears text from cursor to the beginning of the screen by sending ANSI control code ED with argument 1 to the terminal. yii\helpers\BaseConsole
confirm() Asks user to confirm by typing y or n. yii\helpers\BaseConsole
endAnsiFormat() Resets any ANSI format set by previous method beginAnsiFormat() Any output after this will have default text format. yii\helpers\BaseConsole
endProgress() Ends a progress bar that has been started by startProgress(). yii\helpers\BaseConsole
error() Prints text to STDERR appended with a carriage return (PHP_EOL). yii\helpers\BaseConsole
errorSummary() Generates a summary of the validation errors. yii\helpers\BaseConsole
escape() Escapes % so they don't get interpreted as color codes when the string is parsed by renderColoredString(). yii\helpers\BaseConsole
getScreenSize() Returns terminal screen size. yii\helpers\BaseConsole
hideCursor() Hides the cursor by sending ANSI DECTCEM code ?25l to the terminal. yii\helpers\BaseConsole
input() Asks the user for input. Ends when the user types a carriage return (PHP_EOL). Optionally, It also provides a prompt. yii\helpers\BaseConsole
isRunningOnWindows() Returns true if the console is running on windows. yii\helpers\BaseConsole
markdownToAnsi() Converts Markdown to be better readable in console environments by applying some ANSI format. yii\helpers\BaseConsole
moveCursorBackward() Moves the terminal cursor backward by sending ANSI control code CUB to the terminal. yii\helpers\BaseConsole
moveCursorDown() Moves the terminal cursor down by sending ANSI control code CUD to the terminal. yii\helpers\BaseConsole
moveCursorForward() Moves the terminal cursor forward by sending ANSI control code CUF to the terminal. yii\helpers\BaseConsole
moveCursorNextLine() Moves the terminal cursor to the beginning of the next line by sending ANSI control code CNL to the terminal. yii\helpers\BaseConsole
moveCursorPrevLine() Moves the terminal cursor to the beginning of the previous line by sending ANSI control code CPL to the terminal. yii\helpers\BaseConsole
moveCursorTo() Moves the cursor to an absolute position given as column and row by sending ANSI control code CUP or CHA to the terminal. yii\helpers\BaseConsole
moveCursorUp() Moves the terminal cursor up by sending ANSI control code CUU to the terminal. yii\helpers\BaseConsole
output() Prints text to STDOUT appended with a carriage return (PHP_EOL). yii\helpers\BaseConsole
prompt() Prompts the user for input and validates it. yii\helpers\BaseConsole
renderColoredString() Converts a string to ansi formatted by replacing patterns like %y (for yellow) with ansi control codes. yii\helpers\BaseConsole
restoreCursorPosition() Restores the cursor position saved with saveCursorPosition() by sending ANSI control code RCP to the terminal. yii\helpers\BaseConsole
saveCursorPosition() Saves the current cursor position by sending ANSI control code SCP to the terminal. yii\helpers\BaseConsole
scrollDown() Scrolls whole page down by sending ANSI control code SD to the terminal. yii\helpers\BaseConsole
scrollUp() Scrolls whole page up by sending ANSI control code SU to the terminal. yii\helpers\BaseConsole
select() Gives the user an option to choose from. Giving '?' as an input will show a list of options to choose from and their explanations. yii\helpers\BaseConsole
showCursor() Will show a cursor again when it has been hidden by hideCursor() by sending ANSI DECTCEM code ?25h to the terminal. yii\helpers\BaseConsole
startProgress() Starts display of a progress bar on screen. yii\helpers\BaseConsole
stderr() Prints a string to STDERR. yii\helpers\BaseConsole
stdin() Gets input from STDIN and returns a string right-trimmed for EOLs. yii\helpers\BaseConsole
stdout() Prints a string to STDOUT. yii\helpers\BaseConsole
streamSupportsAnsiColors() Returns true if the stream supports colorization. ANSI colors are disabled if not supported by the stream. yii\helpers\BaseConsole
stripAnsiFormat() Strips ANSI control codes from a string. yii\helpers\BaseConsole
updateProgress() Updates a progress bar that has been started by startProgress(). yii\helpers\BaseConsole
wrapText() Word wrap text with indentation to fit the screen size. yii\helpers\BaseConsole
xtermBgColor() Returns the ansi format code for xterm background color. yii\helpers\BaseConsole
xtermFgColor() Returns the ansi format code for xterm foreground color. yii\helpers\BaseConsole

Method Details

Hide inherited methods

ansiColorizedSubstr() public static method

Returns the portion with ANSI color codes of string specified by the start and length parameters.

If string has color codes, then will be return "TEXT_COLOR + TEXT_STRING + DEFAULT_COLOR", else will be simple "TEXT_STRING".

public static string ansiColorizedSubstr ( $string, $start, $length )
$string string
$start integer
$length integer

                public static function ansiColorizedSubstr($string, $start, $length)
{
    if ($start < 0 || $length <= 0) {
        return '';
    }
    $textItems = preg_split(self::ansiCodesPattern(), (string)$string);
    preg_match_all(self::ansiCodesPattern(), (string)$string, $colors);
    $colors = count($colors) ? $colors[0] : [];
    array_unshift($colors, '');
    $result = '';
    $curPos = 0;
    $inRange = false;
    foreach ($textItems as $k => $textItem) {
        $color = $colors[$k];
        if ($curPos <= $start && $start < $curPos + Console::ansiStrwidth($textItem)) {
            $text = mb_substr($textItem, $start - $curPos, null, Yii::$app->charset);
            $inRange = true;
        } else {
            $text = $textItem;
        }
        if ($inRange) {
            $result .= $color . $text;
            $diff = $length - Console::ansiStrwidth($result);
            if ($diff <= 0) {
                if ($diff < 0) {
                    $result = mb_substr($result, 0, $diff, Yii::$app->charset);
                }
                $defaultColor = static::renderColoredString('%n');
                if ($color && $color != $defaultColor) {
                    $result .= $defaultColor;
                }
                break;
            }
        }
        $curPos += mb_strlen($textItem, Yii::$app->charset);
    }
    return $result;
}

            
ansiFormat() public static method

Will return a string formatted with the given ANSI style.

public static string ansiFormat ( $string, $format = [] )
$string string

The string to be formatted

$format array

An array containing formatting values. You can pass any of the FG_*, BG_* and TEXT_* constants and also xtermFgColor() and xtermBgColor() to specify a format.

                public static function ansiFormat($string, $format = [])
{
    $code = implode(';', $format);
    return "\033[0m" . ($code !== '' ? "\033[" . $code . 'm' : '') . $string . "\033[0m";
}

            
ansiFormatCode() public static method

Returns the ANSI format code.

public static string ansiFormatCode ( $format )
$format array

An array containing formatting values. You can pass any of the FG_*, BG_* and TEXT_* constants and also xtermFgColor() and xtermBgColor() to specify a format.

return string

The ANSI format code according to the given formatting constants.

                public static function ansiFormatCode($format)
{
    return "\033[" . implode(';', $format) . 'm';
}

            
ansiStrlen() public static method

Returns the length of the string without ANSI color codes.

public static integer ansiStrlen ( $string )
$string string

The string to measure

return integer

The length of the string not counting ANSI format characters

                public static function ansiStrlen($string)
{
    return mb_strlen(static::stripAnsiFormat($string));
}

            
ansiStrwidth() public static method (available since version 2.0.36)

Returns the width of the string without ANSI color codes.

public static integer ansiStrwidth ( $string )
$string string

The string to measure

return integer

The width of the string not counting ANSI format characters

                public static function ansiStrwidth($string)
{
    return mb_strwidth(static::stripAnsiFormat($string), Yii::$app->charset);
}

            
ansiToHtml() public static method

Converts an ANSI formatted string to HTML.

Note: xTerm 256 bit colors are currently not supported.

public static string ansiToHtml ( $string, $styleMap = [] )
$string string

The string to convert.

$styleMap array

An optional mapping of ANSI control codes such as FG_COLOR or BOLD to a set of css style definitions. The CSS style definitions are represented as an array where the array keys correspond to the css style attribute names and the values are the css values. values may be arrays that will be merged and imploded with ' ' when rendered.

return string

HTML representation of the ANSI formatted string

                public static function ansiToHtml($string, $styleMap = [])
{
    $styleMap = [
        // https://www.w3.org/TR/CSS2/syndata.html#value-def-color
        self::FG_BLACK => ['color' => 'black'],
        self::FG_BLUE => ['color' => 'blue'],
        self::FG_CYAN => ['color' => 'aqua'],
        self::FG_GREEN => ['color' => 'lime'],
        self::FG_GREY => ['color' => 'silver'],
        // https://meyerweb.com/eric/thoughts/2014/06/19/rebeccapurple/
        // https://drafts.csswg.org/css-color/#valuedef-rebeccapurple
        self::FG_PURPLE => ['color' => 'rebeccapurple'],
        self::FG_RED => ['color' => 'red'],
        self::FG_YELLOW => ['color' => 'yellow'],
        self::BG_BLACK => ['background-color' => 'black'],
        self::BG_BLUE => ['background-color' => 'blue'],
        self::BG_CYAN => ['background-color' => 'aqua'],
        self::BG_GREEN => ['background-color' => 'lime'],
        self::BG_GREY => ['background-color' => 'silver'],
        self::BG_PURPLE => ['background-color' => 'rebeccapurple'],
        self::BG_RED => ['background-color' => 'red'],
        self::BG_YELLOW => ['background-color' => 'yellow'],
        self::BOLD => ['font-weight' => 'bold'],
        self::ITALIC => ['font-style' => 'italic'],
        self::UNDERLINE => ['text-decoration' => ['underline']],
        self::OVERLINED => ['text-decoration' => ['overline']],
        self::CROSSED_OUT => ['text-decoration' => ['line-through']],
        self::BLINK => ['text-decoration' => ['blink']],
        self::CONCEALED => ['visibility' => 'hidden'],
    ] + $styleMap;
    $tags = 0;
    $result = preg_replace_callback(
        '/\033\[([\d;]+)m/',
        function ($ansi) use (&$tags, $styleMap) {
            $style = [];
            $reset = false;
            $negative = false;
            foreach (explode(';', $ansi[1]) as $controlCode) {
                if ($controlCode == 0) {
                    $style = [];
                    $reset = true;
                } elseif ($controlCode == self::NEGATIVE) {
                    $negative = true;
                } elseif (isset($styleMap[$controlCode])) {
                    $style[] = $styleMap[$controlCode];
                }
            }
            $return = '';
            while ($reset && $tags > 0) {
                $return .= '</span>';
                $tags--;
            }
            if (empty($style)) {
                return $return;
            }
            $currentStyle = [];
            foreach ($style as $content) {
                $currentStyle = ArrayHelper::merge($currentStyle, $content);
            }
            // if negative is set, invert background and foreground
            if ($negative) {
                if (isset($currentStyle['color'])) {
                    $fgColor = $currentStyle['color'];
                    unset($currentStyle['color']);
                }
                if (isset($currentStyle['background-color'])) {
                    $bgColor = $currentStyle['background-color'];
                    unset($currentStyle['background-color']);
                }
                if (isset($fgColor)) {
                    $currentStyle['background-color'] = $fgColor;
                }
                if (isset($bgColor)) {
                    $currentStyle['color'] = $bgColor;
                }
            }
            $styleString = '';
            foreach ($currentStyle as $name => $value) {
                if (is_array($value)) {
                    $value = implode(' ', $value);
                }
                $styleString .= "$name: $value;";
            }
            $tags++;
            return "$return<span style=\"$styleString\">";
        },
        $string
    );
    while ($tags > 0) {
        $result .= '</span>';
        $tags--;
    }
    return $result;
}

            
beginAnsiFormat() public static method

Echoes an ANSI format code that affects the formatting of any text that is printed afterwards.

See also:

public static void beginAnsiFormat ( $format )
$format array

An array containing formatting values. You can pass any of the FG_*, BG_* and TEXT_* constants and also xtermFgColor() and xtermBgColor() to specify a format.

                public static function beginAnsiFormat($format)
{
    echo "\033[" . implode(';', $format) . 'm';
}

            
clearLine() public static method

Clears the line, the cursor is currently on by sending ANSI control code EL with argument 2 to the terminal.

Cursor position will not be changed.

public static void clearLine ( )

                public static function clearLine()
{
    echo "\033[2K";
}

            
clearLineAfterCursor() public static method

Clears text from cursor position to the end of the line by sending ANSI control code EL with argument 0 to the terminal.

Cursor position will not be changed.

public static void clearLineAfterCursor ( )

                public static function clearLineAfterCursor()
{
    echo "\033[0K";
}

            
clearLineBeforeCursor() public static method

Clears text from cursor position to the beginning of the line by sending ANSI control code EL with argument 1 to the terminal.

Cursor position will not be changed.

public static void clearLineBeforeCursor ( )

                public static function clearLineBeforeCursor()
{
    echo "\033[1K";
}

            
clearScreen() public static method

Clears entire screen content by sending ANSI control code ED with argument 2 to the terminal.

Cursor position will not be changed. Note: ANSI.SYS implementation used in windows will reset cursor position to upper left corner of the screen.

public static void clearScreen ( )

                public static function clearScreen()
{
    echo "\033[2J";
}

            
clearScreenAfterCursor() public static method

Clears text from cursor to the end of the screen by sending ANSI control code ED with argument 0 to the terminal.

Cursor position will not be changed.

public static void clearScreenAfterCursor ( )

                public static function clearScreenAfterCursor()
{
    echo "\033[0J";
}

            
clearScreenBeforeCursor() public static method

Clears text from cursor to the beginning of the screen by sending ANSI control code ED with argument 1 to the terminal.

Cursor position will not be changed.

public static void clearScreenBeforeCursor ( )

                public static function clearScreenBeforeCursor()
{
    echo "\033[1J";
}

            
confirm() public static method

Asks user to confirm by typing y or n.

A typical usage looks like the following:

if (Console::confirm("Are you sure?")) {
    echo "user typed yes\n";
} else {
    echo "user typed no\n";
}
public static boolean confirm ( $message, $default false )
$message string

To print out before waiting for user input

$default boolean

This value is returned if no selection is made.

return boolean

Whether user confirmed

                public static function confirm($message, $default = false)
{
    while (true) {
        static::stdout($message . ' (yes|no) [' . ($default ? 'yes' : 'no') . ']:');
        $input = trim(static::stdin());
        if (empty($input)) {
            return $default;
        }
        if (!strcasecmp($input, 'y') || !strcasecmp($input, 'yes')) {
            return true;
        }
        if (!strcasecmp($input, 'n') || !strcasecmp($input, 'no')) {
            return false;
        }
    }
}

            
endAnsiFormat() public static method

Resets any ANSI format set by previous method beginAnsiFormat() Any output after this will have default text format.

This is equal to calling.

echo Console::ansiFormatCode([Console::RESET])
public static void endAnsiFormat ( )

                public static function endAnsiFormat()
{
    echo "\033[0m";
}

            
endProgress() public static method

Ends a progress bar that has been started by startProgress().

See also:

public static void endProgress ( $remove false, $keepPrefix true )
$remove string|boolean

This can be false to leave the progress bar on screen and just print a newline. If set to true, the line of the progress bar will be cleared. This may also be a string to be displayed instead of the progress bar.

$keepPrefix boolean

Whether to keep the prefix that has been specified for the progressbar when progressbar gets removed. Defaults to true.

                public static function endProgress($remove = false, $keepPrefix = true)
{
    if ($remove === false) {
        static::stdout(PHP_EOL);
    } else {
        if (static::streamSupportsAnsiColors(STDOUT)) {
            static::clearLine();
        }
        static::stdout("\r" . ($keepPrefix ? self::$_progressPrefix : '') . (is_string($remove) ? $remove : ''));
    }
    flush();
    self::$_progressStart = null;
    self::$_progressWidth = null;
    self::$_progressPrefix = '';
    self::$_progressEta = null;
    self::$_progressEtaLastDone = 0;
    self::$_progressEtaLastUpdate = null;
}

            
error() public static method

Prints text to STDERR appended with a carriage return (PHP_EOL).

public static integer|boolean error ( $string null )
$string string|null

The text to print

return integer|boolean

Number of bytes printed or false on error.

                public static function error($string = null)
{
    return static::stderr($string . PHP_EOL);
}

            
errorSummary() public static method (available since version 2.0.14)

Generates a summary of the validation errors.

public static string errorSummary ( $models, $options = [] )
$models yii\base\Model|yii\base\Model[]

The model(s) whose validation errors are to be displayed.

$options array

The tag options in terms of name-value pairs. The following options are specially handled:

  • showAllErrors: boolean, if set to true every error message for each attribute will be shown otherwise only the first error message for each attribute will be shown. Defaults to false.
return string

The generated error summary

                public static function errorSummary($models, $options = [])
{
    $showAllErrors = ArrayHelper::remove($options, 'showAllErrors', false);
    $lines = self::collectErrors($models, $showAllErrors);
    return implode(PHP_EOL, $lines);
}

            
escape() public static method

Escapes % so they don't get interpreted as color codes when the string is parsed by renderColoredString().

public static string escape ( $string )
$string string

String to escape

                public static function escape($string)
{
    // TODO rework/refactor according to https://github.com/yiisoft/yii2/issues/746
    return str_replace('%', '%%', $string);
}

            
getScreenSize() public static method

Returns terminal screen size.

Usage:

list($width, $height) = ConsoleHelper::getScreenSize();
public static array|boolean getScreenSize ( $refresh false )
$refresh boolean

Whether to force checking and not re-use cached size value. This is useful to detect changing window size while the application is running but may not get up to date values on every terminal.

return array|boolean

An array of ($width, $height) or false when it was not able to determine size.

                public static function getScreenSize($refresh = false)
{
    static $size;
    static $execDisabled;
    if ($size !== null && ($execDisabled || !$refresh)) {
        return $size;
    }
    if ($execDisabled === null) {
        $execDisabled = !function_exists('ini_get') || preg_match('/(\bexec\b)/i', ini_get('disable_functions'));
        if ($execDisabled) {
            return $size = false;
        }
    }
    if (static::isRunningOnWindows()) {
        $output = [];
        exec('mode con', $output);
        if (isset($output[1]) && strpos($output[1], 'CON') !== false) {
            return $size = [(int) preg_replace('~\D~', '', $output[4]), (int) preg_replace('~\D~', '', $output[3])];
        }
    } else {
        // try stty if available
        $stty = [];
        if (exec('stty -a 2>&1', $stty)) {
            $stty = implode(' ', $stty);
            // Linux stty output
            if (preg_match('/rows\s+(\d+);\s*columns\s+(\d+);/mi', $stty, $matches)) {
                return $size = [(int) $matches[2], (int) $matches[1]];
            }
            // MacOS stty output
            if (preg_match('/(\d+)\s+rows;\s*(\d+)\s+columns;/mi', $stty, $matches)) {
                return $size = [(int) $matches[2], (int) $matches[1]];
            }
        }
        // fallback to tput, which may not be updated on terminal resize
        if (($width = (int) exec('tput cols 2>&1')) > 0 && ($height = (int) exec('tput lines 2>&1')) > 0) {
            return $size = [$width, $height];
        }
        // fallback to ENV variables, which may not be updated on terminal resize
        if (($width = (int) getenv('COLUMNS')) > 0 && ($height = (int) getenv('LINES')) > 0) {
            return $size = [$width, $height];
        }
    }
    return $size = false;
}

            
hideCursor() public static method

Hides the cursor by sending ANSI DECTCEM code ?25l to the terminal.

Use showCursor() to bring it back. Do not forget to show cursor when your application exits. Cursor might stay hidden in terminal after exit.

public static void hideCursor ( )

                public static function hideCursor()
{
    echo "\033[?25l";
}

            
input() public static method

Asks the user for input. Ends when the user types a carriage return (PHP_EOL). Optionally, It also provides a prompt.

public static string input ( $prompt null )
$prompt string|null

The prompt to display before waiting for input (optional)

return string

The user's input

                public static function input($prompt = null)
{
    if (isset($prompt)) {
        static::stdout($prompt);
    }
    return static::stdin();
}

            
isRunningOnWindows() public static method

Returns true if the console is running on windows.

public static boolean isRunningOnWindows ( )

                public static function isRunningOnWindows()
{
    return DIRECTORY_SEPARATOR === '\\';
}

            
markdownToAnsi() public static method

Converts Markdown to be better readable in console environments by applying some ANSI format.

public static string markdownToAnsi ( $markdown )
$markdown string

The markdown string.

return string

The parsed result as ANSI formatted string.

                public static function markdownToAnsi($markdown)
{
    $parser = new ConsoleMarkdown();
    return $parser->parse($markdown);
}

            
moveCursorBackward() public static method

Moves the terminal cursor backward by sending ANSI control code CUB to the terminal.

If the cursor is already at the edge of the screen, this has no effect.

public static void moveCursorBackward ( $steps 1 )
$steps integer

Number of steps the cursor should be moved backward

                public static function moveCursorBackward($steps = 1)
{
    echo "\033[" . (int) $steps . 'D';
}

            
moveCursorDown() public static method

Moves the terminal cursor down by sending ANSI control code CUD to the terminal.

If the cursor is already at the edge of the screen, this has no effect.

public static void moveCursorDown ( $rows 1 )
$rows integer

Number of rows the cursor should be moved down

                public static function moveCursorDown($rows = 1)
{
    echo "\033[" . (int) $rows . 'B';
}

            
moveCursorForward() public static method

Moves the terminal cursor forward by sending ANSI control code CUF to the terminal.

If the cursor is already at the edge of the screen, this has no effect.

public static void moveCursorForward ( $steps 1 )
$steps integer

Number of steps the cursor should be moved forward

                public static function moveCursorForward($steps = 1)
{
    echo "\033[" . (int) $steps . 'C';
}

            
moveCursorNextLine() public static method

Moves the terminal cursor to the beginning of the next line by sending ANSI control code CNL to the terminal.

public static void moveCursorNextLine ( $lines 1 )
$lines integer

Number of lines the cursor should be moved down

                public static function moveCursorNextLine($lines = 1)
{
    echo "\033[" . (int) $lines . 'E';
}

            
moveCursorPrevLine() public static method

Moves the terminal cursor to the beginning of the previous line by sending ANSI control code CPL to the terminal.

public static void moveCursorPrevLine ( $lines 1 )
$lines integer

Number of lines the cursor should be moved up

                public static function moveCursorPrevLine($lines = 1)
{
    echo "\033[" . (int) $lines . 'F';
}

            
moveCursorTo() public static method

Moves the cursor to an absolute position given as column and row by sending ANSI control code CUP or CHA to the terminal.

public static void moveCursorTo ( $column, $row null )
$column integer

1-based column number, 1 is the left edge of the screen.

$row integer|null

1-based row number, 1 is the top edge of the screen. if not set, will move cursor only in current line.

                public static function moveCursorTo($column, $row = null)
{
    if ($row === null) {
        echo "\033[" . (int) $column . 'G';
    } else {
        echo "\033[" . (int) $row . ';' . (int) $column . 'H';
    }
}

            
moveCursorUp() public static method

Moves the terminal cursor up by sending ANSI control code CUU to the terminal.

If the cursor is already at the edge of the screen, this has no effect.

public static void moveCursorUp ( $rows 1 )
$rows integer

Number of rows the cursor should be moved up

                public static function moveCursorUp($rows = 1)
{
    echo "\033[" . (int) $rows . 'A';
}

            
output() public static method

Prints text to STDOUT appended with a carriage return (PHP_EOL).

public static integer|boolean output ( $string null )
$string string|null

The text to print

return integer|boolean

Number of bytes printed or false on error.

                public static function output($string = null)
{
    return static::stdout($string . PHP_EOL);
}

            
prompt() public static method

Prompts the user for input and validates it.

public static string prompt ( $text, $options = [] )
$text string

Prompt string

$options array

The options to validate the input:

  • required: whether it is required or not
  • default: default value if no input is inserted by the user
  • pattern: regular expression pattern to validate user input
  • validator: a callable function to validate input. The function must accept two parameters:
  • input: the user input to validate
  • error: the error value passed by reference if validation failed.
return string

The user input

                public static function prompt($text, $options = [])
{
    $options = ArrayHelper::merge(
        [
            'required' => false,
            'default' => null,
            'pattern' => null,
            'validator' => null,
            'error' => 'Invalid input.',
        ],
        $options
    );
    $error = null;
    top:
    $input = $options['default']
        ? static::input("$text [" . $options['default'] . '] ')
        : static::input("$text ");
    if ($input === '') {
        if (isset($options['default'])) {
            $input = $options['default'];
        } elseif ($options['required']) {
            static::output($options['error']);
            goto top;
        }
    } elseif ($options['pattern'] && !preg_match($options['pattern'], $input)) {
        static::output($options['error']);
        goto top;
    } elseif ($options['validator'] &&
        !call_user_func_array($options['validator'], [$input, &$error])
    ) {
        static::output(isset($error) ? $error : $options['error']);
        goto top;
    }
    return $input;
}

            
renderColoredString() public static method

Converts a string to ansi formatted by replacing patterns like %y (for yellow) with ansi control codes.

Uses almost the same syntax as https://github.com/pear/Console_Color2/blob/master/Console/Color2.php The conversion table is: ('bold' meaning 'light' on some terminals). It's almost the same conversion table irssi uses.

             text      text            background
 ------------------------------------------------
 %k %K %0    black     dark grey       black
 %r %R %1    red       bold red        red
 %g %G %2    green     bold green      green
 %y %Y %3    yellow    bold yellow     yellow
 %b %B %4    blue      bold blue       blue
 %m %M %5    magenta   bold magenta    magenta
 %p %P       magenta (think: purple)
 %c %C %6    cyan      bold cyan       cyan
 %w %W %7    white     bold white      white

 %F     Blinking, Flashing
 %U     Underline
 %8     Reverse
 %_,%9  Bold

 %n     Resets the color
 %%     A single %

First param is the string to convert, second is an optional flag if colors should be used. It defaults to true, if set to false, the color codes will just be removed (And %% will be transformed into %)

public static string renderColoredString ( $string, $colored true )
$string string

String to convert

$colored boolean

Should the string be colored?

                public static function renderColoredString($string, $colored = true)
{
    // TODO rework/refactor according to https://github.com/yiisoft/yii2/issues/746
    static $conversions = [
        '%y' => [self::FG_YELLOW],
        '%g' => [self::FG_GREEN],
        '%b' => [self::FG_BLUE],
        '%r' => [self::FG_RED],
        '%p' => [self::FG_PURPLE],
        '%m' => [self::FG_PURPLE],
        '%c' => [self::FG_CYAN],
        '%w' => [self::FG_GREY],
        '%k' => [self::FG_BLACK],
        '%n' => [0], // reset
        '%Y' => [self::FG_YELLOW, self::BOLD],
        '%G' => [self::FG_GREEN, self::BOLD],
        '%B' => [self::FG_BLUE, self::BOLD],
        '%R' => [self::FG_RED, self::BOLD],
        '%P' => [self::FG_PURPLE, self::BOLD],
        '%M' => [self::FG_PURPLE, self::BOLD],
        '%C' => [self::FG_CYAN, self::BOLD],
        '%W' => [self::FG_GREY, self::BOLD],
        '%K' => [self::FG_BLACK, self::BOLD],
        '%N' => [0, self::BOLD],
        '%3' => [self::BG_YELLOW],
        '%2' => [self::BG_GREEN],
        '%4' => [self::BG_BLUE],
        '%1' => [self::BG_RED],
        '%5' => [self::BG_PURPLE],
        '%6' => [self::BG_CYAN],
        '%7' => [self::BG_GREY],
        '%0' => [self::BG_BLACK],
        '%F' => [self::BLINK],
        '%U' => [self::UNDERLINE],
        '%8' => [self::NEGATIVE],
        '%9' => [self::BOLD],
        '%_' => [self::BOLD],
    ];
    if ($colored) {
        $string = str_replace('%%', '% ', $string);
        foreach ($conversions as $key => $value) {
            $string = str_replace(
                $key,
                static::ansiFormatCode($value),
                $string
            );
        }
        $string = str_replace('% ', '%', $string);
    } else {
        $string = preg_replace('/%((%)|.)/', '$2', $string);
    }
    return $string;
}

            
restoreCursorPosition() public static method

Restores the cursor position saved with saveCursorPosition() by sending ANSI control code RCP to the terminal.

public static void restoreCursorPosition ( )

                public static function restoreCursorPosition()
{
    echo "\033[u";
}

            
saveCursorPosition() public static method

Saves the current cursor position by sending ANSI control code SCP to the terminal.

Position can then be restored with restoreCursorPosition().

public static void saveCursorPosition ( )

                public static function saveCursorPosition()
{
    echo "\033[s";
}

            
scrollDown() public static method

Scrolls whole page down by sending ANSI control code SD to the terminal.

New lines are added at the top. This is not supported by ANSI.SYS used in windows.

public static void scrollDown ( $lines 1 )
$lines integer

Number of lines to scroll down

                public static function scrollDown($lines = 1)
{
    echo "\033[" . (int) $lines . 'T';
}

            
scrollUp() public static method

Scrolls whole page up by sending ANSI control code SU to the terminal.

New lines are added at the bottom. This is not supported by ANSI.SYS used in windows.

public static void scrollUp ( $lines 1 )
$lines integer

Number of lines to scroll up

                public static function scrollUp($lines = 1)
{
    echo "\033[" . (int) $lines . 'S';
}

            
select() public static method

Gives the user an option to choose from. Giving '?' as an input will show a list of options to choose from and their explanations.

public static string select ( $prompt, $options = [] )
$prompt string

The prompt message

$options array

Key-value array of options to choose from. Key is what is inputed and used, value is what's displayed to end user by help command.

return string

An option character the user chose

                public static function select($prompt, $options = [])
{
    top:
    static::stdout("$prompt [" . implode(',', array_keys($options)) . ',?]: ');
    $input = static::stdin();
    if ($input === '?') {
        foreach ($options as $key => $value) {
            static::output(" $key - $value");
        }
        static::output(' ? - Show help');
        goto top;
    } elseif (!array_key_exists($input, $options)) {
        goto top;
    }
    return $input;
}

            
showCursor() public static method

Will show a cursor again when it has been hidden by hideCursor() by sending ANSI DECTCEM code ?25h to the terminal.

public static void showCursor ( )

                public static function showCursor()
{
    echo "\033[?25h";
}

            
startProgress() public static method

Starts display of a progress bar on screen.

This bar will be updated by updateProgress() and may be ended by endProgress().

The following example shows a simple usage of a progress bar:

Console::startProgress(0, 1000);
for ($n = 1; $n <= 1000; $n++) {
    usleep(1000);
    Console::updateProgress($n, 1000);
}
Console::endProgress();

Git clone like progress (showing only status information):

Console::startProgress(0, 1000, 'Counting objects: ', false);
for ($n = 1; $n <= 1000; $n++) {
    usleep(1000);
    Console::updateProgress($n, 1000);
}
Console::endProgress("done." . PHP_EOL);

See also:

public static void startProgress ( $done, $total, $prefix '', $width null )
$done integer

The number of items that are completed.

$total integer

The total value of items that are to be done.

$prefix string

An optional string to display before the progress bar. Default to empty string which results in no prefix to be displayed.

$width integer|float|boolean|null

Optional width of the progressbar. This can be an integer representing the number of characters to display for the progress bar or a float between 0 and 1 representing the percentage of screen with the progress bar may take. It can also be set to false to disable the bar and only show progress information like percent, number of items and ETA. If not set, the bar will be as wide as the screen. Screen size will be detected using getScreenSize().

                public static function startProgress($done, $total, $prefix = '', $width = null)
{
    self::$_progressStart = time();
    self::$_progressWidth = $width;
    self::$_progressPrefix = $prefix;
    self::$_progressEta = null;
    self::$_progressEtaLastDone = 0;
    self::$_progressEtaLastUpdate = time();
    static::updateProgress($done, $total);
}

            
stderr() public static method

Prints a string to STDERR.

public static integer|boolean stderr ( $string )
$string string

The string to print

return integer|boolean

Number of bytes printed or false on error

                public static function stderr($string)
{
    return fwrite(\STDERR, $string);
}

            
stdin() public static method

Gets input from STDIN and returns a string right-trimmed for EOLs.

public static string stdin ( $raw false )
$raw boolean

If set to true, returns the raw string without trimming

return string

The string read from stdin

                public static function stdin($raw = false)
{
    return $raw ? fgets(\STDIN) : rtrim(fgets(\STDIN), PHP_EOL);
}

            
stdout() public static method

Prints a string to STDOUT.

public static integer|boolean stdout ( $string )
$string string

The string to print

return integer|boolean

Number of bytes printed or false on error

                public static function stdout($string)
{
    return fwrite(\STDOUT, $string);
}

            
streamSupportsAnsiColors() public static method

Returns true if the stream supports colorization. ANSI colors are disabled if not supported by the stream.

  • windows without ansicon
  • not tty consoles
public static boolean streamSupportsAnsiColors ( $stream )
$stream mixed
return boolean

True if the stream supports ANSI colors, otherwise false.

                public static function streamSupportsAnsiColors($stream)
{
    return DIRECTORY_SEPARATOR === '\\'
        ? getenv('ANSICON') !== false || getenv('ConEmuANSI') === 'ON'
        : function_exists('posix_isatty') && @posix_isatty($stream);
}

            
stripAnsiFormat() public static method

Strips ANSI control codes from a string.

public static string stripAnsiFormat ( $string )
$string string

String to strip

                public static function stripAnsiFormat($string)
{
    return preg_replace(self::ansiCodesPattern(), '', (string)$string);
}

            
updateProgress() public static method

Updates a progress bar that has been started by startProgress().

See also:

public static void updateProgress ( $done, $total, $prefix null )
$done integer

The number of items that are completed.

$total integer

The total value of items that are to be done.

$prefix string|null

An optional string to display before the progress bar. Defaults to null meaning the prefix specified by startProgress() will be used. If prefix is specified it will update the prefix that will be used by later calls.

                public static function updateProgress($done, $total, $prefix = null)
{
    if ($prefix === null) {
        $prefix = self::$_progressPrefix;
    } else {
        self::$_progressPrefix = $prefix;
    }
    $width = static::getProgressbarWidth($prefix);
    $percent = ($total == 0) ? 1 : $done / $total;
    $info = sprintf('%d%% (%d/%d)', $percent * 100, $done, $total);
    self::setETA($done, $total);
    $info .= self::$_progressEta === null ? ' ETA: n/a' : sprintf(' ETA: %d sec.', self::$_progressEta);
    // Number extra characters outputted. These are opening [, closing ], and space before info
    // Since Windows uses \r\n\ for line endings, there's one more in the case
    $extraChars = static::isRunningOnWindows() ? 4 : 3;
    $width -= $extraChars + static::ansiStrlen($info);
    // skipping progress bar on very small display or if forced to skip
    if ($width < 5) {
        static::stdout("\r$prefix$info   ");
    } else {
        if ($percent < 0) {
            $percent = 0;
        } elseif ($percent > 1) {
            $percent = 1;
        }
        $bar = floor($percent * $width);
        $status = str_repeat('=', $bar);
        if ($bar < $width) {
            $status .= '>';
            $status .= str_repeat(' ', $width - $bar - 1);
        }
        static::stdout("\r$prefix" . "[$status] $info");
    }
    flush();
}

            
wrapText() public static method (available since version 2.0.4)

Word wrap text with indentation to fit the screen size.

If screen size could not be detected, or the indentation is greater than the screen size, the text will not be wrapped.

The first line will not be indented, so Console::wrapText("Lorem ipsum dolor sit amet.", 4) will result in the following output, given the screen width is 16 characters:

Lorem ipsum
    dolor sit
    amet.
public static string wrapText ( $text, $indent 0, $refresh false )
$text string

The text to be wrapped

$indent integer

Number of spaces to use for indentation.

$refresh boolean

Whether to force refresh of screen size. This will be passed to getScreenSize().

return string

The wrapped text.

                public static function wrapText($text, $indent = 0, $refresh = false)
{
    $size = static::getScreenSize($refresh);
    if ($size === false || $size[0] <= $indent) {
        return $text;
    }
    $pad = str_repeat(' ', $indent);
    $lines = explode("\n", wordwrap($text, $size[0] - $indent, "\n"));
    $first = true;
    foreach ($lines as $i => $line) {
        if ($first) {
            $first = false;
            continue;
        }
        $lines[$i] = $pad . $line;
    }
    return implode("\n", $lines);
}

            
xtermBgColor() public static method

Returns the ansi format code for xterm background color.

You can pass the return value of this to one of the formatting methods: ansiFormat(), ansiFormatCode(), beginAnsiFormat().

See also https://en.wikipedia.org/wiki/Talk:ANSI_escape_code#xterm-256colors.

public static string xtermBgColor ( $colorCode )
$colorCode integer

Xterm color code

                public static function xtermBgColor($colorCode)
{
    return '48;5;' . $colorCode;
}

            
xtermFgColor() public static method

Returns the ansi format code for xterm foreground color.

You can pass the return value of this to one of the formatting methods: ansiFormat(), ansiFormatCode(), beginAnsiFormat().

See also https://en.wikipedia.org/wiki/Talk:ANSI_escape_code#xterm-256colors.

public static string xtermFgColor ( $colorCode )
$colorCode integer

Xterm color code

                public static function xtermFgColor($colorCode)
{
    return '38;5;' . $colorCode;
}