Категория «Программирование»

Радости и проблемы PHP 5.3

PHP 5.3 радует всеми своими последними изменениями. Правда, руки ещё не дошли до всяких замыканий и нэймспэйсов. Зато внушительный прирост производительности уже успел оценить. Вот только ветка 5.3 пока сырая и необходимо обновляться при всех новых апдейтах.

Вот, например, сегодня часа три промучался с решением проблемы, при которой во время ajax-запроса сервер не хочет отдавать значение $_SERVER['HTTP_X_REQUESTED_WITH']. При чём это было абсолютно рандомно, только для некоторых запросов, и никакие попытки дебага не помогали. Я, конечно, допускаю возможность того, что я сам где-то ошибся, но обновление с 5.3.2 до 5.3.3 сразу же решило проблему…

07.09.2010. Раздел: PHP. Ключевые слова: , .

Модуль авторизация через ВКонтакте для Kohana

После открытия API ВКонтакте сразу появилось несколько статей по созданию быстрой авторизации на своём сайте пользователей vk.com, в т.ч. и на PHP. Решил заняться написанием модуля авторизации для Kohana.

Документация по API очень хилая, пришлось изучать js-скрипты durov.at и переносить некоторый функционал на PHP (отправка POST-запроса с получением полной информации о пользователе, вместо ajax-овой реализации на durov.at). Самым сложным местом оказалось генерирование уникальной подписи запроса (как они объясняют, “подпись запроса по стандартной схеме”), т.к. этот процесс нормально не описан.

Модуль Vk умеет логиниться и получать информацию о пользователе и, соответственно, разлогиниваться. Информация хранится в cookie и в сессии. При желании, можно складывать всё в БД, запрашивать дополнительную информацию о пользователе и т.д..

Подробное описание на странице модуля в github. Не забываем создать свое приложение ВКонтакте для тестирования и записать полученные API ID, ключ приложения и защищенный ключ в config/vk.php, а также создать файл xd_receiver.htm по примеру в описании.

Скачать модуль авторизация через ВКонтакте для Kohana на PHP

17.05.2010. Раздел: PHP. Ключевые слова: , .

Drochilli

Сделали простенькую и стильную фришную тему для WordPressDrochilli. Поддерживает виджеты, древовидные комментарии, прикреплённые посты и все стандартные требования для WP-тем. Кроме того изменяет под себя стили плагина WP-PageNavi. Качайте :)

16.12.2009. Раздел: WordPress. Ключевые слова: , .

Коллекция php-скриптов

Сегодня до двух ночи сортировал свою коллекцию никому ненужных скриптов. Есть у меня хобби — скачивать всякие php-скрипты, чтобы подтырить идей-посмеяться над индусами-позавидовать умениям (нужное подчеркнуть). Так вот насобиралась огромная куча этого хлама (особенно много с phpclasses) и я сортировал его по функционалу. В итоге получилось 30 папок (ajax, db, http, mail и др.) на 120 метров (правда, более 80 метров занимают фреймворки всякие… толстый Zend такой толстый).

А вот на домашнем локальном компе есть ещё большая сборка скриптов, которые я качал, когда ещё только начинал изучать php. Помню тогда были популярны всякие каталоги, типа woweb.ru, где можно было откопать отобранный шлак. До сих пор сохранились раритеты, писанные ещё на php3… Хотя среди них есть те, на которых я учился — надо будет написать пост про это :)

08.01.2009. Раздел: PHP. Ключевые слова: , .

Отключение ревизий (post revisions) в WordPress

Не так давно в WordPress появилась функция сохранения всех версий постов с возможностью сравнения изменений и отката версий — ревизии — почти как в WikiPedia. Функция, безусловно, хорошая, но её реализация мне не нравится. А именно: запись всех ревизий в таблицу wp_posts вместе с основным контентом. В итоге таблица постов раздувается в 2-5 раз, что крайне негативно сказывается на работе системы. Ну зачем-зачем!? Ревизии нужны только в административном режиме — почему бы не сделать отдельную таблицу для этого?

И вообще, они имеют смысл лишь тогда, когда несколько человек управляют сайтом. Но нет даже стандартной возможности отключить запись ревизий. Приходится вносить изменения в файлы системы и удалять вручную ненужные записи в БД:

