<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" ><channel><title>Rpsl &#187; php</title> <atom:link href="http://blog.rpsl.info/tag/php/feed" rel="self" type="application/rss+xml" /><link>http://blog.rpsl.info</link> <description>Очень остроумная надпись</description> <lastBuildDate>Sat, 31 Jul 2010 19:41:55 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.0</generator> <item><title>Кэширование MySQL&#160;&#8212; MySimpleCache</title><link>http://blog.rpsl.info/2010/07/kehshirovanie-mysql-mysimplecache.html</link> <comments>http://blog.rpsl.info/2010/07/kehshirovanie-mysql-mysimplecache.html#comments</comments> <pubDate>Tue, 06 Jul 2010 17:33:43 +0000</pubDate> <dc:creator>Rpsl</dc:creator> <category><![CDATA[CMS]]></category> <category><![CDATA[Полезное]]></category> <category><![CDATA[cache]]></category> <category><![CDATA[memcache]]></category> <category><![CDATA[mysimplecache]]></category> <category><![CDATA[mysql]]></category> <category><![CDATA[php]]></category> <category><![CDATA[sql]]></category><guid isPermaLink="false">http://blog.rpsl.info/?p=2294</guid> <description><![CDATA[Собственно возвращаясь к прошлому посту&#160;&#8212; "PHP Кэширование MySQL, хочу сказать спасибо всем, кто помог советами. По разным причинам, спустя несколько дней после прошлого поста, я все таки сел и написал этот велосипед. Перевел на него десяток говносайтов и наблюдал две недели за их поведением. Проблем не заметил, все работает хорошо, нагрузка на базу данных значительно [...]]]></description> <content:encoded><![CDATA[<p>Собственно возвращаясь к прошлому посту&nbsp;&mdash; <strong>"<a href="http://blog.rpsl.info/2010/06/php-keshirovanie-mysql.html">PHP Кэширование MySQL</a></strong>, хочу сказать спасибо всем, кто помог советами.</p><p>По разным причинам, спустя несколько дней после прошлого поста, я все таки сел и написал этот велосипед. Перевел на него десяток говносайтов и наблюдал две недели за их поведением.</p><p>Проблем не заметил, все работает хорошо, нагрузка на базу данных значительно упала, а это именно то, что и требовалось.</p><p>Проект поселился на <a href="http://github.com/Rpsl/MySimpleCache">github.com</a>, маловероятно, но возможно он еще будет обновляться, так что актуальная версия всегда там.<br /> <a href="http://github.com/Rpsl/MySimpleCache"><img src="http://blog.rpsl.info/wp-content/uploads/2010/07/mysimplecache.png" alt="mysimplecache Кэширование MySQL   MySimpleCache" width="214" height="119" class="aligncenter size-full wp-image-2295" title="Кэширование MySQL   MySimpleCache" /></a></p><p>Логика работы проста. Что бы <strong>закэшировать MySQL</strong> запрос, вы подключаете класс и делаете замену стандартных вызовов, на вызовы функций кеширования. Они являются синонимами, а значит вам нужно только перед вызовом дописать название класса.</p><p>При вызове mysql_query, скрипт попытается закешировать данный запрос и либо вернет ссылку на закешированный массив, либо вернет ссылку на ресурс.</p><p>Все последующие операции будут проверять является ли ссылка ресурсом и уже по обстоятельствам будут либо доставать данные из <strong><a href="http://blog.rpsl.info/tag/memcache" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with memcache">memcache</a></strong>, либо получать их напрямую.</p><p>Буду рад любым комментариям и повторяю еще раз, что крайне не рекомендую прикручивать этот скрипт на сайты которые чуть более серьезнее чем сателит.</p><p>Сюда приходят по следующим фразам</p><ul><li><a href="http://blog.rpsl.info/2010/06/slim-otvet-gufu-slim-spice-bape.html">ответ на spice baby</a></li><li><a href="http://blog.rpsl.info/2010/06/slim-otvet-gufu-slim-spice-bape.html">spice baby kommentarii</a></li><li><a href="http://blog.rpsl.info/2010/06/slim-otvet-gufu-slim-spice-bape.html">spice baby комменты</a></li><li><a href="http://blog.rpsl.info/tag/mootools">плагины mootools</a></li><li><a href="http://blog.rpsl.info/2009/01/google-disk-aka-gdrive.html">google disk</a></li></ul>Тэги: <a href="http://blog.rpsl.info/tag/cache" title="cache" rel="tag nofollow">cache</a>, <a href="http://blog.rpsl.info/tag/memcache" title="memcache" rel="tag nofollow">memcache</a>, <a href="http://blog.rpsl.info/tag/mysimplecache" title="mysimplecache" rel="tag nofollow">mysimplecache</a>, <a href="http://blog.rpsl.info/tag/mysql" title="mysql" rel="tag nofollow">mysql</a>, <a href="http://blog.rpsl.info/tag/php" title="php" rel="tag nofollow">php</a>, <a href="http://blog.rpsl.info/tag/sql" title="sql" rel="tag nofollow">sql</a><br /><h4>Похожие записи</h4><ul class="st-related-posts"><li><a href="http://blog.rpsl.info/2010/06/php-keshirovanie-mysql.html" title="PHP Кеширование Mysql (27 Июнь  2010)">PHP Кеширование Mysql</a> (1)</li><li><a href="http://blog.rpsl.info/2009/07/sql-joins-vidy-tipy-razlichiya.html" title="SQL Joins Виды, типы, различия (27 Июль  2009)">SQL Joins Виды, типы, различия</a> (0)</li><li><a href="http://blog.rpsl.info/2010/03/chat-dlya-vbulletin.html" title="Чат для vbulletin (5 Март  2010)">Чат для vbulletin</a> (3)</li><li><a href="http://blog.rpsl.info/2009/01/cvetovaya-identifikaciya.html" title="Цветовая идентификация (13 Январь  2009)">Цветовая идентификация</a> (1)</li><li><a href="http://blog.rpsl.info/2009/04/integraciya-phpbb3-s-lyubym-sajtom.html" title="Интеграция phpbb3 с любым сайтом (24 Апрель  2009)">Интеграция phpbb3 с любым сайтом</a> (19)</li></ul>]]></content:encoded> <wfw:commentRss>http://blog.rpsl.info/2010/07/kehshirovanie-mysql-mysimplecache.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>PHP Кеширование Mysql</title><link>http://blog.rpsl.info/2010/06/php-keshirovanie-mysql.html</link> <comments>http://blog.rpsl.info/2010/06/php-keshirovanie-mysql.html#comments</comments> <pubDate>Sun, 27 Jun 2010 12:04:12 +0000</pubDate> <dc:creator>Rpsl</dc:creator> <category><![CDATA[CMS]]></category> <category><![CDATA[Заметки]]></category> <category><![CDATA[cache]]></category> <category><![CDATA[memcache]]></category> <category><![CDATA[mysql]]></category> <category><![CDATA[php]]></category><guid isPermaLink="false">http://blog.rpsl.info/?p=1401</guid> <description><![CDATA[Други, мне требуется ваша помощь или совет. Такая ситуация, есть большая куча сайтов, написанных давным-давно. Они представляют из себя кучу файлов, в которых идет в перемешку php/html/sql запросы. Ни о каких современных паттернах программирования там речи нету. Переписывать эти сайты нет ни времени, ни желания, но они ужастно грузят БД. Задача добавить на эти сайты [...]]]></description> <content:encoded><![CDATA[<p><img src="http://blog.rpsl.info/wp-content/uploads/2010/06/mysql-logo.png" alt="mysql logo PHP Кеширование Mysql" title="mysql-logo" width="200" height="103" class="alignleft size-full wp-image-1426" /></p><p>Други, мне требуется ваша помощь или совет.</p><p>Такая ситуация, есть большая куча сайтов, написанных давным-давно. Они представляют из себя кучу файлов, в которых идет в перемешку <a href="http://blog.rpsl.info/tag/php" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with php">php</a>/html/<a href="http://blog.rpsl.info/tag/sql" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with sql">sql</a> запросы. Ни о каких современных паттернах программирования там речи нету. Переписывать эти сайты нет ни времени, ни желания, но они ужастно грузят БД.</p><p>Задача добавить на эти сайты кеширование <a href="http://blog.rpsl.info/tag/sql" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with sql">sql</a> запросов. Переписывать их и править дело очень не благодарное и потребует кучу времени.</p><p>Я поразмышлял и решил, что проще всего будет написать класс, который будет содержать в себе ф-ции синомы всех ф-ций для работы с бд.</p><blockquote><p>mysql_query<br /> mysql_fetch_assoc<br /> mysql_fetch_array<br /> mysql_num_rows<br /> mysql_result<br /> ...</p></blockquote><p>Фишка в том, что они должны внутри себя пробовать кешировать запрос и либо возвразать результат запроса, либо возвращать закешированный результат.</p><p>Данная идея мне кажется крутой, так как, она позволит легкой автозаменой включить кеширование на сайте и лишь потом в нужных местах его допилить.</p><p>Теперь главное, я уверен что должны быть аналоги, а я пытаюсь изобрести велосипед. Возможно вы сталкивались с такими вещами и их решениями. Ну или просто можете высказать свое мнение по этому поводу. Не поленитесь, буду очень благодарен.</p>Тэги: <a href="http://blog.rpsl.info/tag/cache" title="cache" rel="tag nofollow">cache</a>, <a href="http://blog.rpsl.info/tag/memcache" title="memcache" rel="tag nofollow">memcache</a>, <a href="http://blog.rpsl.info/tag/mysql" title="mysql" rel="tag nofollow">mysql</a>, <a href="http://blog.rpsl.info/tag/php" title="php" rel="tag nofollow">php</a><br /><h4>Похожие записи</h4><ul class="st-related-posts"><li><a href="http://blog.rpsl.info/2010/07/kehshirovanie-mysql-mysimplecache.html" title="Кэширование MySQL&nbsp;&mdash; MySimpleCache (6 Июль  2010)">Кэширование MySQL&nbsp;&mdash; MySimpleCache</a> (0)</li><li><a href="http://blog.rpsl.info/2010/03/chat-dlya-vbulletin.html" title="Чат для vbulletin (5 Март  2010)">Чат для vbulletin</a> (3)</li><li><a href="http://blog.rpsl.info/2009/01/cvetovaya-identifikaciya.html" title="Цветовая идентификация (13 Январь  2009)">Цветовая идентификация</a> (1)</li><li><a href="http://blog.rpsl.info/2009/04/integraciya-phpbb3-s-lyubym-sajtom.html" title="Интеграция phpbb3 с любым сайтом (24 Апрель  2009)">Интеграция phpbb3 с любым сайтом</a> (19)</li><li><a href="http://blog.rpsl.info/2009/02/govnokoding-ili-ne-xochu.html" title="Говнокодинг или &laquo;не хочу!&raquo; (2 Февраль  2009)">Говнокодинг или &laquo;не хочу!&raquo;</a> (1)</li></ul>]]></content:encoded> <wfw:commentRss>http://blog.rpsl.info/2010/06/php-keshirovanie-mysql.html/feed</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Чат для vbulletin</title><link>http://blog.rpsl.info/2010/03/chat-dlya-vbulletin.html</link> <comments>http://blog.rpsl.info/2010/03/chat-dlya-vbulletin.html#comments</comments> <pubDate>Fri, 05 Mar 2010 08:47:26 +0000</pubDate> <dc:creator>Rpsl</dc:creator> <category><![CDATA[CMS]]></category> <category><![CDATA[centr]]></category> <category><![CDATA[php]]></category> <category><![CDATA[vbulletin]]></category> <category><![CDATA[форум]]></category><guid isPermaLink="false">http://blog.rpsl.info/?p=489</guid> <description><![CDATA[Главное что бы было желания, все остальное уже дело техники. Очень давно я хотел сделать чатик для нашего уютного форума. Если кто-то помнит, то он даже был там очень давно, но тогда по техническим и эстетическим причинам его пришлось убрать. Несколько выходных назад я решил вернуться к этому вопросу, скачал стандартный чат для форума, но [...]]]></description> <content:encoded><![CDATA[<p><i>Главное что бы было желания, все остальное уже дело техники.</i></p><div style="text-align:center;"><a href="http://blog.rpsl.info/wp-content/uploads/2010/03/Снимок-экрана-2010-03-05-в-11.37.50.png" class="highslide-image" onclick="return hs.expand(this);"><img src="http://blog.rpsl.info/wp-content/uploads/2010/03/Снимок-экрана-2010-03-05-в-11.37.50.png" alt="Снимок экрана 2010-03-05 в 11.37.50.png" border="0" width="400" height="300" title="Чат для vbulletin" /></a></div><p>Очень давно я хотел сделать чатик для нашего уютного форума. Если кто-то помнит, то он даже был там очень давно, но тогда по техническим и эстетическим причинам его пришлось убрать.</p><p>Несколько выходных назад я решил вернуться к этому вопросу, скачал стандартный чат для форума, но он как и все остальные подобные реализации являлся унылым говном. Это глупое окошко которое предлагается разместить после навбара или перед футером... Решение было принято моментально, а бутылка ликера добавила мне решительности.</p><p>В итоге, просидев около 4 часов над сорцами чата и переделкой его стилей у нас получилась отличная консоль, которая открывается&nbsp;&mdash; закрывается по нажатию горячих клавиш и доступна всем зарегистрированным пользователям.<br /> Единственная проблема с которой я столкнулся&nbsp;&mdash; это кривое отображение в ie6, но решать её, по своим внутренним убеждениям я не собираюсь.</p><p>Живой пример на <a href="http://forum.centrgroup.ru">http://forum.centrgroup.ru</a> (для зарегистрированных)<br /> Если кому интересна сама реализация&nbsp;&mdash; пишите в комменты, постараюсь рассказать.</p>Тэги: <a href="http://blog.rpsl.info/tag/centr" title="centr" rel="tag nofollow">centr</a>, <a href="http://blog.rpsl.info/tag/php" title="php" rel="tag nofollow">php</a>, <a href="http://blog.rpsl.info/tag/vbulletin" title="vbulletin" rel="tag nofollow">vbulletin</a>, <a href="http://blog.rpsl.info/tag/forum" title="форум" rel="tag nofollow">форум</a><br /><h4>Похожие записи</h4><ul class="st-related-posts"><li><a href="http://blog.rpsl.info/2009/11/twitter-it-dlya-vbulletin.html" title="Twitter it для vBulletin (4 Ноябрь  2009)">Twitter it для vBulletin</a> (15)</li><li><a href="http://blog.rpsl.info/2009/04/integraciya-phpbb3-s-lyubym-sajtom.html" title="Интеграция phpbb3 с любым сайтом (24 Апрель  2009)">Интеграция phpbb3 с любым сайтом</a> (19)</li><li><a href="http://blog.rpsl.info/2009/01/centrgroupru.html" title="centrgroup.ru (17 Январь  2009)">centrgroup.ru</a> (0)</li><li><a href="http://blog.rpsl.info/2009/06/chelovecheskij-faktor.html" title="Человеческий фактор (8 Июнь  2009)">Человеческий фактор</a> (3)</li><li><a href="http://blog.rpsl.info/2009/01/cvetovaya-identifikaciya.html" title="Цветовая идентификация (13 Январь  2009)">Цветовая идентификация</a> (1)</li></ul>]]></content:encoded> <wfw:commentRss>http://blog.rpsl.info/2010/03/chat-dlya-vbulletin.html/feed</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Livejournal in google reader</title><link>http://blog.rpsl.info/2009/12/livejournal-in-google-reader.html</link> <comments>http://blog.rpsl.info/2009/12/livejournal-in-google-reader.html#comments</comments> <pubDate>Wed, 23 Dec 2009 13:28:52 +0000</pubDate> <dc:creator>Rpsl</dc:creator> <category><![CDATA[Заметки]]></category> <category><![CDATA[Полезное]]></category> <category><![CDATA[Google]]></category> <category><![CDATA[livejournal]]></category> <category><![CDATA[php]]></category> <category><![CDATA[rss]]></category><guid isPermaLink="false">http://blog.rpsl.info/?p=471</guid> <description><![CDATA[Давным давно, в одной далекой галактике, я сделал себе standalone блог и livejournal, потихоньку начал пропадать из списка сайтов которые я посещаю ежедневно. Учитывая, что я читаю около пары сотен человек, то вариант захождения раз в неделю и чтения всех записей начинал сильно утомлять, т.к. трудно осилить пару сотен постов. В то же время я [...]]]></description> <content:encoded><![CDATA[<p><img src="http://blog.rpsl.info/wp-content/uploads/2009/12/90453.jpg" alt="90453 Livejournal in google reader" title="livejournal to google reader" width="340" height="255" class="aligncenter size-full wp-image-479" /><br /> Давным давно, в одной далекой галактике, я сделал себе standalone блог и <strong><a href="http://blog.rpsl.info/tag/livejournal" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with livejournal">livejournal</a></strong>, потихоньку начал пропадать из списка сайтов которые я посещаю ежедневно. Учитывая, что я читаю около пары сотен человек, то вариант захождения раз в неделю и чтения всех записей начинал сильно утомлять, т.к. трудно осилить пару сотен постов. В то же время я начал активно пользоваться <strong>google reader</strong>&#39;ом для чтения <strong>rss</strong> каналов сайтов которые мне интересны.</p><blockquote><p>К сожалению и по не сильно понятным мне причинам, <strong><a href="http://blog.rpsl.info/tag/livejournal" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with livejournal">livejournal</a></strong> не даёт читать френделенту через rss, но зато он позволяет подписаться на rss конкретных пользователей которые вам интересны. В то же время, в <strong>Google reader</strong> есть возможность сортировать каналы по папкам, и если читать сразу всю папку, то получается как раз подобие френдленты. В целом всё хорошо, только этот вариант не подходит тем, у кого друзья пишут под замочные записи, но и тут тоже <a href="http://blog.rpsl.info/tag/livejournal" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with livejournal">livejournal</a> предусмотрел вариант аутентификации, для получения ленты с закрытыми записями.</p></blockquote><p>В интернете есть различные серивисы, включая pipes.yahoo.com и freemyfeed.com, которые могут выступать в роли прокси, но меня не устраивает вариант, когда мои пароли будут храниться не понятно где. Поэтому я сделал маленький прокси, которые автоматически авторизует вас для google reader&#39;а и на выходе вы получаете полный feed ваших друзей.</p><p><span id="more-471"></span></p><pre class="prettyprint lang-php">
< ?<a href="http://blog.rpsl.info/tag/php" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with php">php</a>
    if (!empty($_GET['feed'])) {
        header("Content-Type: text/xml; charset=utf-8");
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $_GET['feed'] .'?auth=digest');
        curl_setopt($ch, CURLOPT_AUTOREFERER, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
        curl_setopt($ch, CURLOPT_USERPWD, 'login:password');
        $data = curl_exec($ch);
        curl_close($ch);
    }
