php 统计 在线 人数,PHP 统计在线人数

function getIpAddress() { // 取得当前用户的IP地址

$ip = '127.0.0.1';

if(isset($_SERVER)){

if(isset($_SERVER["HTTP_X_FORWARDED_FOR"])){

$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];

}else if(isset($_SERVER["HTTP_CLIENT_IP"])) {

$ip = $_SERVER["HTTP_CLIENT_IP"];

}else{

$ip = $_SERVER["REMOTE_ADDR"];

}

}else{

if(getenv("HTTP_X_FORWARDED_FOR")){

$ip = getenv("HTTP_X_FORWARDED_FOR");

}else if(getenv("HTTP_CLIENT_IP")) {

$ip = getenv("HTTP_CLIENT_IP");

}else{

$ip = getenv("REMOTE_ADDR");

}

}

return $ip;

}

function writeover($filename, $data, $method = 'w', $chmod = 0) {

$handle = fopen ( $filename, $method );

! handle && die ( "文件打开失败" );

flock ( $handle, LOCK_EX );

fwrite ( $handle, $data );

flock ( $handle, LOCK_UN );

fclose ( $handle );

$chmod && @chmod ( $filename, 0777 );

}

function count_online_num($time, $ip) {

$fileCount = './count.txt';

$count = 0;

$gap = 900; // 15分钟页面不刷新清空对应IP

if (! file_exists ( $fileCount )) {

$str = $time . "\t" . $ip . "\r\n";

writeover ( $fileCount, $str, 'w', 1 );

$count = 1;

} else {

$arr = file ( $fileCount );

$flag = 0;

foreach ( $arr as $key => $val ) {

$val = trim ( $val );

if ($val != "") {

list ( $when, $seti ) = explode ( "\t", $val );

if ($seti == $ip) {

$arr [$key] = $time . "\t" . $seti;

$flag = 1;

} else {

$currentTime = time ();

if ($currentTime - $when > $gap) {

unset ( $arr [$key] );

} else {

$arr [$key] = $val;

}

}

}

}

if ($flag == 0) {

array_push ( $arr, $time . "\t" . $ip );

}

$count = count ( $arr );

$str = implode ( "\r\n", $arr );

$str .= "\r\n";

writeover ( $fileCount, $str, 'w', 0 );

unset ( $arr );

}

return $count;

}

$time = time ();

$ip = getIpAddress ();

$online_num = count_online_num ( $time, $ip );

echo $online_num;

?>

效果图:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值