В этой конструкции PHP: exec('echo -e test') echo воспринимает -e как аргумент который надо вывести, в итоге вывод <-e test>. Надо чтобы -е работало как опция. Нужно для цветного promt в консоли, типа PHP: readline(exec('echo -e "\033[32mcmd"')) . Че делать ?
не будет тебе цветного вывода на странице. html ≠ консоль — К.О. --- Добавлено --- P.S. и уж тем более не будет чтения stdin на веб-странице ))) тема не уровня профи, переношу по назначению. друг, веб-страница это html. передача данных между браузером и веб-сервером происходит по протоколу http. это совсем-совсем-совсем иные механизмы, чем текстовая консоль. --- Добавлено --- че делать? делать по веб-ному: через формы и переменные $_GET/$_POST. нельзя вот так просто скопировать пример для консольного скрипта и получить веб-шелл.
Я вообще не понял че и к чему ты написал. Я вообще где написал про веб-страницу, про html ?!! Я пишу cli приложение, lol. По моему из контекста понятно же вроде...И вангую что в разделе для новичков никто проблему не порешает, потому что новичков врядли волнует bash и ansi.
Есть console.php PHP: do { $cmd = readline(shell_exec('echo -e \033[32mcmd:')); readline_add_history($cmd); } while ($cmd !== 'q'); Нужно чтобы при запуске в консоле был цветной prompt.
Тогда можно посмотреть на готовы реализации и позаимствовать принцип. https://github.com/kevinlebrun/colors.php и другие ссылки по поиску php color cli
Блин ну вопрос же не в том как сделать что то цветным, вы можете вот это вставить в консоль и получите цвет Код (Text): echo -e "\033[32mcmd:" Вопрос в том что если вызов делать в php через какой нибудь shell_exec то не срабатывает опция -e, она воспринимается как аргумент для вывода....Вот здесь проблема, и это надо решать, а не как цвета делать.
PHP: <?php class Coloredcli{ private $foreground_colors = array(); private $background_colors = array(); public function __construct() { // Set up shell colors $this->foreground_colors['black'] = '0;30'; $this->foreground_colors['dark_gray'] = '1;30'; $this->foreground_colors['blue'] = '0;34'; $this->foreground_colors['light_blue'] = '1;34'; $this->foreground_colors['green'] = '0;32'; $this->foreground_colors['light_green'] = '1;32'; $this->foreground_colors['cyan'] = '0;36'; $this->foreground_colors['light_cyan'] = '1;36'; $this->foreground_colors['red'] = '0;31'; $this->foreground_colors['light_red'] = '1;31'; $this->foreground_colors['purple'] = '0;35'; $this->foreground_colors['light_purple'] = '1;35'; $this->foreground_colors['brown'] = '0;33'; $this->foreground_colors['yellow'] = '1;33'; $this->foreground_colors['light_gray'] = '0;37'; $this->foreground_colors['white'] = '1;37'; $this->background_colors['black'] = '40'; $this->background_colors['red'] = '41'; $this->background_colors['green'] = '42'; $this->background_colors['yellow'] = '43'; $this->background_colors['blue'] = '44'; $this->background_colors['magenta'] = '45'; $this->background_colors['cyan'] = '46'; $this->background_colors['light_gray'] = '47'; } // Returns colored string public function getColoredString($string, $foreground_color = null, $background_color = null) { $colored_string = ""; // Check if given foreground color found if (isset($this->foreground_colors[$foreground_color])) { $colored_string .= "\033[" . $this->foreground_colors[$foreground_color] . "m"; } // Check if given background color found if (isset($this->background_colors[$background_color])) { $colored_string .= "\033[" . $this->background_colors[$background_color] . "m"; } // Add string and end coloring $colored_string .= $string . "\033[0m"; return $colored_string; } // Returns all foreground color names public function getForegroundColors() { return array_keys($this->foreground_colors); } // Returns all background color names public function getBackgroundColors() { return array_keys($this->background_colors); } } Не благодари
Не буду, потому что это вообще не то.... --- Добавлено --- Кстати то, что ты скинул, - это говнокласс, и не благодари за бесплатное ревью ))
@Ridzhi сорри, похоже я неправильно тебя понял. давай проводить тесты: Код (Text): $ echo -e "\033[32mcmd" > 1.txt $ cat 1.txt cmd выводится цветное. т.е. конвеер сам по себе спецсимволы не портит. Код (Text): $ php -r "readfile('1.txt');" cmd цветное. т.е. php и его ввод-вывод спецсимволы не портит --- Добавлено --- 1.php PHP: ololo <?= "\033[31m some colored text \033[0m some white text \n"; ?> pysh-pysh Код (Text): $ php 1.php ololo some colored text some white text pysh-pysh выводит в цвете. --- Добавлено --- с кодами всё ок, только echo почему-то отказывается работать со своими параметрами хз. загадко! --- Добавлено --- похоже это фича самого шеловского echo — оно понимает что работает не с tty и ведёт себя иначе. видимо надо понять и простить. использовать другие пути.