За чистый и ясный код!

Статьи на тему программирования под веб, используя PHP, MySQL, Jquery и многое другое

Как изменить цвет консоли в ZF2

Март23
Собрался в поход в горы, в лес, на байдарках? Для надежной связи советую использовать пыле / влагозащищенный телефон Runbo X5

Вывод данных, поиск решения

В последнее время я работаю на большом проекте и переписываю часть его ядра. Т.е. никакого 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

Статья просмотренна 386023 раз, зашло посетителей 25903

Работа с командной строкой в Kohana3 (KO3)

Апрель22
Cтолешница из искусственного камня своими руками, большой выбор столещниц, умывальник и подоконников.

Всем привет!

Есть некоторые задачи которые выполняются не по воле пользователей (зашел в браузер, набрал сайт и получил сайт — выполнилась какая-то задача), а по воле программистов, самих серверов в определенное время (cron). Писать о работе планировщика заданий не буду, а опишу здесь как правильно работать с командной строкой в Kohana3. Пока пишу опираясь на ОС Windows, когда буду обновлять на сервере сделаю обновление, если будет нужен, о работе с командной строкой в *nix подобных системах.

Первым делом заходим в командную строку, для этого нажимаем клавишу ВИНДОВС (те кто не знают, клавиша с флагом корпорации) + R. В появившемся окне пишем ручками cmd и нажимаем enter. Простите, что так подробно, но есть «уникумы» которые и такое сделать не могут. Далее переходи на диск, где установлен PHP, для этого просто пишем D:(у меня он на диске D), затем пишем команду перехода к папке, где расположен PHP cd php5, нажимаем enter. Для проверки работы самого PHP пишем тестовую команду, узнаем версию PHP: php -v, если на экране отобразилась нужная информация, значит все у нас получилось. Все показано на рисунке:

Команды для работы с PHP в командной строке

Команды для работы с PHP в командной строке

Вторым делом, избавляемся от данных из супер глобального массива $_SERVER. Опытные программисты знают, что при работе с командной строкой, всех тех индексов которые есть при работе через браузер просто НЕТ.
Вот выдержка из документации:

$_SERVER is an array containing information such as headers, paths, and script locations. The entries in this array are created by the web server.

Я, например, об этом знал, но забыл 🙁 и потратил 2 часа чтобы от этого избавится. В основном, для получения полного пути к папке где лежит запускаемый скрипт, я использовал переменную $_SERVER[‘DOCUMENT_ROOT’], но в самой Kohana есть ведь константа DOCROOT, которая и дает нам то, что нужно!!!

Третьим делом удостоверяемся, что у нас последняя версия фреймверка, т.к. из-за одного маленького, необязательного, опционально аргумента одной из ф-ций которая используется в классе CLI работа велась НЕКОРРЕКТНО! Или, если нет желания менять свою старую версию, тогда в файле:

/system/classes/kohana/cli.php

необходимо найти строки:

if (strpos($opt, '='))
{
	// Separate the name and value
	list ($opt, $value) = explode('=', $opt);
}

и заменить на следующий фрагмент кода

if (strpos($opt, '='))
{
	// Separate the name and value
	list ($opt, $value) = explode('=', $opt, 2);
}

Ну и наконец, как же работать с командной строкой.

Для работы пишем в нашей открытой командной строке, для Виндовс, если используете &, то все данные надо брать в кавычки:

D:\php5>php путь/до/index.php --uri=путь/из/роутера
--get="maxnag[]=1&maxnag[]=2" --post="intik=ddd"

обратите внимание! Строка пишется без переноса,
я это сделал чтобы влазило в видимую часть

B наш скрипт прекрасно переключается на классы и методы, которые описаны в роутере и передает данные, в данном случае это два массива $_GET и $_POST.

Вот что получилось:

Результат работы скрипта через командную строку

Результат работы скрипта через командную строку

У командной строки есть опции, в данный момент времени их 4, все они должны начинаться с ==, ну и пробел перед первым равно.

uri — строка которая идет после домена, например http://examlpe.com/test/one/1, uri=test/one/1
method — из документации: string method: GET, POST, PUT, DELETE, etc
get — данные для супер глобального массива $_GET
post — данные для супер глобального массива $_POST

не забываем, что для передачи массива надо использовать индексы массива
с квадратными скобками, как это написано в примере

Теперь можно смело в файле-конфигурации планировщика задач писать команды для работы с фреймверком Kohana из командной строки.

Статья просмотренна 62931 раз, зашло посетителей 18533

  

Облако тегов

cli csv dump events form Kohana locale models MySQL mysqldump orm PHP tools trigger validate газ газовый счетчик итоги кеширование переменные

Облако тегов плагина WP Cumulus для WordPress требует для просмотра Flash Player 9 или выше.

Я на твиттере!

  • у твиттера тоже бывают перерывы...

Календарь

Ноябрь 2017
Пн Вт Ср Чт Пт Сб Вс
« Июл    
 12345
6789101112
13141516171819
20212223242526
27282930  

Сейчас на сайте