| 
| 技术资料  > PHP技术 > 经典文章 : 在线人数统计源代码 |  
在线人数统计源代码 March 23,2004 |  
根据我的上篇文章《也谈网站在线人数统计》,我写的在线人数统计程序源代码如下:如有错误请指正。  
 
db层:  
db_online.php  
 
//该函数使用户自己在线,并且检查其他用户的在线情况  
function checkOnline($userid,$tempid=null)  
{  
$conn = connect();  
 
//对于所有用户  
//先设置自己为在线  
$stmt = "UPDATE ".DB_NAME.".USER SET IsOnline='Y' WHERE UserID=".$userid;  
$result = query($stmt,$conn);  
//info($stmt);  
//如果当前用户是游客  
if ($tempid != null)  
{  
$stmt = "SELECT TempID FROM ".DB_NAME.".TEMPUSER WHERE  
 
TempID=".$tempid;  
$result = query($stmt,$conn);  
//info($stmt);  
//如果该游客还在线  
if ($row = fetch_array($result))  
{  
$stmt = "UPDATE ".DB_NAME.".TEMPUSER SET  
 
RequestTime='".getCurrentTime()."' WHERE TempID=".$tempid;  
$result = query($stmt,$conn);  
//info($stmt);  
}  
//该游客已经离线  
else  
{  
$stmt = "INSERT INTO ".DB_NAME.".TEMPUSER  
 
VALUES('".$tempid."','".getCurrentTime()."')";  
$result = query($stmt,$conn);  
//info($stmt);  
}  
}  
 
//查看其他用户  
//普通用户  
$stmt = "UPDATE ".DB_NAME.".USER SET IsOnline='N' WHERE ".time()." -  
 
unix_timestamp(RequestTime) > ".ONLINE_DURATION." AND UserGroupID != ".GUEST;  
$result = query($stmt,$conn);  
 
//游客  
$stmt = "DELETE FROM ".DB_NAME.".TEMPUSER WHERE ".time()." -  
 
unix_timestamp(RequestTime) > ".ONLINE_DURATION;  
$result = query($stmt,$conn);  
disconnect($conn);  
}  
 
//得到在线人数,分用户和游客  
function getOnlineNumber()  
{  
$olnum = array();  
$conn = connect();  
$stmt = "SELECT COUNT(UserID) FROM ".DB_NAME.".USER WHERE IsOnline='Y' AND  
 
UserGroupID != 4"; //4 为guest的用户组id  
//info ($stmt);  
$result = query($stmt,$conn);  
$olnum['user'] = result($result,0,"COUNT(UserID)");  
$stmt = "SELECT COUNT(TempID) FROM ".DB_NAME.".TEMPUSER";  
//info ($stmt);  
$result = query($stmt,$conn);  
if ($row = fetch_array($result))  
{  
$olnum['guest'] = $row['COUNT(TempID)'];  
}  
disconnect($conn);  
return $olnum;  
}  
 
 
 
其中的connect(), disconnect(), query(),fetch_array()函数在dbmanager.inc.php中  
dbmanager.inc.php  
 
define("DB_NAME","databasename");  
define("DB_USER","user");  
define("DB_PASS","pass");  
define("DB_HOST","localhost");  
 
function connect()  
{  
//echo "Connecting to Host:".HOST."<br>";  
$conn = mysql_connect(DB_HOST,DB_USER,DB_PASS);  
mysql_select_db(DB_NAME);  
/*  
if ($conn)  
{  
echo "Connect to database sucessfully. connection id:".$conn."<br>";  
}  
else  
{  
echo "Connect to database failed.<br>";  
}  
*/  
return $conn;  
}  
 
function pconnect()  
{  
return mysql_pconnect(DB_HOST,DB_USER,DB_PASS);  
}  
 
function disconnect($conn)  
{  
$close = mysql_close($conn);  
/*  
if ($close)  
echo "MySQL Database disconnected.<br>";  
else  
echo "MySQL Database disconnecting failed. Please try again.<br>";  
*/  
}  
 
function query($stmt,$conn)  
{  
return mysql_query($stmt,$conn);  
}  
 
function fetch_array($result)  
{  
return mysql_fetch_array($result);  
}  
 
function fetch_row($result)  
{  
return mysql_fetch_row($result);  
}  
 
function num_rows($result)  
{  
return mysql_num_rows($result);  
}  
 
function result($result,$row,$field)  
{  
return mysql_result($result,$row,$field);  
}  
 
 
rule层:  
rl_online.php  
function getOnline()  
{  
if ($userid == 2)  
{  
if (session_is_registered("tempuserid"))  
{  
checkOnline($userid,$tempuserid);  
}  
}  
else  
{  
checkOnline($userid);  
}  
return getOnlineNumber();  
}  
 
ui层:  
ui_online.php  
$online_num = getOnline();  
echo "在线人数,注册用户".$online_num['user']."人,游客".$online_num['guest']."人";  |  
 
 |