DELETE `a`, `b`, `c`
FROM `wp_posts` `a`
LEFT JOIN `wp_term_relationships` `b` ON (`a`.`ID` = `b`.`object_id`)
LEFT JOIN `wp_postmeta` `c` ON (`a`.`ID` = `c`.`post_id`)
WHERE `a`.`post_type` = "revision";

Сегодня на Ultra-Music удалил таким образом 660 записей — представляете!

Короче, решено было написать плагин, который при активации почистит таблицы, удалив (внимание!) все записи ревизий, и отключит возможность записи новых ревизий. Итак, вуаля, первый плагин, который я запостил на wordpress.org — Disable Revisions.

Если бы я выложил все плагины, которые писал, было б уже порядком двух десятков :)

07.12.2008. Раздел: WordPress. Ключевые слова: .

Фильтрация данных в PHP

Решил повозиться с php-шными функциями фильтрации данных, которые появились только с версии 5.2.0. Мои впечатления все время двигаются по кривой от «ого и уау» до «ыыы мдзя». Все-таки разработчики пишут язык не для людей. Или я просто не этот самый людь? Может кто-нибудь мне обяснит, какой filter или может быть flag необходимо поставить для поля, чтобы использовать filter_input_array для проверки заполнено ли поле вообще. Это не предусмотрено? Но тогда получается, что толку от этих фильтров мало… Или уже поздно и я много выпил?

17.05.2008. Раздел: PHP. Ключевые слова: , .

Рабочее…

Let me see your script
Down to the source…

© Оригинальный текст by Martin L. Gore. Depeche Mode «Stripped»

15.05.2008. Раздел: Программирование. Ключевые слова: , .

Список стран

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

В итоге, немного повозился и сделал свою табличку, где, кроме названий на двух языках, есть обозначения доменов и статус этих стран — целиком независимые или государства с другим статусом. Итого — 253 штуки. Короче, если надо — пользуйтесь (MySQL), найдете ошибки — сообщайте.

Скачать файл countries.sql.gz (5,93 Kb)

19.03.2008. Раздел: Программирование. Ключевые слова: , , , .

Обработка ЧПУ не через .htaccess

Сидел вчера весь день дома, т.к. простудился. Сидел и работал над маленькими проектиками. И вдруг решил написать класс для ЧПУ, который бы мог заменить несколько строчек в .htaccess, где можно было лишь оставить одно правило RewriteRule . /index.php [L]. Конечно, полностью универсального варианта для любых ссылок не придумаешь, но для моего вариант вполне подходит.

class _getLinks {
	function _parser(){
		$furl = parse_url($_SERVER[’REQUEST_URI’]);
		$url = explode(’/’, $furl[’path’]);
		$url = array_filter($url, "strlen");
		$url = array_filter($url, "urlencode");
		$url = array_reverse($url);
		return $url;
	}

	function _getCategory() {
		$res = $this->_parser();
		return $res[1];
	}

	function _getTitle() {
		$var = $this->_parser();
		$res = preg_split("/[.\\s]/",$var[0]);
		return $res[0];
	}
}

Можно использовать ссылки вида: http://server.com/category/subcategory/title.html и получать, соответственно, url категории и url новости, которые уже можно прогонять по базе…

P.S. Подумал немного… Абсолютно бесполезная и ненужная фигня получилася :(

18.02.2007. Раздел: PHP. Ключевые слова: .

Френд-лента для блога

Собственный блог — вещь удобная, все под рукой: и картинки, и тэги, и комментарии. Но не хватает френд-ленты. Конечно, абсолютное большинство пользуется либо онлайн-читалками RSS, либо программами, которые собирают и обрабатывают каналы на машине пользователя. Но вот мне читать блоги все-таки удобнее «у себя» на сайте. Ленты новостей я собираю через встроенную в Opera читалку, а за блогами теперь слежу на сайте.

Решение задачи довольно простое. На серевере устанавливается RSS-граббер и оболочка для вывода лент из базы данных. Чтобы не писать все с нуля, я воспользовался скриптом FeedOnFeeds, обновил MagpieRSS до последней версии и принялся за исправление недостаков FeedOnFeeds. В итоге прикрутил AJAX, чтобы быстро помечать прочитанными сообщения, добавил возможность ведения списка избранного, прикрутил иконки для лент, изменил много кода (в том числе, добавил авторизацию) и т.д. Теперь читать блоги также просто, как и френд-ленту в ЖЖ!

10.11.2006. Раздел: Скрипты. Ключевые слова: , , .