利用ASP或PHP实现软件/程序在线人数统计

易语言教程 3年前 ( 2017-08-26 ) 0条评论

原理说明

  把ASP或者PHP在线人数统计的代码上传到服务器或者虚拟主机,在易语言用“http读文件()”实现软件在线人数统计。

  服务器/虚拟主机是Linux系统,用PHP代码,Windows系统用ASP代码,如果也支持PHP可以用PHP代码。

效果截图

  也可以把此代码加到时钟控件,时钟周期设置1分钟,就是每1分钟刷新在线人数。网页代码内的时间要小于时钟周期的时间,比如时钟周期是1分钟,网页代码自动刷新时间要小于1分钟,建议55秒。

利用ASP或PHP实现软件/程序在线人数统计 第1张

ASP网页代码

<%
Dim RefreshTime, IdleTime, TotalUsers, OnlineUser(), Tmp(), Num, I, ID
RefreshTime = 55 '设置网页自动更新时间为55秒
IdleTime = RefreshTime * 1 '设置闲置时间为自动更新时间的3倍
Application.Lock

'清点所有连线到此网页的浏览器,然后将目前打开的浏览器的SessionID放入数组的最后面
If Application(Session.SessionID & "LastAccessTime") = Empty Then
If Application("TotalUsers") = Empty Then Application("TotalUsers") = 0
ReDim Tmp(Application("TotalUsers") + 1)
Num = 0
If Application("TotalUsers") > 0 Then
For I = LBOUND(Application("OnlineUser")) To UBOUND(Application("OnlineUser"))
ID = Application("OnlineUser")(I)
If ID <> Session.SessionID Then
Tmp(Num) = ID
Num = Num + 1
End If
Next
End If
Tmp(Num) = Session.SessionID
Application("TotalUsers") = Num + 1
ReDim Preserve Tmp(Application("TotalUsers"))
Application("OnlineUser") = Tmp
End If

'记录目前打开的浏览器的最近存取时间
Application(Session.SessionID & "LastAccessTime") = Timer

'检查所有连线到此网页的浏览器的最近存取时间,若与目前时间相差30秒以上,表示离线
ReDim Tmp(Application("TotalUsers"))
Num = 0
For I = 0 To Application("TotalUsers") - 1
ID = Application("OnlineUser")(I)
If (Timer - Application(ID & "LastAccessTime")) < IdleTime Then
Tmp(Num) = ID
Num = Num + 1
Else
Application(ID & "LastAccessTime") = Empty
End If
Next

'Num表示目前在线人数,若与Application("TotalUsers")不同,表示中间有人离线
If Num <> Application("TotalUsers") Then
ReDim Preserve Tmp(Num)
Application("OnlineUser") = Tmp
Application("TotalUsers") = Num
End If

Application.UnLock
%>
<BODY>在线人数:<%= Application("TotalUsers") %>人</BODY>
</HTML>

PHP网页代码

<?php
//首先你要有读写文件的权限
//本程序可以直接运行
$online_log = "count.dat"; //保存人数的文件,
$timeout = 55;//多少秒内没有动作,认为掉线
$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]."\n"); //取出其他浏览者的信息,并去掉超时者,保存进$temp
 }
}
array_push($temp,getenv('REMOTE_ADDR').",".(time() + ($timeout))."\n"); //更新浏览者的时间
$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."人";
?>

打赏

觉得文章有用就打赏一下博主

支付宝[扫一扫]打赏

支付宝[扫一扫]打赏

微信[扫一扫]打赏

微信[扫一扫]打赏
分享