?>
</pre><p>После размещения данного файла на хостинге, вам осталось только получить opml файл, ваших друзей, для добавления его в google reader.<br /> Можно воспользоваться стандартным средством <a href="http://blog.rpsl.info/tag/livejournal" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with livejournal">livejournal</a>:</p><blockquote><p>http://www.<a href="http://blog.rpsl.info/tag/livejournal" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with livejournal">livejournal</a>.com/tools/opml.bml?user=username</p></blockquote><p>но, он выдаст список, который не свернется в папку автоматически, так, что если вы не знаете как отредактировать файл самостоятельно, то лучше просто воспользуйтесь другим сервисом, например этим:</p><blockquote><p>http://www.hungry.com/~fn/foaf.cgi</p></blockquote><p>После того, как вы скачаете файл, вам нужно его отредактировать, открываете и делаете автозамену (ctrl+h) c:</p><blockquote><p>xmlUrl="</p></blockquote><p>на:</p><blockquote><p>xmlUrl="http://путь до вашего скрипта?feed=</p></blockquote><p>Всё. Закончили.</p><p>Теперь вам нужно зайти в google reader и импортировать этот файл, это делается в настройках (импорт/экспорт).</p><p>После первого добавления, в папке будет сплошная каша, но все новые посты начнут добавятся в нормальном порядке.</p><p>Удачного чтения.</p><p><center><a href="http://firstvds.ru/ru/home/index.html?from=2604" target="_blank"><img src="http://centrgroup.ru//uploads/2008/03/first-468x60-11.gif" title="Livejournal in google reader" alt="first 468x60 11 Livejournal in google reader" /></a></center></p>Тэги: <a href="http://blog.rpsl.info/tag/google" title="Google" rel="tag nofollow">Google</a>, <a href="http://blog.rpsl.info/tag/livejournal" title="livejournal" rel="tag nofollow">livejournal</a>, <a href="http://blog.rpsl.info/tag/php" title="php" rel="tag nofollow">php</a>, <a href="http://blog.rpsl.info/tag/rss" title="rss" rel="tag nofollow">rss</a><br /><h4>Похожие записи</h4><ul class="st-related-posts"><li><a href="http://blog.rpsl.info/2010/03/chat-dlya-vbulletin.html" title="Чат для vbulletin (5 Март  2010)">Чат для vbulletin</a> (3)</li><li><a href="http://blog.rpsl.info/2009/01/cvetovaya-identifikaciya.html" title="Цветовая идентификация (13 Январь  2009)">Цветовая идентификация</a> (1)</li><li><a href="http://blog.rpsl.info/2009/10/fotoblogi-fotoblog-foto-blog.html" title="Фотоблоги / фотоблог / фото блог (7 Октябрь  2009)">Фотоблоги / фотоблог / фото блог</a> (4)</li><li><a href="http://blog.rpsl.info/2009/02/proverka-poziciy-sayta.html" title="Проверка позиций сайта (23 Февраль  2009)">Проверка позиций сайта</a> (0)</li><li><a href="http://blog.rpsl.info/2010/07/kehshirovanie-mysql-mysimplecache.html" title="Кэширование MySQL&nbsp;&mdash; MySimpleCache (6 Июль  2010)">Кэширование MySQL&nbsp;&mdash; MySimpleCache</a> (0)</li></ul>]]></content:encoded> <wfw:commentRss>http://blog.rpsl.info/2009/12/livejournal-in-google-reader.html/feed</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>Twitter it для vBulletin</title><link>http://blog.rpsl.info/2009/11/twitter-it-dlya-vbulletin.html</link> <comments>http://blog.rpsl.info/2009/11/twitter-it-dlya-vbulletin.html#comments</comments> <pubDate>Wed, 04 Nov 2009 17:21:27 +0000</pubDate> <dc:creator>Rpsl</dc:creator> <category><![CDATA[CMS]]></category> <category><![CDATA[Полезное]]></category> <category><![CDATA[centr]]></category> <category><![CDATA[php]]></category> <category><![CDATA[vbulletin]]></category> <category><![CDATA[форум]]></category><guid isPermaLink="false">http://blog.rpsl.info/?p=445</guid> <description><![CDATA[На днях, мне захотелось сделать наш форум еще более интегрированным в, не побоюсь этого слова, великую социальную сеть twitter. Сначала была идея сделать возможность автоматической отправки новых тем из выбранных разделов в некий твиттер аккаунт, потом это обдумывалось и свелось до того, что бы была возможность отправлять в твиттер ссылки на темы, но при этом [...]]]></description> <content:encoded><![CDATA[<p>На днях, мне захотелось сделать наш форум еще более интегрированным в, не побоюсь этого слова, великую социальную сеть twitter.</p><p>Сначала была идея сделать возможность автоматической отправки новых тем из выбранных разделов в некий твиттер аккаунт, потом это обдумывалось и свелось до того, что бы была возможность отправлять в твиттер ссылки на темы, но при этом не сам форум будет спамить темы, а пользователи сам должны решать за себя.</p><p>Первый вариант, который был реализован, заключался в простом добавление кнопки в шаблон, которая содержит в себе необходимый URL, но как выяснилось, это вариант не очень удобен, т.к. он не будет работать с некоторыми символами, которые встречаются в тексте.</p><p>В итоге я просто создал модуль который генерирует ссылку, а в шаблон добавил простую кнопку и ву-аля.</p><p><a href="http://blog.rpsl.info/wp-content/uploads/2009/11/twitterit.png" class="highslide-image" onclick="return hs.expand(this);"><img class="aligncenter size-full wp-image-446" title="twitterit" src="http://blog.rpsl.info/wp-content/uploads/2009/11/twitterit.png" alt="twitterit Twitter it для vBulletin" width="373" height="149" /></a></p><p><span id="more-445"></span>Для начала нужно создать модуль:</p><blockquote><p>Продукт&nbsp;&mdash; <strong>vBulletin</strong><br /> Местоположение модуля&nbsp;&mdash; <strong>postbit_display_complete</strong><br /> Имя&nbsp;&mdash; <strong>Twitter It</strong></p></blockquote><p>Код модуля:</p><pre class="prettyprint php">$twitterit = $post[title]." http://siteurl/showthread.<a href="http://blog.rpsl.info/tag/php" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with php">php</a>?t=".$thread[threadid]." #tag";
$twitterit = iconv('WINDOWS-1251', 'UTF-8', $twitterit); // Если у вас не UTF-8
$twitterit = urlencode(htmlspecialchars_decode($twitterit));</pre><blockquote><p>#tag и siteurl соответственно прописываете сами</p></blockquote><p>Теперь нам осталось добавить вывод кнопок в шаблон. По умолчанию, за вывод сообщений отвечает шаблон postbit (postbit_legacy&nbsp;&mdash; если у вас Аватарки сбоку)</p><p>И добавляем в необходимое место вывод кнопки:<span style="color: #0000bb;"> </span></p><pre class="prettyprint html"><code>&lt;if condition="$post['postcount'] == 1"&gt;
            &lt;a href="$twitterit" target="_blank" alt="Twitter this" rel="nofollow"&gt;&lt;img src="$stylevar[imgdir_button]/twitterit.gif" alt="Twitter It!" border="0"/&gt;&lt;/a&gt;
