Latest News

Home » PHP程式設計教學 » 如何計算現用的線上人數?(PHP程式設計問題與答覆)

如何計算現用的線上人數?(PHP程式設計問題與答覆)

PHP程式設計問題諮詢:
請問,如何計算現用的線上人數?

———————————————————
PHP程式設計問題回覆:
您要計算現用的線上人數?,可以參考以下的說明:

———————————————————
計算現用的線上人數

例子一:用文字實現
<?php
//首先你要有讀寫檔的許可權
//本程式可以直接運行,第一次報錯,以後就可以
  $online_log = "count.dat"; //儲存人數的檔,
  $timeout = 30;//30秒內沒動作者,認為掉線
  $entries = file($online_log);

  $temp = array();
 
  for ($i=0;$i<count($entries);$i++) {
   $entry = explode(",",trim($entries[$i]));
   if (($entry[0] != getenv('REMOTE_ADDR')) && ($entry[1] > time())) {
    array_push($temp,$entry[0].",".$entry[1]."
"); //取出其他流覽者的資訊,並去掉逾時者,儲存進$temp
   }
  }

   array_push($temp,getenv('REMOTE_ADDR').",".(time() + ($timeout))."
"); //更新流覽者的時間
  $users_online = count($temp); //計算線上人數

  $entries = implode("",$temp);
  //寫入檔案
  $fp = fopen($online_log,"w");
   flock($fp,LOCK_EX); //flock() 不能在NFS以及其他的一些網路檔系統中標準工作
   fputs($fp,$entries);
   flock($fp,LOCK_UN);
   fclose($fp);

   echo "現用的有".$users_online."人線上";

?>  
例子二:
用資料庫實現線上使用者

<?
#
# Author: Marco(hkfuk)
#
# Contact: Crazy_Marco@msn.com
#
$host="localhost";//mysql的host
$user="root";//mysql的使用者名稱
$pw="";//mysql的密碼
$db="";//mysql資料庫名稱
$update_time="30";//更新的頻率—秒數
session_start();
if(!$_SESSION['name'])session_register("name");
############################################
$con=mysql_connect($host,$user,$pw)or die("不可以連線資料庫");
$now=time();
mysql_select_db($db,$con)or die("錯誤的資料庫$db");
if(!empty($name)){//如果使用者已經登入了
$query=mysql_query("select count(username) from online_list where username='$name'",$con);//查詢線上到表是否已經有使用者的名稱
$result=mysql_result($query,0);//查詢的結果
if($result!=0){//如果使用者已經在線上清單了
@mysql_query("update online_list set second_time='$now' where username='$name'",$con);//更新使用者的最後線上時間
}else{//如果使用者已經不在線上清單
@mysql_query("insert into online_list(username,userip,online_time,second_time)values('$name','$REMOTE_ADDR','$now','$now')",$con);// 新增一個使用者到線上清單
}
}

else{//如果使用者沒有登入
$query=mysql_query("select count(userip) from online_list where userip='$REMOTE_ADDR'",$con);//查詢線上到表是否已經有訪客的ip 位址
$result=mysql_result($query,0);//查詢的結果
if($result!=0){//如果訪客的ip位址已經在線上清單了
@mysql_query("update online_list set second_time='$now' where userip='$REMOTE_ADDR'",$con);//更新訪客的最後線上時間
}else{//如果使用者清單沒有訪客的ip位址
@mysql_query("insert into online_list(username,userip,online_time,second_time)values('訪客 ','$REMOTE_ADDR','$now','$now')",$con);//新增一個訪客到線上清單
}
}
$del_time=$now-$update_time;
@mysql_query("delete from online_list where second_time<$del_time",$con);//刪除在$update_time秒內沒有動作的使用者
?>

———————————————————

About

發佈留言