方案一:
不斷的采用ajax請求服務(wù)器的文件獲取數(shù)據(jù)卵迂,js無刷新更新模板數(shù)據(jù)钠四。顯示真實數(shù)據(jù)
var count_person = function (){
$.post('http://www.****.com/xxx.php?',{join:'jointal'},function(data) {
$('#shownum').html(data);
},'json');
}
setInterval('count_person()',3000);
PHP統(tǒng)計當前在線人數(shù)
一泽疆、開發(fā)環(huán)境
1要门、Windows+Apache+MySQL+PHP的環(huán)境榜晦。
2冠蒋、文本編輯器:Sublime。
二乾胶、主要技術(shù)
PHP
三抖剿、具體步驟
本文主要是通過IP來區(qū)分不同的訪問用戶,然后將用戶信息保存在txt文本中來實現(xiàn)統(tǒng)計當前在線人數(shù)的功能识窿。
3.1斩郎、創(chuàng)建php文件
創(chuàng)建一個名為“countOnline.php”的PHP文件用來實現(xiàn)統(tǒng)計當前在線人數(shù)的功能。
3.2喻频、統(tǒng)計在線人數(shù)功能代碼
(1)定義保存用戶信息的文本
$user_online="count.txt";? //保存在線用戶信息的文件
touch($user_online);? // 若無此文件則創(chuàng)建
(2)定義超時時間
$timeout=30;? // 30秒內(nèi)沒動作缩宜,認為掉線
(3)文件內(nèi)容讀取
$user_arr=file_get_contents($user_online);// 將文件內(nèi)容賦予一個字符串
$user_arr=explode("#",rtrim($user_arr,'#'));//將字符串分割為數(shù)組
(4)獲取遠程在線用戶信息
$temp=array();? // 放置所有用戶信息
foreach($user_arras $value){
? ? ? ? $user=explode(",",trim($value));
? ? ? ? // 如果不是本機IP,并且時間沒有超過,則放入數(shù)組temp中
? ? ? ? // getenv('REMOTE_ADDR')是獲取遠程IP地址(在IIS下無效果)甥温,$_SERVER['REMOTE_ADDR']也可以獲取IP地址锻煌。
? ? ? ? ? ? ? ? ? if(($user[0]!=getenv('REMOTE_ADDR'))&&($user[1]>time())){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? array_push($temp,$user[0].",",$user[1]);
? ? ? ? ? ? ? ? ? }
? ? ? ? }
(5)保存本用戶的信息
array_push($temp,getenv('REMOTE_ADDR').",".(time()+($timeout)).'#');
$user_arr=implode("#",$temp);
(6)以更新的形式打開文件
$fp=fopen($user_online,"w");
(7)對文件進行寫入
flock($fp,LOCK_EX);// 鎖定文件(保證同時只有一個用戶在對文件進行寫入操作)
fputs($fp,$user_arr);? // 寫入文件
flock($fp,LOCK_UN);? // 釋放鎖定
fclose($fp);? ? // 關(guān)閉文件
(8)輸出當前在線人數(shù)至頁面
echo"當前有".count($temp)."人在線"; // 輸出當前在線人數(shù)
CSDN博客
img pchynaonao
php獲取當前在線人數(shù)的方法
發(fā)表于2013/12/30 16:57:14? 316人閱讀
下面分享一種利用php實現(xiàn)簡單的計算當前網(wǎng)站在線人數(shù)的方法,只是簡單的通過計算訪問者ip地址從而得出一個大致的結(jié)果窿侈,不能精確的計算當前在線人數(shù)炼幔,對精度要求過高的可參考本站文章:
php統(tǒng)計在線人數(shù),精確的統(tǒng)計在線人數(shù)的辦法
查看代碼打印
01
<?php
02
header('Content-type: text/html; charset=utf-8');
03
//author:www.phpernote.com
04
$online_log='count.txt';//保存在線人數(shù)數(shù)據(jù)的文件,
05
$timeout=45;//45秒內(nèi)沒有動作,則被認識是掉線
06
$entries=file($online_log);//將文件作為一個數(shù)組返回史简,數(shù)組中的每個單元都是文件中相應的一行乃秀,包括換行符在內(nèi)
07
$temp=array();
08
for($i=0;$i<count($entries);$i++){
09
? ? $entry=explode(',',trim($entries[$i]));
10
? ? if(($entry[0]!=getenv('REMOTE_ADDR'))&&($entry[1]>time())){
11
? ? ? ? array_push($temp,$entry[0].','.$entry[1].'n');//取出其他瀏覽者的信息,并去掉超時者,保存進$temp
12
? ? }
13
}
14
array_push($temp,getenv('REMOTE_ADDR').','.(time()+($timeout))."\n");//更新瀏覽者的時間
15
$users_online=count($temp);//計算在線人數(shù)
16
$entries=implode('',$temp);
17
//寫入文件
18
$fp=fopen($online_log,'w');
19
flock($fp,LOCK_EX);//注意 flock() 不能在NFS以及其他的一些網(wǎng)絡(luò)文件系統(tǒng)中正常工作
20
fputs($fp,$entries);
21
flock($fp,LOCK_UN);
22
fclose($fp);
23
echo '當前有'.$users_online.'人在