&lt;/if&gt;</code></pre><p>If&nbsp;&mdash; мы используем для того, что бы кнопка отображалась только в первом сообщение темы.<br /><center><a href="http://firstvds.ru/ru/home/index.html?from=2604" target="_blank"><img src="http://centrgroup.ru//uploads/2008/03/first-468x60-11.gif" title="Twitter it для vBulletin" alt="first 468x60 11 Twitter it для vBulletin" /></a></center></p>Тэги: <a href="http://blog.rpsl.info/tag/centr" title="centr" rel="tag nofollow">centr</a>, <a href="http://blog.rpsl.info/tag/php" title="php" rel="tag nofollow">php</a>, <a href="http://blog.rpsl.info/tag/vbulletin" title="vbulletin" rel="tag nofollow">vbulletin</a>, <a href="http://blog.rpsl.info/tag/forum" title="форум" rel="tag nofollow">форум</a><br /><h4>Похожие записи</h4><ul class="st-related-posts"><li><a href="http://blog.rpsl.info/2010/03/chat-dlya-vbulletin.html" title="Чат для vbulletin (5 Март  2010)">Чат для vbulletin</a> (3)</li><li><a href="http://blog.rpsl.info/2009/04/integraciya-phpbb3-s-lyubym-sajtom.html" title="Интеграция phpbb3 с любым сайтом (24 Апрель  2009)">Интеграция phpbb3 с любым сайтом</a> (19)</li><li><a href="http://blog.rpsl.info/2009/01/centrgroupru.html" title="centrgroup.ru (17 Январь  2009)">centrgroup.ru</a> (0)</li><li><a href="http://blog.rpsl.info/2009/06/chelovecheskij-faktor.html" title="Человеческий фактор (8 Июнь  2009)">Человеческий фактор</a> (3)</li><li><a href="http://blog.rpsl.info/2009/01/cvetovaya-identifikaciya.html" title="Цветовая идентификация (13 Январь  2009)">Цветовая идентификация</a> (1)</li></ul>]]></content:encoded> <wfw:commentRss>http://blog.rpsl.info/2009/11/twitter-it-dlya-vbulletin.html/feed</wfw:commentRss> <slash:comments>15</slash:comments> </item> <item><title>PHP Кэширование картинок</title><link>http://blog.rpsl.info/2009/08/php-images-cache.html</link> <comments>http://blog.rpsl.info/2009/08/php-images-cache.html#comments</comments> <pubDate>Thu, 27 Aug 2009 11:05:07 +0000</pubDate> <dc:creator>Rpsl</dc:creator> <category><![CDATA[Полезное]]></category> <category><![CDATA[Статьи]]></category> <category><![CDATA[bash]]></category> <category><![CDATA[images]]></category> <category><![CDATA[optimize]]></category> <category><![CDATA[php]]></category><guid isPermaLink="false">http://blog.rpsl.info/?p=346</guid> <description><![CDATA[Недавно была необходимость сделать функцию кэширования картинок на php ну я и накидался простой скрипт, который отлично справляется с этой задачей. Логика работы скрипта очень простая. Он смотрит входящие параметры, проверяет есть ли картинка заданного размера и отдает её если она есть или создает в подпапке&#160; такую картинку и отдает её. Это спасает нас от [...]]]></description> <content:encoded><![CDATA[<p>Недавно была необходимость сделать функцию <strong>кэширования картинок на <a href="http://blog.rpsl.info/tag/php" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with php">php</a></strong> ну я и накида<span style="text-decoration: line-through;">лся</span> простой скрипт, который отлично справляется с этой задачей.</p><p>Логика работы скрипта очень простая. Он смотрит входящие параметры, проверяет есть ли картинка заданного размера и отдает её если она есть или создает в подпапке&nbsp; такую картинку и отдает её.</p><p>Это спасает нас от необходимости делать кучу ресайзов при загрузке картинки + это универсальный способ, который можно использовать в любом проекте.</p><p>Листинг под катом.</p><p><span id="more-346"></span><br /> <strong>images_cache.<a href="http://blog.rpsl.info/tag/php" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with php">php</a></strong></p><pre class="prettyprint lang-php">// ------ Define's --------------

