PHPGangsta - Der praktische PHP Blog

PHP Blog von PHPGangsta


Farben in der Kommandozeile nutzen

with 7 comments

Wenn man nur Webseiten erstellt braucht man im Normalfall keine Konsolenscripte, aber bei Cronscripten oder anderen Administrationshelfern wird die CLI-Fähigkeit von PHP häufig genutzt. Manchmal möchte man dabei eine farbige Ausgabe, sprich farbige Schrift und farbigen Hintergrund, um Fehler oder wichtige Meldungen auszugeben und die Ausgabe etwas zu strukturieren.

Hier meine einfache Klasse, die farbige Schrift auf der Konsole ausgeben kann:

<?php

class Color
{
    protected $_foregroundColors = 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',
        'black_u'       => '4;30',   // underlined
        'red_u'         => '4;31',
        'green_u'       => '4;32',
        'yellow_u'      => '4;33',
        'blue_u'        => '4;34',
        'purple_u'      => '4;35',
        'cyan_u'        => '4;36',
        'white_u'       => '4;37'
    );
    protected $_backgroundColors = array(
        'black'         => '40',
		'red'           => '41',
		'green'         => '42',
		'yellow'        => '43',
		'blue'          => '44',
		'magenta'       => '45',
		'cyan'          => '46',
		'light_gray'    => '47'
    );

    public function set($foreground, $background = null)
    {
        if (isset($this->_foregroundColors[$foreground])) {
            echo "\033[" . $this->_foregroundColors[$foreground] . "m";
        }
        if (isset($this->_backgroundColors[$background])) {
            echo "\033[" . $this->_backgroundColors[$background] . "m";
        }
    }

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

    public function bold()
    {
        echo "\033[1m";
    }

    public function echoString($string, $foreground, $background = null)
    {
        $this->set($foreground, $background);
        echo $string;
        $this->reset();
    }
}

$color = new Color();
$color->set('red');
echo "red text\n";
$color->reset();

$color->echoString("red text on blue\n", 'red_u', 'blue');

Das Ergebnis sieht dann so aus:

Unter Windows funktioniert das ganze nicht direkt, man muss für Farben auf der Kommandozeile noch ANSICON installieren, damit die oben gesehenen ANSI Escape Sequenzen erkannt werden:

  1. Download ANSICON von http://adoxa.110mb.com/ansicon/index.html
  2. Dann je nach System die 32bit oder 64bit Dateien zB nach c:\ansicon kopieren
  3. Eine cmd starten und installieren: „cd c:\ansicon && ansicon.exe -i“
  4. danach die cmd schliessen und neu öffnen

Vorher:

Nachher:

Written by Michael Kliewe

Februar 3rd, 2011 at 9:04 am

7 Responses to 'Farben in der Kommandozeile nutzen'

Subscribe to comments with RSS or TrackBack to 'Farben in der Kommandozeile nutzen'.

  1. […] diese mit Hilfe vo ASCII Zeichen formatieren aber mit Farbe sieht das schon besser aus. • Farben in der Kommandozeile nutzen < Vorheriger Trackback specific URI for this […]

  2. Dafür gibt es auch ganz gute Libraries, z.B. CliFX: http://www.github.com/T-Moe/CliFX, das zwar recht jung ist aber schon farbigen Output unterstützt, neben formatiertem Input, Menüs, und ein paar anderen kleinen aber feinen Dingen.

    Timo

    3 Feb 11 at 13:16

  3. (ez|Zeta) ConsoleOutput

    jens

    3 Feb 11 at 13:39

  4. […] PHP Gangster hab ich soeben eine kleine Klasse entdeckt mit der CLI Scripte farbige Ausgaben machen können […]

  5. […] Farben in der Kommandozeile nutzen. […]

  6. Auch ganz nett und weitestgehend unbekannt ist die Kombination aus ncurses und PHP …

    Hatte dazu im Januar einen Artikel geschrieben:

    http://www.shopware.de/wiki/Allgemein-PHP-und-grafische-Shell.Oberflaechen-ncurses_detail_630_444.html

    Stefan

    15 Feb 11 at 16:58

  7. Danke, hat mir sehr geholfen.

    Andreas Rex

    31 Jan 13 at 11:28

Leave a Reply

You can add images to your comment by clicking here.