|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
/ t) I0 ~7 ^9 @$ E' o我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
4 E, S3 w% R6 l! K1 z( j ~9 o# w o首先我创建MYSQL数据库表。
+ S n* y/ r) j; z8 ECREATE TABLE tablename (
: ]# [3 e- f- @( i( t! Y, X- Q$ F9 S& Wfield type(max_length) DEFAULT 'default_value' (NOT) NULL% T# s5 w @7 t. F8 h! t5 W
}可以使用的SQL语句。( x) z+ d8 }$ `; `, V. j% |
CREATE TABLE useronline (
" q S" x' D1 b3 [timestamp int(15) DEFAULT '0' NOT NULL,
3 _; L3 D" @3 O2 h8 i2 k9 _; Qip varchar(40) NOT NULL,( W- P/ r1 C: m6 E; L* s
file varchar(100) NOT NULL,
/ ]; r9 B1 E' G. u6 g7 X" rPRIMARY KEY (timestamp),! ?! O3 N1 |6 V& [' e7 b; e2 P6 K
KEY ip (ip),/ I5 P8 Q- ~( Q1 o; O7 B$ | b
KEY file (file)1 s6 N2 l) {+ w
);下面我们是PHP脚本,首先我定义MYSQL的信息。6 J$ Z3 d J7 n7 u0 o5 j
$server = "localhost"; //你的服务器0 l0 u0 o( ]5 i5 v$ o: T/ P
$db_user = "root"; //你的mysql的用户名
; ]9 j( t- q" a/ e0 j$ {! i, ?: Z7 Q$db_pass = "password"; //你的mysql的密码
8 w: K# C0 ?" y9 Y+ J/ E0 B$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)) i, h F, T/ p4 O
$timeoutseconds = 300;取当前时间。
4 [* K9 _% }2 Q$timestamp = time();上面的完整代码:3 V4 K) f+ n% f& T' K- |0 j. c
<?php; O" v! m' z7 s" z" [2 Q% [5 r) _
$server = "localhost"; //your server; C' \0 X R* r( E( r
$db_user = "root"; //your mysql database username r; b/ i+ [( ?+ t' C
$db_pass = "password"; //your mysql database password if any" }! M$ f7 M+ L) I6 {' B
$database = "users"; //the db name
" a- v3 `. Y2 J) M+ Y$ R3 S$timeoutseconds = 300;//timeoutseconds limit8 `* B" c8 D5 a# R4 S
//get the current time/ o% z1 M3 ]/ B4 p5 S( A
$timestamp = time();
) \$ Q5 N5 ~! c% ]5 e//calculate the lowest timestamp allowed# y; Y* }8 C6 Y1 ^
$timeout = $timestamp-$timeoutseconds; B# x4 W" {+ N
?>连接mysql
/ U1 ?) b/ S9 f: a& bmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
' @1 u: L% ~' \+ G* U+ |+ G9 w8 cmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接2 m9 D+ E3 w1 v' C/ \. b+ g% @
mysql_connect($server, $db_user);查询数据库的代码:: i: C- Y- e H9 A+ |' b2 w4 a p
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
' F' ~9 m; O: s1 X( @4 g) ?$ c: b$insert = mysql_db_query($database, "INSERT INTO useronline VALUES0 w/ H7 f# z& {5 P0 W# M
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");; e5 Q; g5 a: a& d% i
如果用户用错误信息的话,这样处理。
/ i ]- I6 i! s9 G7 D( b9 g/ M% bif(!($insert)) {- @ S+ y3 W8 Q5 l' }1 a
print "Useronline Insert Failed > ";
1 l' T: b( c$ ]) S}然后实现当超过设置的时间就删除该用户记录。) e# X* I) M |1 e& s N
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。$ p, S8 P0 Q3 H( k y* p
if(!($delete)) {
% h/ {# K- e q1 |print "Useronline Delete Failed > ";' F( s% c: W& x* {: S
}下面我们解决数据库中不同IP的问题
* Q/ Y5 ]0 c/ w. G* z$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用- `* J% q6 u9 v& W2 g
mysql_num_rows(query);来统计用户,代码如下。
+ E# u6 k; q$ m+ a& w* `6 T2 x$user = mysql_num_rows($result);最后关闭数据库。9 | d4 Y0 ^7 ?" X( E- q& P* W
mysql_close();显示在线的人数。" Z. l- `9 L# F6 F0 ]- A3 r
if($user == 1) {
+ C7 v8 Q. f3 @1 sprint("1 user online\n");' ~4 G1 n+ u: W: C
} else {: `* R! D3 ]+ e
print("$user users online\n");' G( X7 F# i& {; {
}最终把上面代码写成一个PHP文件如下。
9 a7 C& l. V0 B8 }9 @) G/ ?8 E<?php/ b1 \, v. ~; T' `( Z- t
//Put your basic server info here8 |' v: C$ Y1 i- p6 C0 L6 G
$server = "localhost"; //normally localhost& C7 v V; I6 v+ C+ s
$db_user = "root"; //your MySQL database username
$ ^$ z- W5 X: E' F2 h1 L$db_pass = "password"; //your MySQL database password3 g/ V' |8 m; R& X5 o3 O9 _ N
$database = "users";
6 Y8 K9 D- p/ g0 A3 D' X g$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
/ |7 J: X% x$ B# h" F( v// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last+ @) ]8 ^# R' \4 H$ R! l1 ?0 c
// $timeoutseconds seconds)& I# X% M7 \, ^9 f c
//this is where PHP gets the time
8 X# s, L! q4 y: f9 a& s2 U3 ]$timestamp = time();( P, G1 G, s2 C2 @! Q. a9 n' ~' A; Y( w
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed* {7 l( S( D$ I. ^6 g: N7 U
$timeout = $timestamp-$timeoutseconds;
: B4 h+ d o1 p//connect to database- x) L/ z+ M) W
mysql_connect($server, $db_user);2 J8 Q2 L* p' j* i/ ?' y+ i7 \& K
//add the timestamp from the user to the online list/ P: q! P( z1 A5 \3 V
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES9 k5 a; \: a, V: z0 R0 Z- e
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");: X$ s& L1 M9 P
if(!($insert)) {8 v- b5 b: M- u2 e; c
print "Useronline Insert Failed > ";! h- `6 g4 h# |9 { l$ {# {4 N
}9 n8 B4 H+ k' h3 P' @1 V6 ?
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
; _( O' y' e! }/ ?7 u2 q& C$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
9 F7 x, N7 u3 o4 I; uif(!($delete)) {0 X9 p( ~* e' S7 v! j7 J( ?
print "Useronline Delete Failed > ";
. L1 X4 Q4 e' W8 F}$ l! I( o1 {- q; t9 W; P; @
//select the amount of people online, all uniques, which are online on THIS page
7 m; k8 y& S8 R7 g/ H3 K0 Z$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");4 B" j' H6 z }/ t+ ?8 B
if(!($result)) {
6 g0 T+ A6 Q0 f4 R* Lprint "Useronline Select Error > ";3 Q/ p: r6 I) J3 f$ |/ m2 Z O; Y
}
: ], C4 ]( |, ?7 q# B8 f//Count the number of rows = the number of people online" _' e& v" _1 `- v2 L+ O/ ^
$user = mysql_num_rows($result);
9 B/ \0 Y- {0 L+ U/ K: N2 R. ?+ x//spit out the results
/ [* Z" A7 V9 h: @/ z8 ~mysql_close();9 z }8 r- {- K$ I5 `( |) E8 Z
if($user == 1) {/ B; K0 a, N% {3 m7 T% U# U9 Z
print("1 user online\n");' P E( D5 H, ^' q* \/ n) M
} else {' a/ r4 j9 M, h( {8 G4 A4 i
print("$user users online\n");
; r6 o9 P( e* G}
% s! u% P7 t' @! \. |- l?>
9 n9 D3 }; m5 L2 r: v: T 4 M' }, I2 {, U2 `. x
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。0 I8 [/ Q0 `% q* D1 E
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
8 U4 w6 \6 C* V我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
7 I1 ?3 n9 ?) M) l- C当然啦,这两款主机也是相当不错的。
7 _5 X! t2 _8 m5 b, Y0 P" h; b智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年# w- i4 s& _$ A, x- [& h
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
! N' y+ a3 c. X3 [8 A' _/ j7 M" f提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 3 s/ o$ D" S5 T& j
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55 Z0 x$ L8 z1 }6 u3 m% s
自己加QQ去问吧。 |
|