$file_folder = $_SERVER['DOCUMENT_ROOT']."/images";
$file_image  = $_GET['image'];
$file_size   = $_GET['size'];

// ------------------------------

if(empty($file_size)){
    $file_size = 50;
}

function img_resize($src, $dest, $width, $height, $rgb = 0xFFFFFF, $quality = 100) {
    $size = getimagesize($src);

    if ($size === false) {
        return false;
    }

    $format = strtolower(substr($size['mime'], strpos($size['mime'], '/') + 1));
    $icfunc = 'imagecreatefrom'.$format;

    if (!function_exists($icfunc)) {
        return false;
    }

    $x_ratio = $width  / $size[0];
    $y_ratio = $height / $size[1];

    if ($height == 0) {

        $y_ratio = $x_ratio;
        $height  = $y_ratio * $size[1];

    } elseif ($width == 0) {

        $x_ratio = $y_ratio;
        $width   = $x_ratio * $size[0];

    }

    $ratio       = min($x_ratio, $y_ratio);
    $use_x_ratio = ($x_ratio == $ratio);

    $new_width   = $use_x_ratio  ? $width  : floor($size[0] * $ratio);
    $new_height  = !$use_x_ratio ? $height : floor($size[1] * $ratio);
    $new_left    = $use_x_ratio  ? 0 : floor(($width - $new_width)   / 2);
    $new_top     = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2);

    $isrc  = $icfunc($src);
    $idest = imagecreatetruecolor($width, $height);

    imagefill($idest, 0, 0, $rgb);
    imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0, $new_width, $new_height, $size[0], $size[1]);

    imagejpeg($idest, $dest, $quality);

    imagedestroy($isrc);
    imagedestroy($idest);

    return true;
}

