За последние 24 часа нас посетили 20258 программистов и 1719 роботов. Сейчас ищут 1778 программистов ...

exec('echo -e test')

Тема в разделе "PHP для новичков", создана пользователем Ridzhi, 5 июл 2016.

  1. Ridzhi

    Ridzhi Новичок

    С нами с:
    1 июл 2016
    Сообщения:
    12
    Симпатии:
    0
    В этой конструкции
    PHP:
    1. exec('echo -e test')
    echo воспринимает -e как аргумент который надо вывести, в итоге вывод <-e test>. Надо чтобы -е работало как опция. Нужно для цветного promt в консоли, типа
    PHP:
    1. readline(exec('echo -e "\033[32mcmd"'))
    . Че делать ?
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.114
    Симпатии:
    1.244
    Адрес:
    там-сям
    не будет тебе цветного вывода на странице. html ≠ консоль
    — К.О.
    --- Добавлено ---
    P.S. и уж тем более не будет чтения stdin на веб-странице )))
    тема не уровня профи, переношу по назначению.

    друг, веб-страница это html. передача данных между браузером и веб-сервером происходит по протоколу http. это совсем-совсем-совсем иные механизмы, чем текстовая консоль.
    --- Добавлено ---
    че делать? делать по веб-ному: через формы и переменные $_GET/$_POST. нельзя вот так просто скопировать пример для консольного скрипта и получить веб-шелл.
     
  3. Ridzhi

    Ridzhi Новичок

    С нами с:
    1 июл 2016
    Сообщения:
    12
    Симпатии:
    0
    Я вообще не понял че и к чему ты написал. Я вообще где написал про веб-страницу, про html ?!! Я пишу cli приложение, lol. По моему из контекста понятно же вроде...И вангую что в разделе для новичков никто проблему не порешает, потому что новичков врядли волнует bash и ansi.
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Нужно цвет из консоли читать?
     
  5. Ridzhi

    Ridzhi Новичок

    С нами с:
    1 июл 2016
    Сообщения:
    12
    Симпатии:
    0
    Есть console.php
    PHP:
    1. do {
    2.     $cmd = readline(shell_exec('echo -e \033[32mcmd:'));
    3.     readline_add_history($cmd);
    4. } while ($cmd !== 'q');
    Нужно чтобы при запуске в консоле был цветной prompt.
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Тогда можно посмотреть на готовы реализации и позаимствовать принцип.
    https://github.com/kevinlebrun/colors.php
    и другие ссылки по поиску php color cli
     
  7. Ridzhi

    Ridzhi Новичок

    С нами с:
    1 июл 2016
    Сообщения:
    12
    Симпатии:
    0
    Блин ну вопрос же не в том как сделать что то цветным, вы можете вот это вставить в консоль и получите цвет
    Код (Text):
    1. echo -e "\033[32mcmd:"
    Вопрос в том что если вызов делать в php через какой нибудь shell_exec то не срабатывает опция -e, она воспринимается как аргумент для вывода....Вот здесь проблема, и это надо решать, а не как цвета делать.
     
  8. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    PHP:
    1. <?php
    2. class Coloredcli{
    3.     private $foreground_colors = array();
    4.     private $background_colors = array();
    5.     public function __construct() {
    6.         // Set up shell colors
    7.         $this->foreground_colors['black'] = '0;30';
    8.         $this->foreground_colors['dark_gray'] = '1;30';
    9.         $this->foreground_colors['blue'] = '0;34';
    10.         $this->foreground_colors['light_blue'] = '1;34';
    11.         $this->foreground_colors['green'] = '0;32';
    12.         $this->foreground_colors['light_green'] = '1;32';
    13.         $this->foreground_colors['cyan'] = '0;36';
    14.         $this->foreground_colors['light_cyan'] = '1;36';
    15.         $this->foreground_colors['red'] = '0;31';
    16.         $this->foreground_colors['light_red'] = '1;31';
    17.         $this->foreground_colors['purple'] = '0;35';
    18.         $this->foreground_colors['light_purple'] = '1;35';
    19.         $this->foreground_colors['brown'] = '0;33';
    20.         $this->foreground_colors['yellow'] = '1;33';
    21.         $this->foreground_colors['light_gray'] = '0;37';
    22.         $this->foreground_colors['white'] = '1;37';
    23.  
    24.         $this->background_colors['black'] = '40';
    25.         $this->background_colors['red'] = '41';
    26.         $this->background_colors['green'] = '42';
    27.         $this->background_colors['yellow'] = '43';
    28.         $this->background_colors['blue'] = '44';
    29.         $this->background_colors['magenta'] = '45';
    30.         $this->background_colors['cyan'] = '46';
    31.         $this->background_colors['light_gray'] = '47';
    32.     }
    33.     // Returns colored string
    34.     public function getColoredString($string, $foreground_color = null, $background_color = null) {
    35.         $colored_string = "";
    36.  
    37.         // Check if given foreground color found
    38.         if (isset($this->foreground_colors[$foreground_color])) {
    39.             $colored_string .= "\033[" . $this->foreground_colors[$foreground_color] . "m";
    40.         }
    41.         // Check if given background color found
    42.         if (isset($this->background_colors[$background_color])) {
    43.             $colored_string .= "\033[" . $this->background_colors[$background_color] . "m";
    44.         }
    45.  
    46.         // Add string and end coloring
    47.         $colored_string .=  $string . "\033[0m";
    48.  
    49.         return $colored_string;
    50.     }
    51.  
    52.     // Returns all foreground color names
    53.     public function getForegroundColors() {
    54.         return array_keys($this->foreground_colors);
    55.     }
    56.  
    57.     // Returns all background color names
    58.     public function getBackgroundColors() {
    59.         return array_keys($this->background_colors);
    60.     }
    61. }
    Не благодари
     
  9. Ridzhi

    Ridzhi Новичок

    С нами с:
    1 июл 2016
    Сообщения:
    12
    Симпатии:
    0
    Не буду, потому что это вообще не то....
    --- Добавлено ---
    Кстати то, что ты скинул, - это говнокласс, и не благодари за бесплатное ревью ))
     
  10. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.114
    Симпатии:
    1.244
    Адрес:
    там-сям
    @Ridzhi сорри, похоже я неправильно тебя понял.

    давай проводить тесты:
    Код (Text):
    1. $ echo -e "\033[32mcmd" > 1.txt
    2. $ cat 1.txt
    3. cmd
    выводится цветное. т.е. конвеер сам по себе спецсимволы не портит.

    Код (Text):
    1. $ php -r "readfile('1.txt');"
    2. cmd
    цветное. т.е. php и его ввод-вывод спецсимволы не портит
    --- Добавлено ---
    1.php
    PHP:
    1. ololo
    2. <?= "\033[31m some colored text \033[0m some white text \n"; ?>
    3. pysh-pysh
    Код (Text):
    1. $ php 1.php
    2. ololo
    3.  some colored text  some white text
    4. pysh-pysh
    выводит в цвете.
    --- Добавлено ---
    с кодами всё ок, только echo почему-то отказывается работать со своими параметрами :(

    хз. загадко!
    --- Добавлено ---
    похоже это фича самого шеловского echo — оно понимает что работает не с tty и ведёт себя иначе.
    видимо надо понять и простить. использовать другие пути.
     
  11. Ridzhi

    Ridzhi Новичок

    С нами с:
    1 июл 2016
    Сообщения:
    12
    Симпатии:
    0
    Бинго ! ) Вот и я сижу гадаю, че за прикольчик...