|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
8 S# g7 i5 R, b |+ }" K$ G6 w! \我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
6 ]' v o9 F0 n9 H7 \7 \- J首先我创建MYSQL数据库表。
( h6 F6 D: Z9 c. M" nCREATE TABLE tablename (
( j# H5 `5 a" A* y, cfield type(max_length) DEFAULT 'default_value' (NOT) NULL6 F' X* B( P+ P; ]+ G" c0 e
}可以使用的SQL语句。' Y C. J0 [6 o, S
CREATE TABLE useronline (
( M; _0 V3 ^! C+ X* t0 l$ btimestamp int(15) DEFAULT '0' NOT NULL,
8 t5 P# V4 p; M# T: L/ Pip varchar(40) NOT NULL,/ g0 g4 ]+ G* m: l' f
file varchar(100) NOT NULL,
, M/ I( W0 o. i" S7 v$ p- NPRIMARY KEY (timestamp),, H* E% V- z1 {! T: B
KEY ip (ip), H G; |- g; m z$ O5 v7 L
KEY file (file)8 M. B- K( x# [' u
);下面我们是PHP脚本,首先我定义MYSQL的信息。
2 V3 {% w0 D; A$server = "localhost"; //你的服务器9 o5 V( a0 Q d) }' i7 n* |
$db_user = "root"; //你的mysql的用户名
! [8 N6 X/ L$ `. h$db_pass = "password"; //你的mysql的密码" N- e& ], N; A b1 o$ z3 i" {
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
" ^: ^7 Z0 O4 Q) _$timeoutseconds = 300;取当前时间。
9 ~3 f( _, W3 f1 J+ p$timestamp = time();上面的完整代码:6 X/ M- ?) Q& h& s/ k4 P
<?php H( d, d( G5 K9 V9 @0 h
$server = "localhost"; //your server+ j% N& y* w! y6 q
$db_user = "root"; //your mysql database username& ?: O9 ^9 {* I+ o- U0 N
$db_pass = "password"; //your mysql database password if any
9 w/ }: H4 b: y' P& ]$database = "users"; //the db name
4 x! _* Q I0 D$timeoutseconds = 300;//timeoutseconds limit
3 }- R; `0 i9 x//get the current time3 ~1 j. Z, l. ^
$timestamp = time();* G; E4 f1 C, F. F2 d
//calculate the lowest timestamp allowed
1 U) w: p1 }0 p8 [: n3 M& N; E3 Z$timeout = $timestamp-$timeoutseconds;. D9 y1 K* P6 @! f3 x. P, i1 M- b5 R
?>连接mysql
a2 `. _. d* n# o7 n8 {mysql_connect('localhost', 'username', 'password');也允许使用变量形式。 T! p7 @. D, \" t) E% L
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接2 h* |" n0 W1 Z* U) z- k
mysql_connect($server, $db_user);查询数据库的代码:$ p+ c# B% M& K7 p2 i: p" |; O
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
3 L) v% z8 J# y# k' m) a$insert = mysql_db_query($database, "INSERT INTO useronline VALUES* U; ^# i% |% D) w$ D
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");9 ^3 ]7 x; x0 }3 e0 ]+ M
如果用户用错误信息的话,这样处理。
: N9 C. x( R5 A& oif(!($insert)) {8 |0 a$ j+ b$ _$ A5 F. j$ a) i2 R
print "Useronline Insert Failed > ";, F8 e; P: f d2 o9 F+ G9 O1 e
}然后实现当超过设置的时间就删除该用户记录。
' n$ @: N' L/ S$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。0 [2 s! W4 u* Z; q1 j2 e& O
if(!($delete)) {8 C! y" Q0 L7 a! \1 a
print "Useronline Delete Failed > ";3 ^1 k( p" A3 g/ m: j
}下面我们解决数据库中不同IP的问题; r R9 k* @+ B
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
* v+ T6 d. ~8 s( tmysql_num_rows(query);来统计用户,代码如下。
1 _* L3 {( u- q' i9 }! p8 J$user = mysql_num_rows($result);最后关闭数据库。5 U, }% X, K! z! o) Y. q( ~
mysql_close();显示在线的人数。
- `( A q3 L1 Q6 u; e6 Vif($user == 1) {1 d& R8 R u9 P2 D' d
print("1 user online\n");
! N* t% X3 d2 Q} else {( m3 [7 u) D+ }) f+ P- {+ }3 F, _3 s
print("$user users online\n");
$ u: z4 R) ~6 M2 D. p X; F+ u}最终把上面代码写成一个PHP文件如下。
6 M, k# m5 g, L0 ]<?php1 g$ p: P( b) A3 d
//Put your basic server info here
' e2 q: e7 r5 o; |8 e" H, P$server = "localhost"; //normally localhost9 A4 p% j' q8 b6 D
$db_user = "root"; //your MySQL database username
$ L7 `4 N' [- Y+ F# I! C7 l$db_pass = "password"; //your MySQL database password
& ~8 R' h3 S& {( H$database = "users";# @8 S& D6 O, f" L/ o7 U1 t
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are0 l: i4 h% v! T& F: f$ s
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
i" g: r+ f$ j2 ]% Q4 e; }// $timeoutseconds seconds)
2 h) [3 i J& [: g//this is where PHP gets the time
2 T7 _9 D5 J" H. h2 t$ }$timestamp = time();
+ `7 P2 p, i- X- f; O6 [//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed/ R6 D( P! w. F7 Q
$timeout = $timestamp-$timeoutseconds;. ~8 k) J s8 t7 G1 ]
//connect to database% G% y7 S) N8 C! v" {, G
mysql_connect($server, $db_user);9 u. R% F% G4 N1 q
//add the timestamp from the user to the online list
/ k! x1 J: Y7 X6 A* s$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
9 W4 u3 w$ I# I! {: b('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
% _% R0 s4 z; R4 x/ l% fif(!($insert)) {
. g9 c! S2 ?' rprint "Useronline Insert Failed > ";
; d" b n6 D3 o' k! x6 S, X/ F}
& H3 `2 l# R, b4 X- g/ X/ _7 `: a+ m//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
- g O8 C4 r+ O @$ E# A$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
9 ^) k5 d7 U1 w7 s5 Y2 U4 \if(!($delete)) {/ U) k, G6 t6 d* {3 k/ p* C
print "Useronline Delete Failed > ";, M# x/ a) ] o% G7 r5 c% M7 v
}
4 p+ Z5 [* b9 d3 \" g/ P, z//select the amount of people online, all uniques, which are online on THIS page
; X2 T, S% S- g6 v7 F# D* Y0 \, i$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
2 d$ N6 L! J/ y! N! S* V# aif(!($result)) {
% ]+ r3 n- E/ H) F; c9 bprint "Useronline Select Error > ";
0 T9 O& Q5 `6 V* `! g}; i2 C* v. E3 a9 p! X# V) F
//Count the number of rows = the number of people online
' J( ~$ C7 X. K \/ S# G8 C$user = mysql_num_rows($result);
2 n" s( n, C6 A3 N3 R//spit out the results
' {4 ~3 m1 ?7 [mysql_close();) a' {6 S3 e* Q, ^1 i' v+ p
if($user == 1) {+ |7 k3 W* z6 M$ m0 Z5 N1 p- V
print("1 user online\n");
6 ~5 E# A6 M7 i6 f9 ~} else {$ m3 |* a r) z
print("$user users online\n");1 d( A7 h6 ?* G0 C; O
}
; v/ _ T5 r, C1 v6 D( e?>8 o# M! ^8 [3 a: }+ I
* L) }- L* V8 x D" W
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。/ ?$ M; f+ Y: M/ J8 Z9 K, B, o
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
7 d% K- j6 u! s0 p: G我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
" J8 r, D2 l& j) ~1 j7 h& _2 q当然啦,这两款主机也是相当不错的。0 f6 ?4 B0 D( F; Z
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年5 M4 g7 q; T- k, O6 S$ r; U5 S- b
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年 k9 h: m/ t8 H( J7 H' \
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ % A: D: u5 M1 ]# {7 c( D9 A
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
- G+ z* k P5 {2 b/ P自己加QQ去问吧。 |
|