$file_destination_folder = $file_folder.'/'.$file_size.'/';
$file_destination        = $file_folder.'/'.$file_size.'/'.$file_image;

if(!file_exists($file_destination)){

    if (!is_dir($file_destination_folder)) {
        if(!mkdir($file_destination_folder, 0777)){
            exit();
        }
    }

    img_resize($file_folder.'/'.$file_image, $file_destination, $file_size, 0);
}

$file_final_size = getimagesize($file_destination);
header("Content-type: ".$file_final_size['mime']);
header('Content-Length: ' . filesize($file_destination));
readfile($file_destination);
</pre><p>Далее, что бы всё было красиво, нам нужно добавить запись в .htaccess, что бы наши картинки имели нормальные адреса</p><p><strong>.htaccess</strong></p><pre class="prettyprint">RewriteRule   ^image/([0-9]+)/(.*)$  images_cache.<a href="http://blog.rpsl.info/tag/php" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with php">php</a>?size=$1&#038;image=$2 [L,QSA]
</pre><p>Плюс, для оптимизации картинок, можно повесить в крон <a href="http://habrahabr.ru/blogs/wordpress/42192/">shell скрипт от Александра Улизько</a>.<p><strong>images_optimize.sh</strong></p><pre class="prettyprint lang-bash">
for file in `find . -iname "*.jpg" -or -iname "*.png" -or -iname "*.jpeg"`;do
  ext=${file##*.}
  if [ -n "$ext" ]; then
    if [ "$ext" = "jpg" ]; then
      echo "optimizing ${file} as jpeg file with jpegtran"
      jpegtran -copy none -optimize -perfect -outfile temp_abracadabra_filename.jpg $file
      mv -f temp_abracadabra_filename.jpg $file;
    fi
    if [ "$ext" = "jpeg" ]; then
      echo "optimizing ${file} as jpeg file with jpegtran"
      jpegtran -copy none -optimize -perfect -outfile temp_abracadabra_filename.jpeg $file
      mv -f temp_abracadabra_filename.jpeg $file;
    fi
    if [ "$ext" = "png" ]; then
      echo "optimizing ${file} as png file with pngcrush"
      pngcrush -rem alla -reduce -brute "$file" temp_abracadabra_filename.png;
      mv -f temp_abracadabra_filename.png $file;
    fi
  fi
done;
</pre>Тэги: <a href="http://blog.rpsl.info/tag/bash" title="bash" rel="tag nofollow">bash</a>, <a href="http://blog.rpsl.info/tag/images" title="images" rel="tag nofollow">images</a>, <a href="http://blog.rpsl.info/tag/optimize" title="optimize" rel="tag nofollow">optimize</a>, <a href="http://blog.rpsl.info/tag/php" title="php" rel="tag nofollow">php</a><br /><h4>Похожие записи</h4><ul class="st-related-posts"><li><a href="http://blog.rpsl.info/2010/03/chat-dlya-vbulletin.html" title="Чат для vbulletin (5 Март  2010)">Чат для vbulletin</a> (3)</li><li><a href="http://blog.rpsl.info/2009/01/cvetovaya-identifikaciya.html" title="Цветовая идентификация (13 Январь  2009)">Цветовая идентификация</a> (1)</li><li><a href="http://blog.rpsl.info/2010/07/kehshirovanie-mysql-mysimplecache.html" title="Кэширование MySQL&nbsp;&mdash; MySimpleCache (6 Июль  2010)">Кэширование MySQL&nbsp;&mdash; MySimpleCache</a> (0)</li><li><a href="http://blog.rpsl.info/2009/04/integraciya-phpbb3-s-lyubym-sajtom.html" title="Интеграция phpbb3 с любым сайтом (24 Апрель  2009)">Интеграция phpbb3 с любым сайтом</a> (19)</li><li><a href="http://blog.rpsl.info/2009/02/govnokoding-ili-ne-xochu.html" title="Говнокодинг или &laquo;не хочу!&raquo; (2 Февраль  2009)">Говнокодинг или &laquo;не хочу!&raquo;</a> (1)</li></ul>]]></content:encoded> <wfw:commentRss>http://blog.rpsl.info/2009/08/php-images-cache.html/feed</wfw:commentRss> <slash:comments>7</slash:comments> </item> <item><title>Автоматическое обновление wordpress</title><link>http://blog.rpsl.info/2009/05/automatic-upgrade-wordpress.html</link> <comments>http://blog.rpsl.info/2009/05/automatic-upgrade-wordpress.html#comments</comments> <pubDate>Wed, 13 May 2009 20:06:57 +0000</pubDate> <dc:creator>Rpsl</dc:creator> <category><![CDATA[CMS]]></category> <category><![CDATA[php]]></category> <category><![CDATA[update]]></category> <category><![CDATA[wordpress]]></category><guid isPermaLink="false">http://blog.rpsl.info/?p=199</guid> <description><![CDATA[Есть в wordpress&#39;e такая занимательная опция, как автоматическая установка и обновление плагинов. Просит от вас только указать хост, логин и пароль для ftp/sftp доступа, а далее делает всё сама. К сожалению &#171;из коробки&#187; эта опция заводится далеко не у всех. Если вы тоже стали одним из счастливых обладателей сообщения: Downloading update from http://downloads.wordpress.org/plugin/%plugin-name%.zip Download failed.: [...]]]></description> <content:encoded><![CDATA[<p>Есть в wordpress&#39;e такая занимательная опция, как автоматическая установка и обновление плагинов. Просит от вас только указать хост, логин и пароль для ftp/sftp доступа, а далее делает всё сама.  К сожалению &laquo;из коробки&raquo; эта опция заводится далеко не у всех. Если вы тоже стали одним из счастливых обладателей сообщения:</p><blockquote><p>Downloading <a href="http://blog.rpsl.info/tag/update" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with update">update</a> from http://downloads.wordpress.org/plugin/%plugin-name%.zip</p><p>Download failed.: Could not create Temporary file</p><p>Installation Failed</p></blockquote><p>... то сделать вам нужно следующие: <span id="more-199"></span>Создать темповую папку для хранилища. Например wp-contents/tmp  Выставить на неё права доступа 777 (chmod -R 0777 ./wp-contents/tmp)  Дописать в файл wp-config.<a href="http://blog.rpsl.info/tag/php" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with php">php</a> строчку:</p><pre class="prettyprint lang-php">define ('WP_TEMP_DIR', ABSPATH . 'wp-content/tmp');</pre><p>Если у вас на сервере сильно ограниченно время выполнения скриптов и во время инсталяции выпадает ошибка, то тогда можно попробовать дописать в начало ./wp-admin/upgrade.<a href="http://blog.rpsl.info/tag/php" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with php">php</a></p><pre class="prettyprint lang-php">set_time_limit(0);</pre><p>Также желательно конечно завести отдельного пользвователя на ftp/sftp с ограниченными правами.  Ну вроде все. Больше проблем возникать не должно.</p>Тэги: <a href="http://blog.rpsl.info/tag/php" title="php" rel="tag nofollow">php</a>, <a href="http://blog.rpsl.info/tag/update" title="update" rel="tag nofollow">update</a>, <a href="http://blog.rpsl.info/tag/wordpress" title="wordpress" rel="tag nofollow">wordpress</a><br /><h4>Похожие записи</h4><ul class="st-related-posts"><li><a href="http://blog.rpsl.info/2009/01/movable-type-poigralis-i-xvatit.html" title="Movable Type: Поигрались и хватит (13 Январь  2009)">Movable Type: Поигрались и хватит</a> (3)</li><li><a href="http://blog.rpsl.info/2009/05/hotkeys-dlya-wordpress.html" title="Hotkeys для wordpress (11 Май  2009)">Hotkeys для wordpress</a> (3)</li><li><a href="http://blog.rpsl.info/2010/03/chat-dlya-vbulletin.html" title="Чат для vbulletin (5 Март  2010)">Чат для vbulletin</a> (3)</li><li><a href="http://blog.rpsl.info/2009/01/cvetovaya-identifikaciya.html" title="Цветовая идентификация (13 Январь  2009)">Цветовая идентификация</a> (1)</li><li><a href="http://blog.rpsl.info/2010/06/nu-vot-i-obnovilis.html" title="Ну вот и обновились (11 Июнь  2010)">Ну вот и обновились</a> (0)</li></ul>]]></content:encoded> <wfw:commentRss>http://blog.rpsl.info/2009/05/automatic-upgrade-wordpress.html/feed</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>Hotkeys для wordpress</title><link>http://blog.rpsl.info/2009/05/hotkeys-dlya-wordpress.html</link> <comments>http://blog.rpsl.info/2009/05/hotkeys-dlya-wordpress.html#comments</comments> <pubDate>Mon, 11 May 2009 16:29:36 +0000</pubDate> <dc:creator>Rpsl</dc:creator> <category><![CDATA[CMS]]></category> <category><![CDATA[blog]]></category> <category><![CDATA[javascript]]></category> <category><![CDATA[php]]></category> <category><![CDATA[web2.0]]></category> <category><![CDATA[wordpress]]></category><guid isPermaLink="false">http://blog.rpsl.info/?p=187</guid> <description><![CDATA[В этой заметке, я расскажу как легко добавить в ваш блог поддержку hotkey&#39;s. Hotkey&#160;&#8212; это определенное сочетание клавиш, по нажатию которых происходит определенное действие. Мы уже привыкли использовать ctrl+c/ctrl+v. Тенденции развития интернета диктуют свою моду и многие уже привыкли использовать для перехода между страницами сайта сочетание &#171;ctrl+left&#187; или &#171;ctrl+right&#187;. Для добавления этого функционала, первое что [...]]]></description> <content:encoded><![CDATA[<p>В этой заметке, я расскажу как легко добавить в ваш блог поддержку hotkey&#39;s.</p><blockquote><p>Hotkey&nbsp;&mdash; это определенное сочетание клавиш, по нажатию которых происходит определенное действие. Мы уже привыкли использовать ctrl+c/ctrl+v. Тенденции развития интернета диктуют свою моду и многие уже привыкли использовать для перехода между страницами сайта сочетание &laquo;ctrl+left&raquo; или &laquo;ctrl+right&raquo;.</p></blockquote><p>Для добавления этого функционала, первое что нам потребуется&nbsp;&mdash; плагин hotkey для библиотеки jquery.</p><p>jQuery hotkey</p><ul><li><a href="http://code.google.com/p/js-hotkeys/">Скачать</a></li><li><a href="http://jshotkeys.googlepages.com/test-static-01.html">Демо</a></li></ul><p>Теперь о том, как это сделать. У нас есть два варианта:</p><ul><li>Генерировать код в самом шаблоне с помощью встроенных функций</li><li>Генерировать код &laquo;на лету&raquo;, с помощью JS</li></ul><p>Я выбрал второй вариант, т.к. он мне показался более правильным, во первых мы не напрягаем шаблон лишними вызовами, и главное мы уверенны что будем получать правильные ссылки. Ведь нам нужно на главной странице листать все записи, в категории листать записи категории, а внутри поста листать посты. Таким образом, всё что нам осталось, это добавить в header шаблон (скорее всего header.<a href="http://blog.rpsl.info/tag/php" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with php">php</a>) нижеприведенный код.</p><p><span id="more-187"></span></p><pre>&lt;script type="text/<a href="http://blog.rpsl.info/tag/javascript" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with javascript">javascript</a>" src="&lt;?<a href="http://blog.rpsl.info/tag/php" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with php">php</a> bloginfo('template_url'); ?&gt;/js/jquery.hotkeys-0.7.9.min.js"&gt;&lt;/script&gt;</pre><p>Подразумевается, что вы уже скачали библиотеку и положили её в папку /js/ вашей темы. Также, обратите внимание, что код вызова библиотеки должен быть добавлен после вызова самого jQuery.</p><p>Далее дописываем наш обработчик.</p><pre>&lt;script type="text/<a href="http://blog.rpsl.info/tag/javascript" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with javascript">javascript</a>"&gt;
    jQuery(document).ready(function(){
        var nextlink = jQuery('.alignright a').attr('href');
        var prevlink = jQuery('.alignleft a').attr('href');

        if(nextlink != undefined){
            jQuery(document).bind('keydown', 'Ctrl+right', function(){
                location.href=nextlink;
            });
        }

        if(prevlink != undefined){
            jQuery(document).bind('keydown', 'Ctrl+left', function(){
                location.href=prevlink;
            });
        }
    });
