也谈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; //from www.w3sky.com

  }

  其中的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); //from www.w3sky.com

  }

  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']."人";