着色来自PHP的Windows命令行输出

要在bash中输出彩色文本,请使用ANSI转义序列。

如何在Windows命令行输出彩色文本,特别是从PHP输出?


从以下网址下载dynwrap.dll:http://www.script-coding.com/dynwrap95.zip

然后将其解压缩到%systemroot%system32目录,然后在命令行中运行以下命令:

regsvr32.exe "%systemroot%system32dynwrap.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 => aqua
4 =>红色
5 =>紫色
6 =>黄色
7 =>浅灰色
8 =>灰色
9 =>浅蓝色
10 =>浅绿色
11 =>轻水
12 =>浅红色
13 =>浅紫色
14 =>淡黄色
15 =>白色


不幸的是,在Windows命令提示符中原本不提供ANSI转义码。

但是你可以尝试:

  • 用ansihack.exe修补cmd.exe http://gynvael.coldwind.pl/?id=130&lang=en :)
  • http://adoxa.110mb.com/ansicon/index.html
  • 在bash shell上它的作用就像一个魅力,甚至有一个php lib:http://sourceforge.net/projects/milcovlib/

    如果这对你来说太过分了,你可以试试这个:

    echo "33[31mred33[37mrn";
    echo "33[32mgreen33[37mrn";
    echo "33[41;30mblack on red33[40;37mrn";
    

    这里是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";
    

    看起来在Windows命令提示符下使用普通转义码不起作用。 其他与此相关的SO问题的答案表示您需要使用Win32 API。 Win32 API库确实存在于PHP中,但是文档确实有一个很大的红色部分,警告它是实验性的 。 因人而异。

    链接地址: http://www.djcxy.com/p/87387.html

    上一篇: Colorizing Windows command line output from PHP

    下一篇: Set output color in javascript