Поисковые боты

phpfox

Пользователь
Все сегодня со свежей головой полностью адаптировал данный мод для SVN версии если кому то надо могу выложить.

Только вот не получается сделать общий подсчет, зарегистрированные, гости и скрытые в общий подсчет входят а вот как еще ботов добавить не знаю пробовал по аналоги но чет не выходит, видать где то что то упускаю, _Xz_, подскажи как ты у себя такое реализовал.
 

phpfox

Пользователь
macfleg, поторопился с тем что выложу, пока сам еще не доделал, есть маленькая проблема, в общем за место вывода ип адресов я вывел браузер {bot_user_row.BROWSER} на первый взгляд все работает отлично но время от времени эти браузеры у ботов тупо исчезают и за место картинок браузеров тупо пустота после чего через некоторое время снова появляются, в какую сторону капать хз. Жду помощи!

p.s Обратил внимание на эти куски кода...
Код:
        $user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'not browser';
 
        $bot_name = '';
        foreach ($bb_cfg['bots'] as $bot => $name)
        {
            if(strstr($user_agent, $bot)) $bot_name = $name;
        }

и

Код:
        $user_browser = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'not browser';
 
        $bot_name = '';
        foreach ($bb_cfg['bots'] as $bot => $name)
        {
            if(strstr($user_browser, $bot)) $bot_name = $name;
        }
Может в них какая то находится тайна исчезновение иконок браузера?
 
G

Gemini_13

Гость
данный запрос не есть самый правильный. будут дублироватся юзеры, если на них есть по несколько сессий в базе.
PHP:
$sql = "
    SELECT
        u.username, u.user_id, u.user_opt, u.user_rank, u.user_level,
        u.ignore_srv_load,
        s.session_logged_in, s.bot_name, s.session_ip, (s.session_time - s.session_start) AS ses_len,
        COUNT(s.session_id) AS sessions,
        COUNT(DISTINCT s.session_ip) AS ips
    FROM ". BB_SESSIONS ." s, ". BB_USERS ." u
    WHERE s.session_time > $time_online
        AND u.user_id = s.session_user_id
    GROUP BY s.session_id
    ORDER BY u.username
";
 

Dream

Легенда
да там не сложно, вот мой смотри R461
PHP:
$sql = "SELECT u.user_id, u.username, u.user_opt, u.user_rank, s.session_logged_in, s.session_time, s.session_ip, s.bot_name
    FROM ".BB_USERS." u, ".BB_SESSIONS." s
    WHERE u.user_id = s.session_user_id
        AND s.session_time >= ".( TIMENOW - 300 ) . "
    ORDER BY u.username ASC, s.session_ip ASC";
if ( !($result = DB()->sql_query($sql)) )
{
    message_die(GENERAL_ERROR, 'Could not obtain regd user/online information', '', __LINE__, __FILE__, $sql);
}
 
$guest_users = 0;
$registered_users = 0;
$hidden_users = 0;
$bots = 0;
 
$reg_counter = 0;
$guest_counter = 0;
$prev_user = 0;
$prev_ip = '';
 
$user_id = 0;
 
while ( $row = DB()->sql_fetchrow($result) )
{
    $view_online = false;
 
    if ( $row['session_logged_in'] )
    {
        $user_id = $row['user_id'];
 
        if ( $user_id != $prev_user )
        {
            $username = profile_url($row);
 
            if ( bf($row['user_opt'], 'user_opt', 'allow_viewonline') )
            {
                $view_online = IS_AM;
                $hidden_users++;
 
                $username = '<i>' . $username . '</i>';
            }
            else
            {
                $view_online = true;
                $registered_users++;
            }
 
            $which_counter = 'reg_counter';
            $which_row = 'reg_user_row';
            $prev_user = $user_id;
        }
    }
    else if($row['bot_name'])
    {
        $username = $row['bot_name'];
        $view_online = true;
        $bots++;
 
        $which_counter = 'bot_counter';
        $which_row = 'bot_user_row';
    }
    else
    {
        if ( $row['session_ip'] != $prev_ip )
        {
            $username = $lang['GUEST'];
            $view_online = true;
            $guest_users++;
 
            $which_counter = 'guest_counter';
            $which_row = 'guest_user_row';
        }
    }
 
    $prev_ip = $row['session_ip'];
    $user_ip = hexdec(substr($prev_ip, 0, 2)) . '.' . hexdec(substr($prev_ip, 2, 2)) . '.' . hexdec(substr($prev_ip, 4, 2)) . '.' . hexdec(substr($prev_ip, 6, 2));
 
    if ( $view_online )
    {
        $row_class = !($which_counter % 2) ? 'row1' : 'row2';
 
        $template->assign_block_vars("$which_row", array(
            'ROW_CLASS'  => $row_class,
            'USER'      => $username,
            'LASTUPDATE' => bb_date($row['session_time']),
            'LASTUPDATE_RAW' => $row['session_time'],
            'USERIP'    => $user_ip,
            'U_WHOIS_IP' => $bb_cfg['whois_info'] . $user_ip,
        ));
 
        $which_counter++;
    }
}
 
$template->assign_vars(array(
    'TOTAL_USERS_ONLINE' => $registered_users + $hidden_users + $guest_users,
    'TOTAL_REGISTERED_USERS_ONLINE' => sprintf($lang['REG_USERS_ONLINE'], $registered_users) . sprintf($lang['HIDDEN_USERS_ONLINE'], $hidden_users),
    'TOTAL_GUEST_USERS_ONLINE' => sprintf($lang['GUEST_USERS_ONLINE'], $guest_users),
    'TOTAL_BOTS_ONLINE' => $bots,
));
 
Сверху