PHP 统计在线人数

  1. <?php   
  2. function getIpAddress() { // 取得当前用户的IP地址   
  3.     $ip = '127.0.0.1';   
  4.     if(isset($_SERVER)){   
  5.         if(isset($_SERVER["HTTP_X_FORWARDED_FOR"])){   
  6.             $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];   
  7.         }else if(isset($_SERVER["HTTP_CLIENT_IP"])) {   
  8.             $ip = $_SERVER["HTTP_CLIENT_IP"];   
  9.         }else{   
  10.             $ip = $_SERVER["REMOTE_ADDR"];   
  11.         }   
  12.     }else{   
  13.         if(getenv("HTTP_X_FORWARDED_FOR")){   
  14.             $ip = getenv("HTTP_X_FORWARDED_FOR");   
  15.         }else if(getenv("HTTP_CLIENT_IP")) {   
  16.             $ip = getenv("HTTP_CLIENT_IP");   
  17.         }else{   
  18.             $ip = getenv("REMOTE_ADDR");   
  19.         }   
  20.     }   
  21.     return $ip;   
  22. }   
  23. function writeover($filename, $data, $method = 'w', $chmod = 0) {   
  24.     $handle = fopen ( $filename, $method );   
  25.     ! handle && die ( "文件打开失败" );   
  26.     flock ( $handle, LOCK_EX );   
  27.     fwrite ( $handle, $data );   
  28.     flock ( $handle, LOCK_UN );   
  29.     fclose ( $handle );   
  30.     $chmod && @chmod ( $filename, 0777 );   
  31. }   
  32. function count_online_num($time, $ip) {   
  33.     $fileCount = './count.txt';   
  34.     $count = 0;   
  35.     $gap = 900// 15分钟页面不刷新清空对应IP   
  36.     if (! file_exists ( $fileCount )) {   
  37.         $str = $time . "\t" . $ip . "\r\n";   
  38.         writeover ( $fileCount, $str, 'w'1 );   
  39.         $count = 1;   
  40.     } else {   
  41.         $arr = file ( $fileCount );   
  42.         $flag = 0;   
  43.         foreach ( $arr as $key => $val ) {   
  44.             $val = trim ( $val );   
  45.             if ($val != "") {   
  46.                 list ( $when, $seti ) = explode ( "\t", $val );   
  47.                 if ($seti == $ip) {   
  48.                     $arr [$key] = $time . "\t" . $seti;   
  49.                     $flag = 1;   
  50.                 } else {   
  51.                     $currentTime = time ();   
  52.                     if ($currentTime - $when > $gap) {   
  53.                         unset ( $arr [$key] );   
  54.                     } else {   
  55.                         $arr [$key] = $val;   
  56.                     }   
  57.                 }   
  58.             }   
  59.         }   
  60.         if ($flag == 0) {   
  61.             array_push ( $arr, $time . "\t" . $ip );   
  62.         }   
  63.         $count = count ( $arr );   
  64.         $str = implode ( "\r\n", $arr );   
  65.         $str .= "\r\n";   
  66.         writeover ( $fileCount, $str, 'w'0 );   
  67.         unset ( $arr );   
  68.     }   
  69.     return $count;   
  70. }   
  71. $time = time ();   
  72. $ip = getIpAddress ();   
  73. $online_num = count_online_num ( $time, $ip );   
  74. echo $online_num;   
  75. ?>  
<?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;
?>

 

效果图:

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值