Как программно войти на форум phpBB? - PullRequest
5 голосов
/ 10 ноября 2011

У меня есть форум, использующий phpBB. Теперь я хотел бы сделать что-то подобное из исходного кода:

логин («пользователь», «пароль»)

Как это сделать в phpBB?

Ответы [ 3 ]

10 голосов
/ 10 ноября 2011

Сначала вам нужно загрузиться для phpBB:

define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './phpBB/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);

$user->session_begin();

Вам придется заменить часть ./phpBB/ относительным путем к форуму.

Чтобы пользователь вошел в системув, вы должны сделать:

$result = $user->session_create($user_id, $admin, $autologin, $viewonline);

$admin должно быть false, $autologin и $viewonline в зависимости от того, что вы хотите.

ПРИМЕЧАНИЕ: Вызов session_create установит сеансовый cookie для пользователя, поэтому убедитесь, что вы вызываете его только тогда, когда текущий запрос фактически обслуживает этого пользователя.

8 голосов
/ 10 ноября 2011

Вам понадобится скрипт, который интегрируется с фреймворком phpBB. Нечто подобное должно работать.

<?php
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);

// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();
?>

Затем посмотрите на функцию $ auth-> login () (пример использования функции login_box() в /includes/functions.php). Упрощенный, но неполный пример:

$result = $auth->login($username, $password); // There are more params but they're optional

if ($result['status'] == LOGIN_SUCCESS)
{
    // Logged in
}
else
{
    // Something went wrong
}
0 голосов
/ 10 ноября 2011

В вашем PHP-скрипте, который сканирует HTML, потребуется:

  • Данные POST, как если бы они заполняли форму
  • Получить ответ с сервера; вероятно, извлеките сессионные куки
  • Отправить эти куки для последующих запросов

Возможно, вам будет интересно использовать некую уже существующую библиотеку для облегчения этого.
Например, вы можете взглянуть на Zend_Http_Client ( см. Также ; часть о Отправка нескольких запросов одним и тем же клиентом , вероятно, заинтересует ты ;-))


Возможно, вы также захотите взглянуть на некоторые другие вопросы / ответы, например:

...