|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
/ I3 i+ ~# l0 n6 n0 H我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
5 V! m, L' e/ F0 |6 B首先我创建MYSQL数据库表。
( u" Q7 |# a3 g6 l$ j+ z: LCREATE TABLE tablename (6 R1 y% L8 L; {- q
field type(max_length) DEFAULT 'default_value' (NOT) NULL. ~$ X6 o8 ]4 W* `/ h* i" x5 a
}可以使用的SQL语句。4 B: s; a% u- m \5 V0 l) b& {" q
CREATE TABLE useronline (3 H4 R. H2 F; E
timestamp int(15) DEFAULT '0' NOT NULL,$ g3 o- L1 }6 f# |7 ~" O# y2 q7 L
ip varchar(40) NOT NULL,# \) E2 Y/ n1 O. S) S4 ?
file varchar(100) NOT NULL,
?# n# T9 d2 V3 _$ |PRIMARY KEY (timestamp),3 g& f" Q. T! L+ a7 ~* x+ A
KEY ip (ip),: U2 n+ t$ p7 m$ S; o
KEY file (file)6 J9 X3 J9 }$ p& m" W! _9 P" i
);下面我们是PHP脚本,首先我定义MYSQL的信息。. [! C6 n; b5 h. H/ `
$server = "localhost"; //你的服务器
: R8 i( L6 A+ L( i8 d$db_user = "root"; //你的mysql的用户名3 j, @2 S8 O2 }3 ~0 j1 f
$db_pass = "password"; //你的mysql的密码
, W% f5 |4 Z. }0 z( K, k8 ?$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
+ ^, l- [$ `# [. i* R9 ~$timeoutseconds = 300;取当前时间。
2 _4 \$ T. l+ R; N. s( y9 |" X( m3 v$timestamp = time();上面的完整代码:
9 Z m) V! K6 o, W+ ~<?php
! j: O- E S* a0 K2 _, m# Z& b$server = "localhost"; //your server
( L! o, |0 }! f" d) T6 k$db_user = "root"; //your mysql database username
0 f: [" v9 k" \' K& {! C& [$db_pass = "password"; //your mysql database password if any# \' p h' f( n' X# |% i4 a
$database = "users"; //the db name
2 ~; v; [6 v6 |* J$ {/ I$timeoutseconds = 300;//timeoutseconds limit
4 |; T o% I& Y7 k# L! U( k6 j# k//get the current time; A* e K H/ d( }1 U
$timestamp = time();* o" V( E& ~" j& V& j
//calculate the lowest timestamp allowed
0 {, {$ X, C" Q" r" W$timeout = $timestamp-$timeoutseconds;1 C& Q) a a! e& U9 }
?>连接mysql
! P9 B! a: M4 {9 Wmysql_connect('localhost', 'username', 'password');也允许使用变量形式。2 [5 v. O! \ A( |: |* t) F
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接' q( I6 ~4 D& b" P- k" ?
mysql_connect($server, $db_user);查询数据库的代码:$ Q0 m$ r" u! \" D! b0 V. \
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
9 X& w3 \. W3 [) j* o$insert = mysql_db_query($database, "INSERT INTO useronline VALUES2 r/ L% r ]* k
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
: c3 d+ w# P5 ~/ Y) B如果用户用错误信息的话,这样处理。. Y- _+ m' h& Q: C O( _* W
if(!($insert)) {* |8 _' |+ u" x+ r
print "Useronline Insert Failed > "; b4 R0 \+ K d4 c# m( H
}然后实现当超过设置的时间就删除该用户记录。
: s. v, ^% U2 S0 s3 @$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
* @% F/ D" J' i. I) g" W& |if(!($delete)) {
( i% H& j1 b' c/ Nprint "Useronline Delete Failed > ";
z4 b* I! h, y% X}下面我们解决数据库中不同IP的问题! o. J" h8 \8 d3 K' l6 k" C
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
" |+ g; h* |1 u/ mmysql_num_rows(query);来统计用户,代码如下。
: U9 l! i j0 S2 S& H; P/ g$user = mysql_num_rows($result);最后关闭数据库。+ z0 n$ z3 w2 M6 s( f( @: L* b8 f
mysql_close();显示在线的人数。
( \7 P! ^! f! u4 T& [2 I3 Bif($user == 1) {
7 v3 G6 R: T0 M' v/ [: t0 y1 Bprint("1 user online\n");( X* r, P: B. W
} else {
- u1 \8 s$ }4 d* E8 Kprint("$user users online\n");9 @" D+ {) n. g6 A) D
}最终把上面代码写成一个PHP文件如下。2 k" h9 U& {% N2 O) s# ]( H
<?php' ]+ C7 s. u3 o
//Put your basic server info here- y# ?# D. \! g0 U, l
$server = "localhost"; //normally localhost
* G: M4 L ?- }! S3 f$db_user = "root"; //your MySQL database username% C E9 I- S$ N+ l# l! P9 e
$db_pass = "password"; //your MySQL database password
# h) [1 _2 G' n$database = "users";9 V# Z5 b( _( A5 G0 a# x
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are, u1 O4 v5 {/ E8 l, E6 E6 Z
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
& V$ O# q( W4 @. ^; B// $timeoutseconds seconds)# p8 G1 |: L" P
//this is where PHP gets the time
- a g; Q) k& t7 I/ ~$timestamp = time();
" G1 q/ P4 _5 @" r' A$ U3 g' t7 G//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed2 E. [6 ^+ P; f2 |/ a# ~8 H
$timeout = $timestamp-$timeoutseconds;1 ^* B2 C" ^ j- _ F
//connect to database, L _- R9 j7 U5 c( q1 D/ L* n
mysql_connect($server, $db_user);+ O; L; d1 Y4 q0 Y7 m
//add the timestamp from the user to the online list
, Z1 z/ G( u" l2 V1 x$insert = mysql_db_query($database, "INSERT INTO useronline VALUES" o1 c/ |$ W1 L8 F: y) h3 C
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
7 {$ T+ b% Z. [; K6 i; ]8 eif(!($insert)) {
3 g7 c7 | s0 g8 `/ W4 Dprint "Useronline Insert Failed > ";
& p- [. W* b# V& t}% [& X0 Y4 {6 A/ y4 J$ |
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.! d5 ?5 i( n0 X+ J, P, V$ y2 U' ^
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
5 t5 Y0 c, N& X/ K. dif(!($delete)) {) F; K& ^8 {2 U Z0 H4 c4 K
print "Useronline Delete Failed > ";
2 x) W- A7 y, p; r) M; C: P}" a: s; f8 ?1 ^+ T& U: s
//select the amount of people online, all uniques, which are online on THIS page
2 t/ g- V& X& s2 M$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
$ t8 C b* ~( \$ P4 f- C+ Uif(!($result)) {
8 \% h. M4 W, |# f# J6 yprint "Useronline Select Error > ";
2 {8 j$ s. Y- A" ~. _9 m+ u" f}+ z3 h! u: n+ |! v
//Count the number of rows = the number of people online7 k$ H( x) N' @
$user = mysql_num_rows($result);4 L# h5 ?( G1 X: K2 u3 D5 a, K
//spit out the results, |; Q Z3 @4 @+ G
mysql_close();9 |: c4 v$ S* P5 f
if($user == 1) {: x2 Z. F: x* G+ L, |) I; _/ y
print("1 user online\n");
$ j2 E- R1 q1 r- ^7 u/ O3 e- p} else {
3 n9 ]: a$ U7 zprint("$user users online\n");1 c. P4 q, |; n
}
- s6 C+ \0 T8 i: w?>
2 Z8 i9 `7 u2 t/ ^
: Z. `. P# U- e以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。- d8 B' L* X5 x- c1 s- r
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
7 q+ C8 M! V* f: ]. d我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
s4 I- F, A1 S8 `当然啦,这两款主机也是相当不错的。
( y6 L2 F2 M6 m' h Q5 Y智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
/ @ R; y: [4 s* a. ~: t标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年 I* N- m9 N, e7 o5 Y4 p5 W
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
" Q. ?7 @( E4 C8 @9 `4 D- C空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55( |; X, N! L$ o2 H" [" F3 P
自己加QQ去问吧。 |
|