You want to see the number of online anonymous visitors. This can easily be done with a PHP snippet in block. The PHP Filter module must be enabled.
Additionally, the location is shown if found. Crawlers are shown separately.
<?php/* Code based on http://www.phpcodester.com/2011/04/drupal-7-block-for-whos-online-with-guests/ */if (user_access('access content')) { $spiders = array('google', 'fatlens', 'yahoo', 'altavista', 'yandex', 'baidu', 'bing', 'thefind', 'bot', 'spider', 'crawl'); $now = $_SERVER['REQUEST_TIME']; $interval = $now - 3600 * 6 /*variable_get('user_block_seconds_online', 3600 * 6)*/; $output = "<div class = "visitor-ips">"; $max_users = 12; //variable_get('user_block_max_list_count', 10); /*$authenticated_count = db_query("SELECT COUNT(DISTINCT s.uid) FROM {sessions} s WHERE s.timestamp >= :timestamp AND s.uid > 0", array(':timestamp' => $interval))->fetchField(); if ($authenticated_count && $max_users) { $output.="<h3>Registered Users</h3>"; $items = db_query_range('SELECT u.uid, u.name, MAX(s.timestamp) AS max_timestamp FROM {users} u INNER JOIN {sessions} s ON u.uid = s.uid WHERE s.timestamp >= :interval AND s.uid > 0 GROUP BY u.uid, u.name ORDER BY max_timestamp DESC', 0, $max_users, array(':interval' => $interval))->fetchAll(); $output .= theme('user_list', array('users' => $items)); }*/ $guest_count = db_query("SELECT COUNT(DISTINCT s.hostname) FROM {accesslog} s WHERE s.timestamp >= :timestamp", array(':timestamp' => $interval))->fetchField(); $output .= "$guest_count visitor(s)"; $output .= ' since ' . date('H:i d.m', $interval) /*. ' (' . date('H:i d.m', $now) . ')' . " ($interval)"*/; $sData = array(); $gData = array(); if ($guest_count && $max_users) { $items = db_query_range('SELECT s.hostname, MAX(s.timestamp) AS max_timestamp FROM {accesslog} s WHERE s.timestamp >= :interval GROUP BY s.hostname ORDER BY max_timestamp DESC', 0, $max_users, array(':interval' => $interval))->fetchAll(); foreach ($items as $item) { $ip = $item->hostname; $host = preg_replace('/[^a-zA-Z\.]/', '', gethostbyaddr($ip)); if ($host == "...") $host = "Unknown Hostname"; $spider = 0; foreach ($spiders as $spider) { if (strpos($host, $spider) !== false){ $spider=1; //$item['spider'] = 1; break; } } if ($spider == 1) { $sData[]=array('ip' => $ip, 'host' => $host, 'timestamp' => $item->max_timestamp); } else { $gData[]=array('ip'=>$ip, 'host'=>$host, 'timestamp' => $item->max_timestamp); } } } if (isset($gData) && count($gData)>0){ // $output .= "<h3>Guests</h3>"; $output .= "<ul>"; foreach ($gData as $d){ $output .= "<li>" . check_plain($d['host']) . ', ' . check_plain($d['ip']); $loc = unserialize(file_get_contents('http://www.geoplugin.net/php.gp?ip='.$d['ip'])); if ($loc['geoplugin_city'].$loc['geoplugin_region']!=''){ $output .= ", " . check_plain($loc['geoplugin_city']) . ", " . check_plain($loc['geoplugin_region']); } if ($loc['geoplugin_countryName'] != ''){ $output .= ", " . check_plain($loc['geoplugin_countryName']); } $output .= ', ' . date('H:i', $d['timestamp']); $output .= "</li>"; } $output .= "</ul>"; } if (isset($sData) && count($sData)>0){ $output .= "Spiders:"; $output .= "<ul>"; foreach ($sData as $d) { $output .= "<li>" . check_plain($d['host']) . ", " . check_plain($d['ip']) . ', ' . date('H:i', $d['timestamp']) . "</li>"; } $output .= "</ul>"; } $output .= " </div>"; return $output;}?>
This code is based on http://www.phpcodester.com/2011/04/drupal-7-block-for-whos-online-with-g...