<?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; phpbb</title> <atom:link href="http://blog.rpsl.info/tag/phpbb/feed" rel="self" type="application/rss+xml" /><link>http://blog.rpsl.info</link> <description>Очень остроумная надпись</description> <lastBuildDate>Thu, 09 Sep 2010 21:02:39 +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>Интеграция 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>с форумом на системе <a href="http://blog.rpsl.info/tag/phpbb" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with phpbb">phpBB</a></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> (13)</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>20</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 8/28 queries in 0.028 seconds using memcached

Served from: blog.rpsl.info @ 2010-09-10 08:51:28 -->