根据我的上篇文章《也谈网站在线人数统计》,我写的在线人数统计程序源代码如下:如有错误请指正。 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']."人"; 摘自:镜湖精选代码 |