本文实例讲述了php实现统计网站在线人数的方法。分享给大家供大家参考。具体实现方法如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
<?php
function getIpAddress() { // 取得当前用户的IP地址
if ( getenv ( 'HTTP_CLIENT_IP' )) {
$ip = getenv ( 'HTTP_CLIENT_IP' );
} elseif ( getenv ( 'HTTP_X_FORWARDED_FOR' )) {
$ip = getenv ( 'HTTP_X_FORWARDED_FOR' );
} elseif ( getenv ( 'REMOTE_ADDR' )) {
$ip = getenv ( 'REMOTE_ADDR' );
} else {
$ip = $_SERVER [ 'REMOE_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分钟不刷新页面就
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 > 900) {
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 ;
?>
|
希望本文所述对大家的php程序设计有所帮助。