从PHP为Windows命令行输出着色
要在bash中输出彩色文本,请使用 如何在Windows命令行上输出彩色文本,特别是从PHP?请尝试以下方法:从PHP为Windows命令行输出着色,php,colors,cmd,Php,Colors,Cmd,要在bash中输出彩色文本,请使用 如何在Windows命令行上输出彩色文本,特别是从PHP?请尝试以下方法: echo chr(27); //Escape char. echo "5;31;47"; //Graphic mode blink red on white 我手上没有shell/php env,但这应该可以准确地输出您想要的内容。Windows 10本机支持终端中的颜色 在Windows 10之前,ANSI转义码在Windows命令提示符中本机不可用。对于较旧的窗口,您可以尝试:
echo chr(27); //Escape char.
echo "5;31;47"; //Graphic mode blink red on white
我手上没有shell/php env,但这应该可以准确地输出您想要的内容。Windows 10本机支持终端中的颜色 在Windows 10之前,ANSI转义码在Windows命令提示符中本机不可用。对于较旧的窗口,您可以尝试: 使用ansihack.exe修补cmd.exe: 在bash shell上,它的工作方式很有魅力,甚至还有一个php库: 如果这对你来说是一种过度的杀伤力,你可以尝试以下方法:
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";
在Windows命令提示符下,使用普通转义码似乎不起作用。与此相关的答案是,您需要使用Win32 API。PHP确实存在Win32 API库,但是有一个大的红色部分警告它是实验性的。YMMV.从以下位置下载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=>aqua
4=>红色
5=>紫色
6=>黄色
7=>浅灰色
8=>灰色
9=>浅蓝色
10=>浅绿色
11=>浅绿色
12=>浅红色
13=>浅紫色
14=>浅黄色
15=>white您可以使用php wcli扩展来实现。此扩展使用本机Windows功能,而不是第三方ansi仿真器 自Windows 10 1511以来,Windows现在支持ANSI转义序列。 您可以使用php从cmd运行以下代码,如果您运行的是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
?>
我正在运行Windows 10 1903,下面的屏幕截图显示了我在cmd中的脚本输出:
对于完整的转义序列参考:
问得好!虽然我认为cmd.exe显然无法做到这一点。啊,这似乎毕竟是可能的@佩卡,我也看过这部电影,但它的价值似乎太高了。不过出于好奇:多年来我一直在想同样的事情。普通的ANSI转义码过去在Windows 95/98中运行良好,但从未达到NT/2000。我以前使用过DOS 6.22,您需要加载ANSI.SYS以在DOS提示符中启用ASNI转义码。这是我得到的输出:←5.31;47@Andreas这似乎是Windows系统上返回的输出。提供的解决方案仅适用于Linux,无法在Windows CLI上实现,因为只有两种颜色16可用,但您只能同时使用两种颜色。是的,我在问题中特别指定我正在寻找Windows解决方案。很抱歉,您问题中的bash部分使我忽略了Windows部分。正如我告诉佩卡的那样,按照标准手段,这是不可行的。您需要编写一个全新的程序来输出颜色,然后,您必须将php输出导入其中,…如前所述:works。Win7上的me cmd.exe的输出为←[31mred←[37myes,AFAIK cmd.exe不能显示ANSI,php也不喜欢Win32控制台API。是的,我找到的所有材料都是使用转义序列定向到bash的。regsvr32.exe%systemroot%\system32\dynwrap.dll在Windows 7上不适用,64位。这对我有效,而不是@Sawny你应该将其作为完整答案发布,它对我在W上有效indows 8 x64!!!@Sawny-你是个救命恩人!我已经寻找这个答案很多年了。你的答案不仅会有颜色-而且-它还会做ANSI的其他事情-比如把光标移到一个新的位置!我只想哭。你不知道我找这个有多久了!这是上帝的恩赐。万分感谢!这个限定为仅链接答案-您是否可以发布描述解决方案的链接页面中的代码片段/文本片段?