PHP: Генератор картинок шрифтов

Символ из шрифта на картинке
Понадобилось написать генератор картинок символов из различных шрифтов(всех что есть в системе). Всё просто - символ чёрного цвета в центре изображения на белом фоне, расфасованные по папочкам по названию шрифта и размеру - путь получится в виде symbols/FONT/SIZE/SYMBOL.jpg

Read more

Kohana: Контроллер для CLI

Kohana - в первую очередь фреймворк, т.е. каркас приложений, и не обязательно для Web. Результатом работы Веб приложения может быть не только гипертекст(HTML) но и JSON, XML, изображения, простой текст, так и вовсе ничего.

Понятно, что в зависимости от размера проекта и назначения проекта иногда приходиться писать демоны, которые занимаются рассылкой почты, бэкапами бд, различными пересчётами, транскодингом и много чем ещё...

Всё-таки оказалось, что kohana сильно ориентирован на вэб, хотя казалось бы, компоненты должны быть отдельно друг от друга.

Для написания консольного приложения(впрочем как и "демона") на основе Kohana нужно немного "допилить" контроллер. По-прежнему всю логику будет выполнять именно он, за одним исключением - если приложение и будет что то выводить - то это сообщения для отладки.

Важным моментом в этом является отлавливание ошибок. Стандартный отлов ошибок и исключений будет работать по-прежнему, но при малейшем E_NOTICE у вас в консоль отобразиться как минимум строк сто HTML кода - страница ошибки. Рано или поздно надоест прокручивать вверх и разбираться в коде - почему бы не представить ошибку в более понятном и читаемом виде?

Read more

Удобный доступ к конфигу/массиву

Долго думал как назвать пост. Иногда очень достают километровые строки для доступа к массиву(как правило километры - именно в конфиге), например:

$this->config->config['siteconfig']['someavatar']['normal']['height']

А хочется что - то более лаконичное, вроде

$this->_siteConfig('someavatar', 'normal', 'height');

или может даже

$this->_siteConfig('someavatar/normal/height')

Read more

CodeIgniter: добавляем фильтр. Часть 1

Прочитав небольшой обзор фреймворка yii навеяло желание сделать одной очень нужной для CodeIgniter вещи - фильтра. Подробнее о том что это. В кратце - метод который вызывается сразу после конструктора контроллера перед выполнением метода, который был выбран фреймворком на основании правил роутинга.

Область применения - самая разная: различные проверки прав, xss фильтрация, установка каких-либо полей класса, загрузка и инициализация моделей/библиотек/хелперов и прочего.

Read more

foreach: признак последней итерации

[cc lang="php"]
// пусть есть массив $spots, c любмыми типами ключей
$last_key = end(array_keys($spots));
foreach($spots as $k => $spot) {
$isLast = ($k === $last_key);
....
// что то делаем
}
[/cc]
Нужно просто получить последний ключ массива а потом сравнивать очередной ключ при каждой итерации. Можно конечно использовать $last_key = count($spots) - 1; но в случае ассоциативного массива это бы не сработало.

Разрешаем зависимости в классах

(навеянно gentoo)
Часто бывает ситуация, когда для работы класса нужно подгрузить другие классы или библиотеки. Обычно так и делаем: в конструкторе заргужаем и инициализируем если надо.

ИМХО, так не красиво. Получается засоряем конструктор. Хотя кому-как :)

Read more