&lt;/script&gt;</pre><p>Теперь главное. Обратите внимание на строки где определяются ссылки.</p><pre>        var nextlink = jQuery('.alignright a').attr('href');
        var prevlink = jQuery('.alignleft a').attr('href');</pre><p>alignright и alignleft это название классов, в которых у меня генерируются ссылки на следующую и предыдущую страницу, так что вам наверняка потребуется поменять эти названия на ваши, в зависимости от используемой вами темы.</p><p>Собственно это всё. После проделывания данных ваш блог должен стать на ступеньку ближе к заветному &laquo;WEB 2.0&raquo;.</p><p>Живой пример можете посмотреть в <a href="http://blog.rpsl.info">моём блоге</a>, нажимая &laquo;Ctrl+Left&raquo; OR "Ctrl+Right<p>"Сюда приходят по следующим фразам</p><ul><li><a href="http://blog.rpsl.info/2009/01/kniga-white-smoke-clan-zakazat.html">книга white smoke clan</a></li><li><a href="http://blog.rpsl.info/2009/12/livejournal-in-google-reader.html">как из google reader экспортировать в другой блог</a></li><li><a href="http://blog.rpsl.info/2009/01/google-disk-aka-gdrive.html">google disk</a></li><li><a href="http://blog.rpsl.info/2010/06/vkontakte-rukozhopy.html">видео вконтакте iphone</a></li><li><a href="http://blog.rpsl.info/2010/06/vkontakte-hd-video-vomp.html">vomp вконтакте</a></li><li><a href="http://blog.rpsl.info/2010/06/obfuskator-javascript.html">javascript обфускатор</a></li></ul>Тэги: <a href="http://blog.rpsl.info/tag/blog" title="blog" rel="tag nofollow">blog</a>, <a href="http://blog.rpsl.info/tag/javascript" title="javascript" rel="tag nofollow">javascript</a>, <a href="http://blog.rpsl.info/tag/php" title="php" rel="tag nofollow">php</a>, <a href="http://blog.rpsl.info/tag/web20" title="web2.0" rel="tag nofollow">web2.0</a>, <a href="http://blog.rpsl.info/tag/wordpress" title="wordpress" rel="tag nofollow">wordpress</a><br /><h4>Похожие записи</h4><ul class="st-related-posts"><li><a href="http://blog.rpsl.info/2009/01/cvetovaya-identifikaciya.html" title="Цветовая идентификация (13 Январь  2009)">Цветовая идентификация</a> (1)</li><li><a href="http://blog.rpsl.info/2010/06/nu-vot-i-obnovilis.html" title="Ну вот и обновились (11 Июнь  2010)">Ну вот и обновились</a> (0)</li><li><a href="http://blog.rpsl.info/2009/06/klevi-navigaciya.html" title="Клеви навигация (28 Июнь  2009)">Клеви навигация</a> (1)</li><li><a href="http://blog.rpsl.info/2009/02/blog.html" title="Блог (23 Февраль  2009)">Блог</a> (0)</li><li><a href="http://blog.rpsl.info/2009/05/automatic-upgrade-wordpress.html" title="Автоматическое обновление wordpress (14 Май  2009)">Автоматическое обновление wordpress</a> (4)</li></ul>]]></content:encoded> <wfw:commentRss>http://blog.rpsl.info/2009/05/hotkeys-dlya-wordpress.html/feed</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Интеграция phpbb3 с любым сайтом</title><link>http://blog.rpsl.info/2009/04/integraciya-phpbb3-s-lyubym-sajtom.html</link> <comments>http://blog.rpsl.info/2009/04/integraciya-phpbb3-s-lyubym-sajtom.html#comments</comments> <pubDate>Fri, 24 Apr 2009 10:00:26 +0000</pubDate> <dc:creator>Rpsl</dc:creator> <category><![CDATA[Статьи]]></category> <category><![CDATA[php]]></category> <category><![CDATA[phpbb]]></category> <category><![CDATA[форум]]></category><guid isPermaLink="false">http://blog.rpsl.info/?p=134</guid> <description><![CDATA[Не очень давно, по работе, пришлось делать интеграцию уже имеющегося сайта, с форумом на системе phpBB 3-ей версии. После разбора полетов и курения мануалов по работе форума, организовалась очень интересная и простая система. Если говорить о её плюсах, то она полностью независима от форума, таким образом, при обнолении движка, мы уверены что не потерям правленные [...]]]></description> <content:encoded><![CDATA[<p>Не очень давно, по работе, пришлось делать <strong>интеграцию</strong> уже имеющегося сайта, <strong>с форумом на системе phpBB</strong> 3-ей версии.</p><p>После разбора полетов и курения мануалов по работе форума, организовалась очень интересная и простая система. Если говорить о её плюсах, то она полностью независима от форума, таким образом, при обнолении движка, мы уверены что не потерям правленные нами ранее файлы и что ничего не поломается.</p><p>Для того, что бы понимать зачем и как это делать, сначала я постараюсь объяснить логику работы. Из уже готовых изменений, нам нужно добавить в БД сайта, дополнительное поле, например&nbsp;&mdash; &#39;user_f_id&#39;, в которое мы будем записывать информацию о сопоставлении профилей пользователей сайта, с профилями пользовталей форума (предполагается числовой идентификатор, user_id из БД форума&nbsp;&mdash; таблицы %prefix%_users).</p><p><span id="more-134"></span></p><blockquote><ol><li>Пользователь заполняет на сайте поля login и password</li><li>Проверяем, заполненно ли у предпологаемого пользователя поле user_f_id</li></ol><ul><li><strong>Если заполненно, то:</strong></li></ul><ol><li>Запускаем функцию авторизации пользователя через форумную БД (листинг ниже)</li><li>Если пароль не подходит, то выходим. Если подходит, то ставим авторизию на сайте + авторизацию на форуме</li><li>Авторизация на форуме делается путем установки кук + добавлением записи в таблицу %prefix%_sessions БД форума (листинг ниже)</li></ol><ul><li><strong>Если не заполнено, то:</strong></li></ul><ol><li>Скрипт производит стандартные функции валидации пароля</li><li>Если пароль не подходит, то выходим, если подходит, то запускаем функции установки сопоставления</li><li>Создаем запись в БД форума о пользователе (таблица %prefix%_users)</li><li>Созадем запись в БД форума о правах пользователя (таблица %prefix%_user_group)</li><li>Заполняем в БД нашего сайта поле user_f_id</li></ol></blockquote><p>Собственно всё. Теперь мы имеем систему, благодаря которой уже зарегистрированные пользователи, при первом входе заведут себе новый аккаунт на форуме. По какому критерию их сравнивать (логин, почта) это уже решайте сами.</p><p>Естественно нужно еще дописать функии, которые при  регистрации пользователей будут создавать учетную запись на форуме. И чтобы при авторизации несуществующего пользователя на сайте, при правильном форумном логине и пароле, ему автоматически создавалась учетная запись на сайте.</p><p><span style="text-decoration: underline;"><em>Листинг ф-ций, которые проверяют пароль из форумной базы:</em></span></p><pre class="prettyprint lang-php">// phpbb_hash($password) - Создание пароля
