从PHP着色Windows命令行输出

问题描述 投票:21回答:6

要在bash中输出彩色文本,请使用ANSI escape sequences

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

php colors cmd
6个回答
10
投票

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

然后将其解压缩到%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
投票

不幸的是,ANSI命令转义代码本身在Windows命令提示符中不可用。

但是您可以尝试:

在bash外壳上,它像一个符咒一样工作,甚至还有一个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";

这里是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
投票

看来,在Windows命令提示符下使用普通的转义码将无效。与此相关的the other SO questions答案表明您需要使用Win32 API。 Win32 API库确实适用于PHP,但是the documentation确实有一个红色的大部分,警告它是experimental。 YMMV。


1
投票

您可以使用php-wcli扩展名做到这一点。该扩展使用本地Windows功能而不是第三方ansi仿真器。 https://github.com/ZmotriN/php-wcli


0
投票

尝试一下:

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

我手上没有shell / php env,但这应该可以准确输出您想要的内容。


0
投票

从Win 10 1511开始,Windows现在支持ANSI转义序列。

https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences

© www.soinside.com 2019 - 2024. All rights reserved.