Делал недавно Ajax chat с интеграцией в phpbb3.
Клиент сказал, что ставили до этого какой-то чат, но он много ресурсов проца ел, как я понял у них было установлено впечатляющее количество расширений для phpbb3, и при подключении в используемый ими до этого чат файла common.php загружались все эти самые расширения при каждом запросе через Ajax. Жесть одним словом.
C фронтендом проблем не возникло, а вот интеграция фишек phpbb в чат заморочек довольно много доставила.
Основной задачей было определить, авторизирован ли пользователь, и какой пользователь авторизирован, получить его логин и id в базе.
Решил не использовать common.php, а написать свой упрощенный вариант (вполне возможно что дырявый
).
Столкнулся с проблеммой, при подключении кода
//— грузим необходимые фенкции ядра
require($phpbb_root_path . ‘includes/acm/acm_’ . $acm_type . ‘.’ . $phpEx);
require($phpbb_root_path . ‘includes/cache.’ . $phpEx);
require($phpbb_root_path . ‘includes/template.’ . $phpEx);
require($phpbb_root_path . ‘includes/session.’ . $phpEx);
require($phpbb_root_path . ‘includes/auth.’ . $phpEx);
require($phpbb_root_path . ‘includes/functions.’ . $phpEx);
require($phpbb_root_path . ‘includes/functions_content.’ . $phpEx);
require($phpbb_root_path . ‘includes/constants.’ . $phpEx);
require($phpbb_root_path . ‘includes/db/’ . $dbms . ‘.’ . $phpEx);
require($phpbb_root_path . ‘includes/utf/utf_tools.’ . $phpEx);
//set_error_handler(defined(‘PHPBB_MSG_HANDLER’) ? PHPBB_MSG_HANDLER : ‘msg_handler’);
// Instantiate some basic classes
$user = new user();
$auth = new auth();
$template = new template();
$cache = new cache();
$db = new $sql_db();
выводилось сообщение об ошибке
Warning: session::include_once(./../includes/auth/auth_.php) [session.include-once]: failed to open stream: No such file or directory in /home/s/saintist/saintist.tmweb.ru/public_html/forum/includes/session.php on line 340
детальное изучение файла /forum/includes/session.php показало что все из-за того что метод работы с БД не указан по какой-то причине;
решение довольно тривиальное
в свой код , который подключает некоторый функционал phpbb3, добавил перед подключением классов строчку
$config=array(‘auth_method’=>»db»);
в результата получилось вот так
$config=array(‘auth_method’=>»db»);
//— грузим необходимые фенкции ядра
require($phpbb_root_path . ‘includes/acm/acm_’ . $acm_type . ‘.’ . $phpEx);
require($phpbb_root_path . ‘includes/cache.’ . $phpEx);
require($phpbb_root_path . ‘includes/template.’ . $phpEx);
require($phpbb_root_path . ‘includes/session.’ . $phpEx);
require($phpbb_root_path . ‘includes/auth.’ . $phpEx);
require($phpbb_root_path . ‘includes/functions.’ . $phpEx);
require($phpbb_root_path . ‘includes/functions_content.’ . $phpEx);
require($phpbb_root_path . ‘includes/constants.’ . $phpEx);
require($phpbb_root_path . ‘includes/db/’ . $dbms . ‘.’ . $phpEx);
require($phpbb_root_path . ‘includes/utf/utf_tools.’ . $phpEx);
//set_error_handler(defined(‘PHPBB_MSG_HANDLER’) ? PHPBB_MSG_HANDLER : ‘msg_handler’);
// Instantiate some basic classes
$user = new user();
$auth = new auth();
$template = new template();
$cache = new cache();
$db = new $sql_db();
// Connect to DB
$db->sql_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport, false, defined(‘PHPBB_DB_NEW_LINK’) ? PHPBB_DB_NEW_LINK : false);
unset($dbpasswd);
$user->session_begin();
$auth->acl($user->data);
и все заработало
но это вариант на скорую руку, можно все красивее сделать, с автоматическим определением нужного параметра
что я и сделал
немного позже
