-
Notifications
You must be signed in to change notification settings - Fork 7.6k
File:OnlineUsers0.2.zip
Ahmed Nawaz Butt edited this page Apr 24, 2020
·
3 revisions
<?php
/**
* Users Online class
*
* Manages active users
*
* @package CodeIgniter
* @subpackage Libraries
* @category Add-Ons
* @author Leonardo Monteiro Bersan de Araujo
* @link hhttp://codeigniter.com/wiki/Library: Online_Users
*/
class OnlineUsers
{
public $file = "usersonline.tmp";
public $data;
public $ip;
function OnlineUsers()
{
$this->ip = $_SERVER['REMOTE_ADDR'];
$this->data = @unserialize(file_get_contents($this->file));
$aryData = $this->data['useronline'];
if (!$this->data) $this->data = array();
$timeout = time() - 120;
//Removes expired data
foreach ($aryData as $key => $value)
{
if ($value['time'] <= $timeout)
{
if ($value['username'])
{
$this->data['memonline']--;
}
else $this->data[‘guestonline’]--;
unset($aryData[$key]);
}
}
//If it’s the first hit, add the information to database
if (!isset($aryData[$this->ip]))
{
$CI = & get_instance();
$aryData[$this->ip]['time'] = time();
$aryData[$this->ip]['uri'] = $_SERVER['REQUEST_URI'];
$username = $CI
->session
->userdata('username');
$aryData[$this->ip]['username'] = $username;
if ($username)
{
$this->data['memonline']++;
}
else
{
$this->data['guestonline']++;
}
$this->data[‘totalvisit’]++;
//Loads the USER_AGENT class if it’s not loaded yet
if (!isset($CI->agent))
{
$CI
->load
->library('user_agent');
$class_loaded = true;
}
if ($CI
->agent
->is_robot()) $aryData[$this->ip][‘bot’] = $CI
->agent
->robot();
else $aryData[$this->ip][‘bot’] = false;
//Destroys the USER_AGENT class so it can be loaded again on the controller
if ($class_loaded) unset($class_loaded, $CI->agent);
}
else
{
$aryData[$this->ip]['time'] = time();
$aryData[$this->ip]['uri'] = $_SERVER['REQUEST_URI'];
}
$this->data[‘useronline’] = $aryData;
$this->_save();
}
//this function return the total number of online users
function total_users()
{
return count($this->data['useronline']);
}
//this function return the total number of online members
function total_mems()
{
return @$this->data['memonline'];
}
//this function return the total number of online guest
function total_guests()
{
return @$this->data['guestonline'];
}
//this function return the total number of total visit
function total_visit()
{
return @$this->data['totalvisit'];
}
//this function return the total number of online robots
function total_robots()
{
$i = 0;
foreach ($this->data as $value)
{
if ($value['is_robot']) $i++;
}
return $i;
}
//Used to set custom data
function set_data($data = false, $force_update = false)
{
if (!is_array($data))
{
return false;
}
$tmp = false; //Used to control if there are changes
foreach ($data as $key => $value)
{
if (!isset($aryData[$this->ip]['data'][$key]) || $force_update)
{
$aryData[$this->ip]['data'][$key] = $value;
$tmp = true;
}
}
//Check if the user’s already have this setting and skips the wiriting file process (saves CPU)
if (!$tmp) return false;
return $this->_save();
}
//
function get_info()
{
return @$this->data;
}
//Save current data into file
function _save()
{
$fp = fopen($this->file, 'w');
flock($fp, LOCK_EX);
$write = fwrite($fp, serialize($this->data));
fclose($fp);
return $write;
}
}