Раскрашивание вывода командной строки Windows из PHP - PullRequest
21 голосов
/ 17 августа 2011

Для вывода цветного текста в bash вы используете escape-последовательности ANSI .

Как вы выводите цветной текст в командной строке Windows, в частности из PHP?

Ответы [ 5 ]

10 голосов
/ 21 августа 2011

Загрузите файл dynwrap.dll из: http://www.script -coding.com / dynwrap95.zip

Затем извлеките его в каталог %systemroot%\system32 и выполните в командной строке следующую команду:

regsvr32.exe "%systemroot%\system32\dynwrap.dll"

Вы получите сообщение об успехе, которое означает, что dynwrap.dll зарегистрирован.

Затем вы можете использовать его следующим образом:

$com = new COM('DynamicWrapper');

// register needed features
$com->Register('kernel32.dll', 'GetStdHandle', 'i=h', 'f=s', 'r=l');
$com->Register('kernel32.dll', 'SetConsoleTextAttribute', 'i=hl', 'f=s', 'r=t');

// get console handle
$ch = $com->GetStdHandle(-11);

пример:

$com->SetConsoleTextAttribute($ch, 4);
echo 'This is a red text!';
$com->SetConsoleTextAttribute($ch, 7);
echo 'Back to normal color!';

коды цветов:7 => по умолчанию0 => черный1 => синий2 => зеленый3 => Аква4 => красный5 => фиолетовый6 => желтый7 => светло-серый8 => серый9 => голубой10 => светло-зеленый11 => легкий аква12 => светло-красный13 => светло-фиолетовый14 => светло-желтый15 => белый

6 голосов
/ 17 августа 2011

Экранирующие коды ANSI, к сожалению, недоступны в командной строке Windows.

Однако вы можете попробовать:

В оболочке bash он работает как шарм, и для этого есть даже PHP-библиотека: http://sourceforge.net/projects/milcovlib/

Если это для вас излишне, вы можете попробовать это:

echo "\033[31mred\033[37m\r\n";
echo "\033[32mgreen\033[37m\r\n";
echo "\033[41;30mblack on red\033[40;37m\r\n";

Вот список кодов цветов bash:

$black = "33[0;30m";
$darkgray = "33[1;30m";
$blue = "33[0;34m";
$lightblue = "33[1;34m";
$green = "33[0;32m";
$lightgreen = "33[1;32m";
$cyan = "33[0;36m";
$lightcyan = "33[1;36m";
$red = "33[0;31m";
$lightred = "33[1;31m";
$purple = "33[0;35m";
$lightpurple = "33[1;35m";
$brown = "33[0;33m";
$yellow = "33[1;33m";
$lightgray = "33[0;37m";
$white = "33[1;37m";
2 голосов
/ 17 августа 2011

Похоже, что использование простых escape-кодов не будет работать в командной строке Windows.Ответы на другие вопросы SO * , связанные с этим, говорят о том, что вам нужно использовать Win32 API.Библиотека API Win32 для PHP существует, однако документация имеет большое красное предупреждение, что она экспериментальная .YMMV.

1 голос
/ 29 мая 2015

Вы можете сделать это с расширением php-wcli.Это расширение использует встроенную функциональность Windows вместо стороннего эмулятора ansi.https://github.com/ZmotriN/php-wcli

0 голосов
/ 17 августа 2011

Попробуйте:

echo chr(27); //Escape char.
echo "5;31;47"; //Graphic mode blink red on white 

У меня нет оболочки / php env, но это должно вывести именно то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...