
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!. ~4 ?+ i, ? R
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
6 J# m$ p& u8 k7 z. |) Z+ z首先我创建MYSQL数据库表。1 k. V N+ E V8 X6 O3 j. _
CREATE TABLE tablename (; ~+ J' C8 g3 r2 D: s: C
field type(max_length) DEFAULT 'default_value' (NOT) NULL
4 o, {0 M* g- L0 f) T2 F( A/ q}可以使用的SQL语句。( p$ w; R5 y/ V8 E- F8 z
CREATE TABLE useronline (
$ y5 Y4 y8 E7 r! r+ F# M* B4 c' {. [timestamp int(15) DEFAULT '0' NOT NULL,' F( B" H" T @7 J
ip varchar(40) NOT NULL,
2 \* k- R( x# c, @9 M( t7 {5 | hfile varchar(100) NOT NULL, }2 [# B: o. E4 l( ~4 G8 X# a4 h
PRIMARY KEY (timestamp),
6 u6 E7 e) P8 O% j" v6 hKEY ip (ip),, i! C8 O# m1 T- H$ e% e
KEY file (file)
0 {0 U/ L3 n; h);下面我们是PHP脚本,首先我定义MYSQL的信息。9 I" w* ^1 c: X5 U: R! I
$server = "localhost"; //你的服务器
% i/ |6 t9 f. W! `3 a& r$db_user = "root"; //你的mysql的用户名4 `( l& U* b; T% X7 A ~3 a
$db_pass = "password"; //你的mysql的密码9 ^6 c9 {+ J' R. t: }: E
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
8 n: l _0 ?: O$timeoutseconds = 300;取当前时间。
- O. Q, O3 o) I, |$timestamp = time();上面的完整代码:
9 v. Y0 |2 b/ N* z; `<?php
0 \: h) _$ B2 N* v, h$server = "localhost"; //your server. O0 ` |3 ^) {8 R+ X4 o( I
$db_user = "root"; //your mysql database username3 m$ D" Q6 ^- Y; `/ ~! h! J. t9 ]
$db_pass = "password"; //your mysql database password if any" b& B3 r( W4 L% Z2 H6 e+ l
$database = "users"; //the db name
8 C' p. `" y+ c3 E9 X* V$timeoutseconds = 300;//timeoutseconds limit
# s" A( p0 k" s/ l//get the current time
* z N7 k+ z- q& s$timestamp = time();+ i3 K" f. J f% q! g
//calculate the lowest timestamp allowed; y+ ?) a0 A i1 ?9 h4 F/ u
$timeout = $timestamp-$timeoutseconds;
] {9 l; t6 c: N3 s; G2 l- f?>连接mysql+ a5 z& w# p% E- d
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。" d" t3 P) w$ a& H: E: h. P- t
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接+ I X1 ]) T' ~. [, P
mysql_connect($server, $db_user);查询数据库的代码:* V7 [* Z9 ]; p3 `/ q1 A
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。% o! b5 f% k( _! O
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES! @* d7 a0 K/ @2 W$ _2 q2 M
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
1 ~( q3 Z' n j4 P g' y7 ]# H5 x如果用户用错误信息的话,这样处理。
6 ~" Z; u5 T. f& o8 h5 R/ Y/ R1 Pif(!($insert)) {; `7 i+ b! R- J7 N( j) {0 b
print "Useronline Insert Failed > ";6 i+ y4 d; v3 s1 X6 H6 T
}然后实现当超过设置的时间就删除该用户记录。
: }0 d$ Q) d6 D$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
* C7 P% A4 d& R) k0 m! @if(!($delete)) {, N' y" s- z. G& L/ E
print "Useronline Delete Failed > ";! L& P1 B) |0 [
}下面我们解决数据库中不同IP的问题7 J K6 z2 T0 d% V+ W; R. e
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
7 ] a1 A/ G8 T3 s# }8 amysql_num_rows(query);来统计用户,代码如下。
$ `8 v8 {% I' P3 S# J$user = mysql_num_rows($result);最后关闭数据库。: m& w0 f4 Q3 }, G9 m8 l" i. W
mysql_close();显示在线的人数。
: M& {: c: }* s3 U2 t2 B9 J3 }if($user == 1) {
# U) T! V) B% a6 N2 i6 I/ B2 }7 v$ Gprint("1 user online\n");
# S- A T' d9 |. F# w* Q- A& c} else {
2 [3 Q- y" _1 g4 W2 O9 v, xprint("$user users online\n");. t( x, X+ c! s) ~% E! Q
}最终把上面代码写成一个PHP文件如下。
) L' H) ]" m2 `1 d+ e4 j5 s<?php
$ i6 n% k2 M+ K//Put your basic server info here* c; ^' m4 I: C' v% {2 \
$server = "localhost"; //normally localhost) O# A* N: h4 I/ v
$db_user = "root"; //your MySQL database username' ]$ J: v+ o) X! \1 b# @1 {
$db_pass = "password"; //your MySQL database password9 c, j$ \6 O" P' y; [& A! [
$database = "users";0 Y' k2 i9 m% l$ @7 r3 I* x* f. t
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are8 h& \1 f8 e0 b
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last* {2 |0 d" N( e4 A: t9 T2 d" x k9 P
// $timeoutseconds seconds)1 [' H+ m3 Q' \
//this is where PHP gets the time
# C: j9 ]& o# Y: ?$timestamp = time();; L. L: U9 ~+ t( }
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
! T7 L$ Z6 a) ?: l$timeout = $timestamp-$timeoutseconds;
3 V: O" [7 _% f- S3 P# s* ^//connect to database) F" w& N& J. q+ f) I
mysql_connect($server, $db_user);
7 q" A. q4 t8 R% X: s' U. ]# r//add the timestamp from the user to the online list) r" v w5 q( |' N% Y
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES9 u, E' m+ J: Y% d
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
& u7 N8 W( d9 @6 H3 U- N. S3 e( nif(!($insert)) {
! P+ V0 i1 O* E! b$ E& Zprint "Useronline Insert Failed > ";
& `# b7 m. c. ?; ] _}
" f+ O* ?5 e" t, A: b4 o//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
3 k6 V* m! Y) i# y- r$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
0 ~* \# ]1 s9 N5 a: M! Hif(!($delete)) {4 C9 Y7 X6 b6 M# g& P0 w. W
print "Useronline Delete Failed > ";2 R& e; _( d4 v; f# @% H7 c# {# s
}
. s) z' x" ^- ]! e2 E3 x//select the amount of people online, all uniques, which are online on THIS page/ I( T i; H) G
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");8 _- b1 `! h# a0 I% D+ j" y b
if(!($result)) {
# e+ m1 B- b8 H9 P5 h0 ^$ [# Wprint "Useronline Select Error > ";
, b5 a$ E7 K0 v% r0 S# _}0 r, E: d5 E: U* O
//Count the number of rows = the number of people online! u0 `/ S+ q6 Z/ M2 U6 L1 _
$user = mysql_num_rows($result);
5 S# _1 }8 z! j" i' h; _( Z//spit out the results- G5 o- O7 O# N% z5 F; u+ y
mysql_close();5 a* R( \# r" p- y
if($user == 1) {
& [2 ~0 k) ?, H: L- Q2 dprint("1 user online\n");5 j9 v( d+ `* x S; G7 w
} else {+ n: X, F4 V* M o
print("$user users online\n");) q2 y8 T4 f2 A
}
! Q& Y* R1 ]( Q3 D. E# h1 @# D! R?>2 K$ k8 p4 I, ~& m
- S) @$ e, z6 y) A7 B
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
2 g# d& j* N, I5 `$ H/ @( | @4 h% C; U时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
% l! Z0 Z' s- v3 b5 t' y9 _我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。; Q5 y( ~1 F; \# j! c8 `
当然啦,这两款主机也是相当不错的。0 [2 d/ X! h% S. K9 F
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
+ {$ i6 @2 b2 P9 k6 ]& ?$ i标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年" {1 _$ e0 q# c3 {
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
* {" z3 _& K9 O$ B空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55" f$ s/ n8 `" U) q+ l8 l
自己加QQ去问吧。 |
|