ApacheПередача GET-параметров при переадресации

Допустим, что два или более сайта обслуживаются одним веб-приложением, но различать их всё же надо. Предположим, что разделение это происходит в файле .htaccess, путём определения параметра city.

1
2
3
4
5
6
7
8
9
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} ^pupersite\.kh\.ua$ [NC]
RewriteRule ^(.*)$ index.php?city=kharkov [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} ^pupersite\.zp\.ua$ [NC]
RewriteRule ^(.*)$ index.php?city=zaporozhye [L]

Проблема здесь в том, что происходит замена GET-параметров в строке запроса, т.е. по ссылке вида pupersite.zp.ua/?param1=1&param2=3 приложение параметров param1 и param2 не получит.

Zend FrameworkZend_Service_Twitter, последние записи twitter

Внимание, данная запись устарела. Описанное работоспособно для ZF 1.12.2 (и ниже) и twitter API 1.0, более актуальная запись находится тут → Zend_Service_Twitter, небольшие изменения

Обещался почти месяц назад описать внутренности кода, вытягивающего последние записи из твиттера, так что теперь придётся. Или забью и забуду.

Сложного ничего нет. Необходима лишь документация и гугл. Кроме того, нужно зарегистрировать своё веб-приложение на dev.twitter.com для того, чтобы получить consumer key и consumer secret. Там же вами для приложения будет указан callbackURL, который примет токен для авторизации.

Параметры для аутентификации поместим в application.ini

1
2
3
4
twitter.callbackUrl = "http://yourhost.com/twitter/callback"
twitter.siteUrl = "http://twitter.com/oauth"
twitter.consumerKey = "dadd58b24026011e2ce361"
twitter.consumerSecret = "ljsvb3fEM28e8c5a4fbb4f38bc378pNRzL5I1CrfV5B"

Далее создаём контроллер для твиттера приблизительно такого вида.

SVNВнешние зависимости SVN

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

С системой управления версий SVN работаю уже года полтора и, честно говоря, уже не представляю, как программировал до этого, но вот на внешние зависимости в svn наткнулся недавно. Суть в том, что файлы в одном каталоге подтягиваются системой из другого каталога или вообще из другого репозитория.

В частности, можно таким образом заполнять папку library, содержащую внешние библиотеки. Ниже пример с зендом (ради ссылки, собственно, весь пост и городится)

1
2
~$ svn propedit svn:externals library
http://framework.zend.com/svn/framework/standard/tags/release-1.12.0/library/Zend Zend

Ранее я либо коммитил внешние библиотеки в репозиторий, либо выставлял игнорирование на всё содержимое папки библиотек, а для обновления библиотек делал всё, как в каменном веке, т.е. сносил одни папки, скачивал и распаковывал другие, отправлял их в хранилище по новой и т.п. Теперь достаточно отредактировать свойство svn:externals

Кроме всего прочего, можно явно указать номера ревизий для внешних зависимостей. Это позволит избежать сюрпризов со стороны внешних хранилищ, когда после очередного обновления проект ломается, ведь код на внешних хранилищах, как правило, вам не подконтролен. Делается это приблизительно так.

1
2
~$ svn propedit svn:externals library
http://framework.zend.com/svn/framework/standard/tags/release-1.12.0/library/Zend@4321 Zend

P.S. Есть, конечно, и более новомодные штуки, вроде composer, но и до него руки дойдут уже скоро :)

Symfony Camp 2012

NewsSymfony Camp 2012

Посетил сабжевую конференцию. Остался более чем доволен, как и год назад. Ожидания оправдались, было много интересного. По большему счёту, слово Symfony можно безболезненно выкинуть из половины докладов, суть не изменится.

На снимке Kirill Chebunin — Rich model and layered architecture in Symfony2 application

робот спам

ВсячинаАтака роботов

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

Любопытство взяло вверх, был написан кусочек кода, сохраняющий эту бессмысленную спамную информацию в отдельную таблицу, а заодно и 500-ошибку убрал. Закоммитил изменения, залил на живой сайт. А с утра началось. Причём не в спамную таблицу, а сразу на сайт, чего ранее не наблюдалось ни разу. Причины сего явления мне неизвестны, такое чувство, что боты чему-то обучились.

Zend FrameworkОтправка писем в спул

Под отправкой писем в спул, я подразумеваю именно стратегию, когда реальная отправка письма происходит в фоновом процессе, а не в том, который отправку письма инициализировал. Поясню на примере данного блога. Некто отправляет комментарий, отвечая на комментарий другого пользователя. Этим действием запускается механизм, который отправляет письмо мне, т.е. хозяину блога, о том, что кто-то что-то написал. Дальше отправляется письмо тому, на чей комментарий ответили. Ну и, допустим, что письма о комментарии отправляются всем, кто подписался на комментарии к конкретному топику блога. Так вот зачем нашему некто ожидать, пока всем письма отправятся? В случае же массовых рассылок, когда адресатов сотни и тысячи, по другому и нельзя, по моему.

Решением данной ситуации и будет отправка писем в спул, т.е. помещение их в некую очередь, откуда они будут извлекаться фоновым скриптом, и рассылаться адресатам.

Неправильный каракурт

ФотографияПауки

Разбавлю немного всякое программирование. Фотографии из Крыма, верхняя свежая, а вторая - октября 2010 года. Похоже, что на обоих фотках одно и то же создание, в смысле видовой принадлежности :) @dimocritus подсказывает, что это Steatoda albomaculata, ложная вдова, так и буду считать.

И вторая под катом.

NewsАвтотвит, первая проба

Реализовал :) Теперь кроме инстаграма и жежешки ещё один робот будет писать твиты за меня. Собственно, этот автотвит будет первый, не считая многозначительного предыдущего "TEST-74"

В ближайшее время постараюсь описать, как это всё работает изнутри :)

NewsПоселил здесь свой твиттер

Поселил здесь записи из своего твиттера. Осознанно я там и не нахожусь, в основном автоматом туда записи генерируются или же как сборник полумусорных ссылок этот твиттер использую. Но вот написать для него модуль был просто обязан, хотя бы ради интереса - как это вообще делается? На очереди автоматический репост из блога в микроблог :-)

Вид который бы хотелось получить

ВёрсткаВёрстка для писем

Имеются в виду HTML-письма. Не думал, что могу наткнуться на какие-то специфические особенности данного дела, хотя на каких основаниях так считал - неизвестно.

Итак, постановка задачи: накалякать какое-нибудь простенькое HTML-письмо с минимальным оформлением, дабы выпендриться выделиться из общей массы текстовых писем. Наподобие того, что снизу