我有一个php文件,目前在浏览器中输入bash脚本的输出:
<?php
ob_implicit_flush(true);
ob_end_flush();
$cmd = "./bash_script.sh";
$descriptorspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
2 => array("pipe", "w")
);
$process = proc_open($cmd, $descriptorspec, $pipes, realpath('./'), array());
echo '<pre>';
if (is_resource($process)) {
while ($s = fgets($pipes[1])) {
print $s;
}
}
echo '</pre>';
?>
但是,在CLI中,我的bash_script.sh的输出采用彩色格式,但在浏览器输出中没有格式,颜色不可见。
我使用命令ls --color
尝试了以下简单示例:
<?php
$cmd = "ls --color";
$descriptorspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
2 => array("pipe", "w")
);
$process = proc_open($cmd, $descriptorspec, $pipes, realpath('./'), array());
echo '<pre>';
if (is_resource($process)) {
while ($s = fgets($pipes[1])) {
print $s;
}
}
echo '</pre>';
?>
它的输出带有颜色代码(或至少我相信如此),即:
[01; 34mFolder1 [0m
[01; 34mFolder2 [0m
[01; 34mFolder3 [0米
[01; 32mFile1 [0m
[01; 34mFolder4 [0米
但是,使用我的脚本,这些颜色代码不会出现。
是否可以将我在CLI中获得的相同颜色的输出打印到浏览器?
答案 0 :(得分:1)
由于输出中有颜色格式,您可以设置一个在cli和php之间转换的转换表。
quick-n-dirty 示例:
定义翻译
$colors = ['[01;32m' => '<span style="color:green">', …, '[0m' => '</span>']
然后更换
str_replace(array_keys($colors), array_values($colors))
注意:通常颜色格式以此格式定义\e[32mHello world
,其中\e
是ESCAPE字符的缩写,因此请查看定义颜色格式的个案形式
工具方式:如果这样可行,您也可以尝试:aha, Ansi HTML适配器。