从PHP着色Windows命令行输出

And*_*ech 21 php cmd colors

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

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

小智 10

从以下网址下载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);
Run Code Online (Sandbox Code Playgroud)

一些例子:

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

颜色代码:
7 =>默认
0 =>黑色
1 =>蓝色
2 =>绿色
3 =>浅绿色
4 =>红色
5 =>紫色
6 =>黄色
7 =>浅灰色
8 =>灰色
9 =>浅蓝色
10 =>浅绿色
11 =>浅绿色
12 =>浅红色
13 =>浅紫色
14 =>浅黄色
15 =>白色

  • `regsvr32.exe"%systemroot%\ system32\dynwrap.dll"`在Windows 7,64bit上对我不起作用.这项工作对我而言http://softkube.com/blog/ansi-command-line-colors-under-windows/ (4认同)

sev*_*ven 6

遗憾的是,ANSI转义码在Windows命令提示符中不可用.

但是你可以尝试:

在bash shell上,它就像一个魅力,甚至还有一个php lib: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";
Run Code Online (Sandbox Code Playgroud)

这是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";
Run Code Online (Sandbox Code Playgroud)

  • 我的输出(Win 7上的`cmd.exe`)是`←[31mred←[37m` (3认同)

小智 6

自 Windows 10 1511 起,Windows 现在支持 ANSI 转义序列。您可以从cmdwith运行以下代码php,如果您运行的是 Windows 10 1511 及更高版本,您将获得彩色结果。

<?php
echo "\033[31mRed\n".    // Red Color Text 
     "\033[32mGreen\n".  // Green Color Text
     "\033[33mYellow\n". // Yellow Color Text
     "\033[34mBlue\n".   // Blue Color Text
     "\033[37mWhite\n";  // White Color Text
?>
Run Code Online (Sandbox Code Playgroud)

我正在运行 Windows 10 1903,下面的屏幕截图显示了我在 cmd 中的脚本输出:

在此处输入图片说明

完整的转义序列参考:https :
//docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences


red*_*red 0

尝试这个:

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

我手下没有 shell/php env,但这应该准确地输出你想要的内容。

  • 这是我得到的输出:`←5;31;47` (5认同)
  • 是的,我在问题中明确指出我正在寻找 Windows 解决方案。 (3认同)