Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从PHP为Windows命令行输出着色_Php_Colors_Cmd - Fatal编程技术网

从PHP为Windows命令行输出着色

从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命令提示符中本机不可用。对于较旧的窗口,您可以尝试:

要在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命令提示符中本机不可用。对于较旧的窗口,您可以尝试:

使用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的其他事情-比如把光标移到一个新的位置!我只想哭。你不知道我找这个有多久了!这是上帝的恩赐。万分感谢!这个限定为仅链接答案-您是否可以发布描述解决方案的链接页面中的代码片段/文本片段?