|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!1 M2 Q: }+ i1 A/ R/ Y4 \5 i* V
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。: d$ j- o+ q1 \- P _! Z0 g0 C7 s4 D
首先我创建MYSQL数据库表。
9 S; _- c; w' A# Y) }CREATE TABLE tablename (
8 M" n( ~, }( u$ u% j( M9 }( lfield type(max_length) DEFAULT 'default_value' (NOT) NULL2 }% y1 \0 V& m/ |/ F5 ?& O* \
}可以使用的SQL语句。
! v/ A9 ]1 y, e6 _% h* }CREATE TABLE useronline (
& S9 R$ [) Y- ptimestamp int(15) DEFAULT '0' NOT NULL,
6 y5 r: Y e; e, ]8 ]) _7 I3 Yip varchar(40) NOT NULL,& ]- z/ k3 T5 N1 ^ Y
file varchar(100) NOT NULL,
2 T" J- z6 U9 G+ E* m+ r7 |PRIMARY KEY (timestamp),8 f! U. S( I* u+ `( Z( r! G
KEY ip (ip),
: R8 A. u3 Q: c& }KEY file (file)% g" G; T2 W% @, R& _
);下面我们是PHP脚本,首先我定义MYSQL的信息。' ?/ V. p; k& z7 R5 H2 m
$server = "localhost"; //你的服务器- f8 \/ w7 g8 l3 w- E
$db_user = "root"; //你的mysql的用户名
& a" q' B1 t4 A I ]# B$db_pass = "password"; //你的mysql的密码# {6 W* v9 Q" z
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)4 D/ ^' x. |2 i9 o( _; [5 A2 J( d
$timeoutseconds = 300;取当前时间。
% P6 M2 Z" ~5 O* }3 _1 W$timestamp = time();上面的完整代码:" r- b5 `* v7 |, B# m
<?php. ]6 K [" Q: e3 }$ }! a1 A
$server = "localhost"; //your server
7 }- Z) r: H. K! h1 u# M+ Y' `$db_user = "root"; //your mysql database username
6 d0 _, R2 b! ?" ]0 D" g$ ]$db_pass = "password"; //your mysql database password if any- k, O" G2 R6 y9 R
$database = "users"; //the db name
7 f" K3 w z8 }0 T% d! x0 j0 w$timeoutseconds = 300;//timeoutseconds limit
5 ?4 l+ Z" p5 r1 V/ x//get the current time
) C# v+ C' C9 }8 T7 k! W" }$timestamp = time();
. Y: K/ Z. A& P7 i+ x$ C4 \+ f//calculate the lowest timestamp allowed
7 g( H5 z. [4 r. g* |$timeout = $timestamp-$timeoutseconds;' R% `9 R" o2 C; c# I$ m1 T2 B
?>连接mysql' N1 t- q$ p* H" U+ p6 G1 a
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
! R0 f3 O, D" N* A" _mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
0 w/ _$ r1 i# e q+ W/ Jmysql_connect($server, $db_user);查询数据库的代码:
. j6 }: i4 t- J7 b+ X+ fmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
- w' o# l- M7 x9 }$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
, C. g: ]1 p% ]. [6 \' i('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");6 X- g. k, w+ _( C9 }
如果用户用错误信息的话,这样处理。
4 Y- A R3 O) j+ i" F9 Mif(!($insert)) {
" n" m- A, R, a3 j" c! eprint "Useronline Insert Failed > ";) l* t0 O: l0 W: t
}然后实现当超过设置的时间就删除该用户记录。
) f' c/ q" k$ R; K) f7 y, [$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
, E y6 y C% O1 Xif(!($delete)) {
* W# C, C8 K- l; |- q& E: r. Gprint "Useronline Delete Failed > ";. [6 y+ B: b8 `
}下面我们解决数据库中不同IP的问题
9 k! C) R, U! [+ `+ p$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用8 p2 h: H) ]9 s0 o: t
mysql_num_rows(query);来统计用户,代码如下。
, Z* d: V8 g2 G5 @* Z$user = mysql_num_rows($result);最后关闭数据库。
$ A: {- i" s1 c2 t' G9 W6 h+ cmysql_close();显示在线的人数。3 N$ ` r* r" A
if($user == 1) {
; w! H; d; e9 Lprint("1 user online\n");
8 w: F% m0 F2 m# O7 w} else {& a- K' e; y( z
print("$user users online\n");1 s3 l% o; c0 ]+ I6 s( T# }7 `, B7 A
}最终把上面代码写成一个PHP文件如下。
4 T% T' g3 M! S0 U. T0 J* M<?php8 w" e. @2 n4 y5 N; o: M- a; X
//Put your basic server info here1 h! A& w/ B( }6 {2 O
$server = "localhost"; //normally localhost4 I- j; b4 m; i1 X& d2 e, c
$db_user = "root"; //your MySQL database username
8 m! V$ E+ ]7 {0 O; m8 \$db_pass = "password"; //your MySQL database password$ ~: x6 W2 l' n, M
$database = "users";" s) ^# z$ ]4 Y# B$ o* d
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
7 {( C$ p0 }8 k$ F// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
X6 d: A. t2 n* B: f// $timeoutseconds seconds)
! _* X3 @' h: o0 r/ I5 X; A//this is where PHP gets the time
( ^, ~* P5 ]# j" B, O$timestamp = time();
4 c3 N& B5 c7 H7 o# F//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
+ e6 C$ \9 y* z+ R$timeout = $timestamp-$timeoutseconds;+ D0 ?! N. Y: q R x! w
//connect to database6 t; Y3 j/ Q4 \% a) r/ Y9 U, j
mysql_connect($server, $db_user);
" r. Z* @/ G* T4 g//add the timestamp from the user to the online list
) f4 {7 j6 U1 a6 G0 F' n1 C$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
% K. i0 ?7 x! W/ u; ?- w9 N('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
3 u T- T3 V2 p' Q- n3 ]if(!($insert)) {
/ q5 s+ Z8 J' P/ L( Z+ F" bprint "Useronline Insert Failed > ";
6 L2 P& i* G4 a7 i- S% |' O* F7 o}5 M" ]6 q& K+ ?; H P+ T5 {
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
- J, N$ \4 {5 C1 B: b2 ?+ x% f$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");' i; E% y9 w# }. u
if(!($delete)) {5 c8 Y& f$ A. }: s b* V
print "Useronline Delete Failed > ";3 x6 m+ ^$ U: a% z
}7 r; h: I+ p( y! ?
//select the amount of people online, all uniques, which are online on THIS page
/ d- V" d% A# e) B. Y; J* B$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
; x/ [! A; Z+ Aif(!($result)) {! y' _4 _- L% S8 y4 g
print "Useronline Select Error > ";; v3 t3 U+ e7 C5 |/ Z
}
) R) [8 G) N7 Y: M( B5 }0 [+ i//Count the number of rows = the number of people online* `. }! |1 K0 _; ?$ K0 `
$user = mysql_num_rows($result);. ^( o$ F7 n- D" m. }4 W( q( |. x
//spit out the results& h4 n& f, L/ [* l
mysql_close();) z+ ~7 I7 }$ L. Z0 x
if($user == 1) {& ^+ H0 q1 e4 Y0 V7 ^
print("1 user online\n");' I' v" h+ {/ n' f
} else {
# \2 L2 X i5 N. J2 |5 Q9 Qprint("$user users online\n");* r+ o- q, L3 s0 e
}
( t" ?- h/ J- s* A) }8 ]8 [?>2 f6 o! Y. s0 j
% E% y% \! m0 \! Z
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
) n5 w! ^% X# U; R6 @5 Z; Y时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。8 [/ R+ \0 ~& Q
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。' L3 u# ~: I' B: [2 A' h' @
当然啦,这两款主机也是相当不错的。
: k7 ?2 r: w5 | J0 Z) W智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
! o; H8 }( Y7 O, G1 i7 k标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
; p3 R4 E p+ d) [6 P/ ^1 E提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ ! C+ ~- s' d) [0 {
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
" O0 V# G7 Q* K# `+ i% G自己加QQ去问吧。 |
|