从PHP着色Windows命令行输出

时间:2011-08-16 22:50:26

标签: php colors cmd

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

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

7 个答案:

答案 0 :(得分: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 => AQUA
4 =>红
5 =>紫色
6 =>黄
7 =>浅灰色 8 =>灰色
9 =>浅蓝色 10 =>浅绿色 11 =>浅水色 12 =>浅红色 13 =>浅紫色 14 =>浅黄色 15 =>白

答案 1 :(得分: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";

以下是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 :(得分:4)

从Win 10 1511开始,Windows中现在支持

ANSI转义序列。 您可以使用php从cmd运行以下代码,如果您运行的是Win10 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
?>

我正在运行Win 10 1903,下面的屏幕快照显示了我在cmd中的脚本输出:

enter image description here

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

答案 3 :(得分:2)

使用普通转义码似乎无法在Windows命令提示符下运行。与此相关的the other SO questions上的答案表示您需要使用Win32 API。 PHP确实存在Win32 API库,但是the documentation确实有一个大的红色部分警告,它是 experimental 。 YMMV。

答案 4 :(得分:1)

你可以用php-wcli扩展名来做。此扩展使用本机Windows功能而不是第三方ansi模拟器。 https://github.com/ZmotriN/php-wcli

答案 5 :(得分:0)

试试这个:

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

我手上没有shell / php环境,但这应该输出你想要的。

答案 6 :(得分:-1)

在 Windows 10(编译 19042.1110)PHP 7.4 上,这对我有用:

echo("\x1b[31m Memory Testing \x1b[0m \n\r");

转义序列是“\x1b[”

"\x1b[31m" 代表红色

"\x1b[0m" 表示“正常”颜色

颜色代码为here

希望能帮到你。