У меня есть команда, например «git diff», которая выводит раскрашенный результат, когда я запускаю его с терминала.
Теперь я хочу вызвать эту команду из скрипта PHP CLI и отобразить на консоли раскрашенный результат. Я попытался с exec (), system (), passthru (), но во всех случаях результат был преобразован в простой черно-белый текст.
Есть ли способ сохранить цвет стандартного результата? Если нет, кто-то знает, почему эта информация пропадает?
По всей вероятности, команда, которую вы запускаете, проверяет, является ли вывод терминалом и не раскрашивает его, если это не так. Обычно есть способ заставить его, но это будет специфично для самой команды; в случае git diff
вы можете указать --color=always
.
Проверьте этот класс: 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; }