Как выделить синтаксис вывода функции exec() в PHP?

Я получаю выходные данные из функции exec() и хочу получить подсветка синтаксиса в результатах.

Необработанный вывод

Текущий вывод является необработанным:

* [35mmanu[m/etc/init.d/mast: line 105: /var/log/mast/mast-all.log: Permission denied 

Текст, например [35m, выделяется цветом в контексте оболочки.

Цель

Я хочу сделать это в HTML, у меня уже есть цветной сценарий оболочки.

выделенный синтаксис


person Édouard Lopez    schedule 27.07.2014    source источник
comment
Где вы хотите это сделать? Командная строка или HTML?   -  person Álvaro González    schedule 27.07.2014
comment
Какой код вы сейчас используете? Код управления есть? Как вывести значение из exec?   -  person MatsLindh    schedule 27.07.2014
comment
@ ÁlvaroG.Vicario Я хочу сделать это в HTML, у меня уже есть цветной сценарий оболочки.   -  person Édouard Lopez    schedule 27.07.2014
comment
@MatsLindh вот мой код для вывода результатов: gist.github.com/edouard-lopez/a68b9bc8e6f2931db214 довольно просто на данный момент   -  person Édouard Lopez    schedule 27.07.2014
comment
comment
Извините, ошибся с дублем.   -  person Álvaro González    schedule 27.07.2014


Ответы (2)


Вопрос Библиотека для преобразования экранов ANSI (форматирование терминала/цветовые коды) в HTML содержит ответ на этот вопрос.

Решение

ага — это Ansi для < em>HTML Адаптер, написанный на C. Он доступен в пакете Ubuntu и на github theZiz/aha.

Тогда мой код просто:

   exec("$command | aha", $output, $exitCode);
   foreach($output as $k => $line) {
       if ($line == '1') { continue; }
       echo "$line";
   }

Описание

   aha takes SGR-colored Input and prints W3C conform HTML-Code.
   aha reads the Input from a file or stdin and writes HTML-Code to stdout.

Есть несколько приятных вариантов:

  • --black , -b: черный фон и белый «стандартный цвет»
  • --word-wrap , -w: перенос длинных строк в html-файл. Это работает с браузерами, поддерживающими CSS3, а также со многими более старыми.
  • --no-header , -n: не включать заголовок в сгенерированный HTML, полезно для включения в полные файлы HTML.
person Édouard Lopez    schedule 27.07.2014

Вы также можете сделать это на чистом PHP благодаря symfony. используя библиотеку ansi-to-html. Он не имеет зависимостей, поэтому использовать symfony не требуется.

Вы можете установить его вручную, скопировав SensioLabs\AnsiConverter\AnsiToHtmlConverte.php в исходную папку или используя composer composer require sensiolabs/ansi-to-html.

После этого просто

require_once __DIR__.'/vendor/autoload.php';

use SensioLabs\AnsiConverter\AnsiToHtmlConverter;

$converter = new AnsiToHtmlConverter();

$html = $converter->convert($ansi);
person Community    schedule 05.08.2018