Как изменить цвет консоли в ZF2
Вывод данных, поиск решения
В последнее время я работаю на большом проекте и переписываю часть его ядра. Т.е. никакого UI я не вижу, все что я пишу запускается из командной строки. Соответственно вся техническая информация которая выводится в командную строку отображается в таком сероватом цвете, в цвете по-умолчанию. Информации много, я уже разделил её на блоки, обрамив каждый скобками, квадратными, фигурными, обычными…, но всё это не то. Нужно чтобы инфа выводилось в цвете, чтобы глаз сразу видел, что если красный цвет я вывожу, то где-то, скажем поломка, если желтый, то внимание ну и тд.
Занялся я этим вопросом, начал изучать как устроен терминал, какие последовательности команд надо ему подать, чтобы выводимая инфа была в определенном месте, в определенном цвете. Пишу я свою часть на ZF2 и я случайно там обнаружил, что есть классы которые реализованы для отображения данных в цвете, как для ОС семейства Линукс, так и Виндовс. Все решается очень просто!
Небольшой пример кода, который выводи инфу в цвете:
// Подключаем необходимые библиотеки use Zend\Console\Console as Console; use Zend\Console\ColorInterface as Color; //где-то, где вам надо просто используем классы, вывод строки с данными Console::getInstance()->write(" " . str_pad($i,6) . '- (') .Console::getInstance()->write(str_pad($percent,5), Color::LIGHT_CYAN) . Console::getInstance()->write('% (') . Console::getInstance()->write($countVendorHotelsOst, Color::LIGHT_MAGENTA) . Console::getInstance()->write(') w-') . Console::getInstance()->write(str_pad($weight,3), $weight < 100 ? Color::LIGHT_YELLOW : Color::YELLOW) . Console::getInstance()->write(') - ' . str_pad($vendorHotel->hotelCode . ' ', 40,'-') . '-> ' . $idHotel); // новая строка Console::getInstance()->writeLine();
В итоге получаю такую картинку
А вот как было без использования специальных классов:
Здесь я конечно картинку просто сделал черно-белой, и поэтому шрифт у некоторых цифр виден чуть жирнее, а по-дефолту и такого бы не было.
Что еще позволяют сделать эти классы
Позволяет работать с адаптерами терминалов
— Posix
— Virtual
— Windows
— Windows Ansicon
Работает с кодировками
— UTF-8
— UTF-8 Heavy
— ASCII
— ASCII Extended (расширенная)
— DECSG
Позволяет выводить данные
— в строку, друг за другом
— в строку с переводом на новую
— устанавливать цвет текста
— устанавливать цвет фона
— выводить данные в определенное место в консоли
— прятать/показывать курсор при работе скрипта
— очищать экран
— получать различные данные о консоли
Еще фишка этих классов по работе с консолью, они позволяют ждать ввода инфы при работающем скрипте, т.е. в консоле возможен диалог скрипта с разработчиком.
С такими возможностями есть шансы, что скоро кто-то напишет велосипед, аля FAR или MC на PHP.
ЗЫ Я нашел еще кучу классов, для работы с цветом, ссылки ниже.
ANSI Escape sequences
Как подключить вывод цвета в терминале Windows
PHP CLI Colors
Статья просмотренна 628557 раз, зашло посетителей 58569