Інтеграція phpbb3 з будь-яким сайтом
Нещодавно, по роботі, довелося робити інтеграцію вже наявного сайту, з форумом на системі phpBB 3-ї версії. Після розбору польотів та мануалів по роботі форуму, організувалася дуже цікава та проста система. Якщо говорити про її плюси, то вона повністю незалежна від форуму, таким чином, при обнуленні двигуна, ми впевнені, що не втратимо правлені нами раніше файли і що нічого не поламається. Для того, щоб розуміти навіщо і як це робити, спочатку я постараюся пояснити логіку роботи. З уже готових змін, нам потрібно додати до БД сайту, додаткове поле, наприклад - 'user_f_id', в яке ми записуватимемо інформацію про зіставлення профілів користувачів сайту, з профілями користувачів форуму (передбачається числовий ідентифікатор, user_id з БД форуму - таблиці %prefix %_users).
-
1. Користувач заповнює на сайті поля login та password 2. Перевіряємо, чи заповнено у передбачуваного користувача поле user_f_id
Якщо заповнено, то:
1. Скрипт виконує стандартні функції валідації пароля 2. Якщо пароль не підходить, то виходимо, якщо підходить, то запускаємо функції встановлення зіставлення 3. Створюємо запис у БД форуму про користувача (таблиця %prefix%_users) 4. Створимо запис у БД форуму про права користувача (таблиця %prefix%_user_group) 5. Заповнюємо у БД нашого сайту поле user_f_id
Лістинг ф-цій, які перевіряють пароль із форумної бази:
// 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 31 ) $iteration_count_log2 = 8 ; > $вихід = '$H$' ; $output .= $itoa64 [ min ( $iteration_count_log2 + (( PHP_VERSION >= 5 ) ? 5 : 3 ), 30 )]; $output .= $_hash_encode64 ($input, 6, $itoa64); return $output ; >
функція _hash_encode64 ( $input , $count , & amp; $itoa64 ) $output = '' ; $i = 0;
do $value = ord ( $input [ $i ++]); $output .= $itoa64 [ $value & підсилювач ; 0x3f];
якщо ($i > 6) & підсилювач ; 0x3f];
якщо ($i > 12) & підсилювач ; 0x3f];
$output .= $itoa64 [( $value >> 18 ) & підсилювач ; 0x3f]; > while ($i 30) повернути $вихід; > $count = 1 = 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); $вихід .= $_hash_encode64 ($hash, 16, $itoa64); повернути $вивід ; >
публічна функція phpbb_hash ( $password ) $itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' ; $random_state = $unique_id (); $random = '' ; $count = 6 ; if (( $fh = @ fopen ( '/dev/urandom' , 'rb' ))) $random = fread ( $fh , $count ); fclose ( $fh ); > якщо ( strlen ( $random )
Масив для додавання записів про сесії в БД форумі.