// phpbb_check_hash($password, $hash) - Верификация пароля

function unique_id()
{
    return substr(md5(rand().'_'.microtime().'_'.rand()), rand(0, 15), 16);
}

function _hash_gensalt_private($input, &amp;$itoa64, $iteration_count_log2 = 6)
{
    if ($iteration_count_log2 &lt; 4 || $iteration_count_log2 &gt; 31)
    {
        $iteration_count_log2 = 8;
    }
    $output = '$H$';
    $output .= $itoa64[min($iteration_count_log2 + ((PHP_VERSION &gt;= 5) ? 5 : 3), 30)];
    $output .= $_hash_encode64($input, 6, $itoa64); return $output;
}

function _hash_encode64($input, $count, &amp;$itoa64)
{
    $output = '';
     $i = 0;

    do
    {
        $value = ord($input[$i++]);
         $output .= $itoa64[$value &amp; 0x3f];

        if ($i &lt; $count)
        {
            $value |= ord($input[$i]) &lt;&lt; 8;
        }

        $output .= $itoa64[($value &gt;&gt; 6) &amp; 0x3f];

        if ($i++ &gt;= $count)
        {
            break;
        }

        if ($i &lt; $count)
        {
            $value |= ord($input[$i]) &lt;&lt; 16;
        }

        $output .= $itoa64[($value &gt;&gt; 12) &amp; 0x3f];

        if ($i++ &gt;= $count)
        {
            break;
        }

        $output .= $itoa64[($value &gt;&gt; 18) &amp; 0x3f];
    }
     while ($i &lt; $count);

    return $output;
}

function _hash_crypt_private($password, $setting, &amp;$itoa64)
{
    $output = '*';
    // Check for correct hash
    if (substr($setting, 0, 3) != '$H$')
    {
        return $output;
    }
    $count_log2 = strpos($itoa64, $setting[3]);
    if ($count_log2 &lt; 7 || $count_log2 &gt; 30)
    {
        return $output;
    }
    $count = 1 &lt;&lt; $count_log2;
    $salt = substr($setting, 4, 8);
    if (strlen($salt)
    != 8)
    {
        return $output;
    }
    if (PHP_VERSION &gt;= 5)
    {
        $hash = md5($salt . $password, true);
        do
        {
            $hash = md5($hash . $password, true);
        }
         while (--$count);
    }
    else
    {
        $hash = pack('H*', md5($salt . $password));
        do
        {
            $hash = pack('H*', md5($hash . $password));
        }
         while (--$count);
    }
    $output = substr($setting, 0, 12);
    $output .= $_hash_encode64($hash, 16, $itoa64);
    return $output;
}

public function phpbb_hash($password)
{
    $itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
    $random_state = $unique_id();
    $random = '';
    $count = 6;
    if (($fh = @fopen('/dev/urandom', 'rb')))
    {
        $random = fread($fh, $count);
         fclose($fh);
    }
    if (strlen($random) &lt; $count)
    {
        $random = '';
        for ($i = 0; $i &lt; $count; $i += 16)
        {
            $random_state = md5($unique_id() . $random_state);
            $random .= pack('H*', md5($random_state));
        }
         $random = substr($random, 0, $count);
    }
    $hash = $_hash_crypt_private($password, $_hash_gensalt_private($random, $itoa64), $itoa64);
    if (strlen($hash) == 34)
    {
        return $hash;
    }
    return md5($password);
}

