Понадобилось написать генератор картинок символов из различных шрифтов(всех что есть в системе). Всё просто - символ чёрного цвета в центре изображения на белом фоне, расфасованные по папочкам по названию шрифта и размеру - путь получится в виде symbols/FONT/SIZE/SYMBOL.jpg
php
Kohana: Контроллер для CLI
Kohana - в первую очередь фреймворк, т.е. каркас приложений, и не обязательно для Web. Результатом работы Веб приложения может быть не только гипертекст(HTML) но и JSON, XML, изображения, простой текст, так и вовсе ничего.
Понятно, что в зависимости от размера проекта и назначения проекта иногда приходиться писать демоны, которые занимаются рассылкой почты, бэкапами бд, различными пересчётами, транскодингом и много чем ещё...
Всё-таки оказалось, что kohana сильно ориентирован на вэб, хотя казалось бы, компоненты должны быть отдельно друг от друга.
Для написания консольного приложения(впрочем как и "демона") на основе Kohana нужно немного "допилить" контроллер. По-прежнему всю логику будет выполнять именно он, за одним исключением - если приложение и будет что то выводить - то это сообщения для отладки.
Важным моментом в этом является отлавливание ошибок. Стандартный отлов ошибок и исключений будет работать по-прежнему, но при малейшем E_NOTICE у вас в консоль отобразиться как минимум строк сто HTML кода - страница ошибки. Рано или поздно надоест прокручивать вверх и разбираться в коде - почему бы не представить ошибку в более понятном и читаемом виде?
PHP: Дерево меню из объектов
Предлагаю необычный способ построения дерева меню из объектов любой степени вложенности, используя преимущества php5 и вызов методов цепочкой
Парсинг даты Aug-24-2009 at 12:04 PDT
Мне поставили задачу распарсить один крупный иностранный сайт скандинавского аукциона. Время на страницах выглядит так: "Aug-24-2009 at 12:04 PDT", а нужно перевести его в стандартный unix timestamp.
Удобный доступ к конфигу/массиву
Долго думал как назвать пост. Иногда очень достают километровые строки для доступа к массиву(как правило километры - именно в конфиге), например:
$this->config->config['siteconfig']['someavatar']['normal']['height']
А хочется что - то более лаконичное, вроде
$this->_siteConfig('someavatar', 'normal', 'height');
или может даже
$this->_siteConfig('someavatar/normal/height')
CodeIgniter: добавляем фильтр. Часть 1
Прочитав небольшой обзор фреймворка yii навеяло желание сделать одной очень нужной для CodeIgniter вещи - фильтра. Подробнее о том что это. В кратце - метод который вызывается сразу после конструктора контроллера перед выполнением метода, который был выбран фреймворком на основании правил роутинга.
Область применения - самая разная: различные проверки прав, xss фильтрация, установка каких-либо полей класса, загрузка и инициализация моделей/библиотек/хелперов и прочего.
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; но в случае ассоциативного массива это бы не сработало.
CodeIgniter не умеет наследовать контроллеры и модели
Мой любимый фреймворк CodeIgniter, который я сейчас использую для написания проекта не предоставляет возможности использовать наследование моделей и контроллеров.
Разрешаем зависимости в классах
(навеянно gentoo)
Часто бывает ситуация, когда для работы класса нужно подгрузить другие классы или библиотеки. Обычно так и делаем: в конструкторе заргужаем и инициализируем если надо.
ИМХО, так не красиво. Получается засоряем конструктор. Хотя кому-как :)