Bash脚本用php输出到浏览器

时间:2017-03-22 10:02:17

标签: php bash

我有一个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中获得的相同颜色的输出打印到浏览器?

1 个答案:

答案 0 :(得分:1)

由于输出中有颜色格式,您可以设置一个在cli和php之间转换的转换表。

quick-n-dirty 示例:

  1. 定义翻译
    $colors = ['[01;32m' => '<span style="color:green">', …, '[0m' => '</span>']

  2. 然后更换
    str_replace(array_keys($colors), array_values($colors))

  3. 注意:通常颜色格式以此格式定义\e[32mHello world,其中\e是ESCAPE字符的缩写,因此请查看定义颜色格式的个案形式

    工具方式:如果这样可行,您也可以尝试:aha Ansi HTML适配器