I have a command, for example 'git diff' that output a colorized result when I run it from the terminal.
Now, I want to call that command from a CLI php script and display in the console the colorized result. I have try with exec(), system(), passthru() but in all case the output has been converted to plain black and white text.
Is there a way to preserve the color of the standard result? If not, does someone know why this information get lost?
In all likelihood the command you are running is checking to see if output is to a terminal and not colorizing it if it isn't. There is usually a way to force it, but that's going to be specific to the command itself; in the case of git diff
, you can specify --color=always
.
Check this class: https://gist.github.com/2390007
public static function color($text, $foreground, $background = null)
{
if (static::is_windows())
{
return $text;
}
if ( ! array_key_exists($foreground, static::$foreground_colors))
{
throw new \FuelException('Invalid CLI foreground color: '.$foreground);
}
if ( $background !== null and ! array_key_exists($background, static::$background_colors))
{
throw new \FuelException('Invalid CLI background color: '.$background);
}
$string = "\033[".static::$foreground_colors[$foreground]."m";
if ($background !== null)
{
$string .= "\033[".static::$background_colors[$background]."m";
}
$string .= $text."\033[0m";
return $string;
}