function phpbb_check_hash($password, $hash)
{
    $itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
    if (strlen($hash) == 34)
    {
        return ($_hash_crypt_private($password, $hash, $itoa64) === $hash) ? true : false;
    }
    return (md5($password) === $hash) ? true : false;
}</pre><p><span style="text-decoration: underline;"><em>Массив для добавления записи о сессии в БД форума.</em></span></p><pre class="prettyprint lang-php">$browser = get_browser(null, true);
$ss = array(
            'sid'          =&gt; md5(date('U').rand(0,20)),
            'user_id'      =&gt; $forum['user_id'],
            'forum_id'     =&gt; '0',
            'last_visit'   =&gt; date('U'),
            'start_time'   =&gt; date('U'),
            'session_time' =&gt; date('U')+86400,
            'session_page' =&gt; 'index.<a href="http://blog.rpsl.info/tag/php" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with php">php</a>',
            'remote_ip'    =&gt; getenv('REMOTE_ADDR'),
            'browser'      =&gt; htmlspecialchars($browser['browser_name_pattern']),
            'autologin'    =&gt; '1'
            );</pre>Тэги: <a href="http://blog.rpsl.info/tag/php" title="php" rel="tag nofollow">php</a>, <a href="http://blog.rpsl.info/tag/phpbb" title="phpbb" rel="tag nofollow">phpbb</a>, <a href="http://blog.rpsl.info/tag/forum" title="форум" rel="tag nofollow">форум</a><br /><h4>Похожие записи</h4><ul class="st-related-posts"><li><a href="http://blog.rpsl.info/2010/03/chat-dlya-vbulletin.html" title="Чат для vbulletin (5 Март  2010)">Чат для vbulletin</a> (3)</li><li><a href="http://blog.rpsl.info/2009/11/twitter-it-dlya-vbulletin.html" title="Twitter it для vBulletin (4 Ноябрь  2009)">Twitter it для vBulletin</a> (15)</li><li><a href="http://blog.rpsl.info/2009/01/cvetovaya-identifikaciya.html" title="Цветовая идентификация (13 Январь  2009)">Цветовая идентификация</a> (1)</li><li><a href="http://blog.rpsl.info/2010/07/kehshirovanie-mysql-mysimplecache.html" title="Кэширование MySQL&nbsp;&mdash; MySimpleCache (6 Июль  2010)">Кэширование MySQL&nbsp;&mdash; MySimpleCache</a> (0)</li><li><a href="http://blog.rpsl.info/2009/02/govnokoding-ili-ne-xochu.html" title="Говнокодинг или &laquo;не хочу!&raquo; (2 Февраль  2009)">Говнокодинг или &laquo;не хочу!&raquo;</a> (1)</li></ul>]]></content:encoded> <wfw:commentRss>http://blog.rpsl.info/2009/04/integraciya-phpbb3-s-lyubym-sajtom.html/feed</wfw:commentRss> <slash:comments>19</slash:comments> </item> <item><title>PHP . Советы для маленьких</title><link>http://blog.rpsl.info/2009/02/php-sovety-dlya-malenkix.html</link> <comments>http://blog.rpsl.info/2009/02/php-sovety-dlya-malenkix.html#comments</comments> <pubDate>Tue, 10 Feb 2009 22:50:58 +0000</pubDate> <dc:creator>Rpsl</dc:creator> <category><![CDATA[Полезное]]></category> <category><![CDATA[Статьи]]></category> <category><![CDATA[firefox]]></category> <category><![CDATA[framework]]></category> <category><![CDATA[internet]]></category> <category><![CDATA[php]]></category><guid isPermaLink="false">http://blog.rpsl.info/?p=79</guid> <description><![CDATA[Да бы вы не подумали, что я забросил сюда писать, разбавлю контент очередной полезной заметкой. Несколько недель назад, мой знакомый Саша МЁД ака UGW.RU, попросил меня сделать галерею для его сайта. Задачи весьма простые&#160;&#8212; &#171;Что бы админ сам мог загружать фотки.&#187;, плюс жесткие ограничения на память, так как хостинг от ur.cbr, сцука, хитрый. От использования [...]]]></description> <content:encoded><![CDATA[<p>Да бы вы не подумали, что я забросил сюда писать, разбавлю контент очередной полезной заметкой.</p><p>Несколько недель назад, мой знакомый Саша МЁД ака UGW.RU, попросил меня сделать галерею для его сайта. Задачи весьма простые&nbsp;&mdash; &laquo;Что бы админ сам мог загружать фотки.&raquo;, плюс жесткие ограничения на память, так как хостинг от ur.cbr, сцука, хитрый.</p><p>От использования фреймворков пришлось отказаться, по вышеназванным причинам, но делать сайт на чистом <a href="http://blog.rpsl.info/tag/php" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with php">php</a> это не true way. Пришлось просто собрать из готовых классов удобную среду.</p><p>Правило первое: <strong>Используйте фреймворки или шаблонизаторы</strong>.</p><p style="padding-left: 30px;">Предпочтительнее конечно использовать фреймворки, коих сейчас большое множество: Code Igniter, Symphony, CakePHP, но когда вам нужно сделать сайт на 3-10 страничек (видов), то проще бывает использовать шаблонизатор.</p><p style="padding-left: 30px;">Я в данной ситуации выбираю Smarty, с коим мне как раз и пришлось познакомиться. Из всех вариантов, он показался мне самым простым, гибким и функциональным. Главное что он позволил весьма быстро решить поставленные задачи и не заниматься изобретением велосипеда.</p><p>Правило второе: <strong>Не пытайтесь изобретать колесо, используйте готовые решения</strong>.</p><p style="padding-left: 30px;">Если ваш проект подразумевает работу с базой данных, используйте библиотеку созданную для упрощения этих задач. Я, к своему стыду, знаю только одну библиотеку для работы с БД&nbsp;&mdash; DbSimple. Хотя, наверно, это из-за того, что она отлично справляется со своими задачами: упрощает написание и создание запросов, легко позволяет ими манипулировать, защищает от <a href="http://blog.rpsl.info/tag/sql" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with sql">sql</a> injection. Это, правда не значит, что нужно перестать проверять данные. Данные нужно прогонять через фильтры всегда, при вводе и при выводе.</p><p>Правило третье: <strong>Дебажьте. Используйте FireBUG и FirePHP</strong>.</p><p style="padding-left: 30px;">Эти расширения, для Mozilla FireFox позволяют экономить кучу времени, при работе с данными, и помогают отказаться от любых дебаг методов типа &laquo;есho&raquo; OR &laquo;print_r ()&raquo;.</p><p>Я уверен, что эта информация полезна, только для самых маленьких, а вы и так всё это прекрасно знаете. Ага.</p><p>Ну и пользуясь случаем, хочу передать привет тем, кто прививает мне любовь к хорошему программированию:</p><p><span style="font-family: arial black,avant garde;">Future Colors → <a title="Заказать сайт" href="http://futurecolors.ru">Умные заказывают сайты</a> здесь, остальные идут на ...й</span></p>Тэги: <a href="http://blog.rpsl.info/tag/firefox" title="firefox" rel="tag nofollow">firefox</a>, <a href="http://blog.rpsl.info/tag/framework" title="framework" rel="tag nofollow">framework</a>, <a href="http://blog.rpsl.info/tag/internet" title="internet" rel="tag nofollow">internet</a>, <a href="http://blog.rpsl.info/tag/php" title="php" rel="tag nofollow">php</a><br /><h4>Похожие записи</h4><ul class="st-related-posts"><li><a href="http://blog.rpsl.info/2010/06/testiruem-verstku-adobe-browselab.html" title="Тестируем верстку Adobe BrowserLab (14 Июнь  2010)">Тестируем верстку Adobe BrowserLab</a> (0)</li><li><a href="http://blog.rpsl.info/2009/02/govnokoding-ili-ne-xochu.html" title="Говнокодинг или &laquo;не хочу!&raquo; (2 Февраль  2009)">Говнокодинг или &laquo;не хочу!&raquo;</a> (1)</li><li><a href="http://blog.rpsl.info/2010/03/chat-dlya-vbulletin.html" title="Чат для vbulletin (5 Март  2010)">Чат для vbulletin</a> (3)</li><li><a href="http://blog.rpsl.info/2009/01/cvetovaya-identifikaciya.html" title="Цветовая идентификация (13 Январь  2009)">Цветовая идентификация</a> (1)</li><li><a href="http://blog.rpsl.info/2009/09/opera-i-megafon.html" title="Опера и Мегафон... (7 Сентябрь  2009)">Опера и Мегафон...</a> (2)</li></ul>]]></content:encoded> <wfw:commentRss>http://blog.rpsl.info/2009/02/php-sovety-dlya-malenkix.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using memcached
Page Caching using memcached (user agent is rejected)
Database Caching 39/72 queries in 0.118 seconds using memcached

Served from: blog.rpsl.info @ 2010-07-31 21:02:07 -->