|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
1 E8 J% q0 ? Z1 e! P& b- |, C$ \6 j我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
# f8 a" l0 C& Q* _' _( L首先我创建MYSQL数据库表。! z& E8 Q8 k I( z# S) t9 f! h
CREATE TABLE tablename (
8 j: S- K$ s5 v1 gfield type(max_length) DEFAULT 'default_value' (NOT) NULL' s; Q/ w! [- \: f% W( a
}可以使用的SQL语句。
3 d" c% ?. f3 U2 P# ]CREATE TABLE useronline (
4 u4 W( K5 d2 S# V8 r$ ?' Jtimestamp int(15) DEFAULT '0' NOT NULL,
* o( C- b0 {$ a* b2 ?0 d1 A$ @. G! Gip varchar(40) NOT NULL,
& J2 j7 V6 ~+ zfile varchar(100) NOT NULL,
, Y* S. I$ G( A9 ^! Q6 OPRIMARY KEY (timestamp),% C6 ?% G! P, v
KEY ip (ip),
( m; _/ R' G7 V, j: WKEY file (file)
) T, @- J# E- y0 ]+ v);下面我们是PHP脚本,首先我定义MYSQL的信息。
" M. Z' m5 h/ y1 L$server = "localhost"; //你的服务器$ @. p' }( `8 r4 J& W
$db_user = "root"; //你的mysql的用户名8 `4 n: a- Y& ~
$db_pass = "password"; //你的mysql的密码
% D- G% \0 f- u0 p$ G$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)0 A1 ]# S8 i# p9 B; k3 i$ H
$timeoutseconds = 300;取当前时间。
* s$ c5 N% Z; { b) G* X, |$timestamp = time();上面的完整代码:
; K1 J" h3 \/ i<?php! Q! S5 Q( ?2 o) l! P
$server = "localhost"; //your server" w, J( ^7 {7 H- s# x5 T0 t0 o- G+ n+ g
$db_user = "root"; //your mysql database username
3 N7 Q' V6 u$ m$ [" o1 |0 T$db_pass = "password"; //your mysql database password if any
- O6 N: C6 P, C# y- V$database = "users"; //the db name" i1 b# A& N" ~- |8 N0 G4 H8 K R2 D
$timeoutseconds = 300;//timeoutseconds limit
$ M% w) R6 j: @& V$ R4 A8 H+ i//get the current time8 y7 v) P+ U0 |
$timestamp = time();* ]4 o; }6 l1 V* P& D8 |" A, Q
//calculate the lowest timestamp allowed) S$ \9 \0 M( M# R
$timeout = $timestamp-$timeoutseconds;
( n1 m3 u# d9 V8 v?>连接mysql% ?% }/ n% C' h- l3 I* [
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
5 s/ z9 V" ], C+ I9 j9 U5 O5 vmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接5 u. p! b7 w# h. y: [; q2 l; j% h
mysql_connect($server, $db_user);查询数据库的代码:$ l, Q0 B# O5 J l z9 R0 a% Z
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
- l6 l' ~& G8 @9 W' M5 W$insert = mysql_db_query($database, "INSERT INTO useronline VALUES( l% y- ~9 a/ P! k8 p; g2 Q: m
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')"); ?# @5 n4 E5 ~1 b2 w# ^( F
如果用户用错误信息的话,这样处理。
/ ~5 O. z5 o5 mif(!($insert)) {
; i0 i. H: X& }( ~ c) \print "Useronline Insert Failed > ";! e g! r* O: x! @3 a/ b, L
}然后实现当超过设置的时间就删除该用户记录。
j8 J5 ?6 G2 K6 G" b$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。5 q& j* C% n% R" \! b: P$ u# ?
if(!($delete)) {' }' g& L$ ` ?1 \' v, f3 b
print "Useronline Delete Failed > ";
7 G4 I7 Z0 q. ~% c7 N' y}下面我们解决数据库中不同IP的问题
& v7 ?! P$ H, A$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
9 ]0 ?7 ~+ Q0 S/ |' c1 U4 ]mysql_num_rows(query);来统计用户,代码如下。( T* t" o: n( R6 A
$user = mysql_num_rows($result);最后关闭数据库。
; I7 x0 B" Y+ kmysql_close();显示在线的人数。9 k1 }3 A7 q2 K* Z
if($user == 1) {8 U4 D/ N. G P, w; t; T' G# s1 z
print("1 user online\n");
9 t8 R6 Z+ [2 S! s; c7 q} else {
# E/ S; G/ L% A+ p# ~ ~print("$user users online\n");" T7 X! }8 @1 i. h3 t. H
}最终把上面代码写成一个PHP文件如下。- Y, I7 a; j0 u/ D0 m# ?; s
<?php
& d' u- k8 A6 @2 V4 A//Put your basic server info here2 j: \: d2 z0 v: l; [: s% [
$server = "localhost"; //normally localhost
2 J3 G7 Y: a( f0 z; x$db_user = "root"; //your MySQL database username$ Y5 A( W: s5 e# a$ J7 O
$db_pass = "password"; //your MySQL database password1 K) j8 p+ q) H; c5 V$ a6 X
$database = "users";3 T' K' U/ S, j' P! o
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
1 z* s! F3 T$ w2 k: `// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last5 o. t" `' F# C( F
// $timeoutseconds seconds)( C% n0 Q& [7 C7 G7 H$ v* f
//this is where PHP gets the time0 o- o1 h8 v# _8 v2 K2 r$ Z* Q
$timestamp = time();$ D" ~+ \) I6 Z0 H) \' [& J
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed! |; I# b% t' m4 O$ e! R( }
$timeout = $timestamp-$timeoutseconds;' |9 X1 i7 a3 c0 R1 C7 s$ t
//connect to database
9 b4 Z3 Z6 J7 S2 |mysql_connect($server, $db_user);
5 U9 E7 Z: A* i" {//add the timestamp from the user to the online list- R0 K7 v' \2 ~! O% D" p- r
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES) k$ q" a) ]( F7 L9 R8 l
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");( X' x" K* H5 l: u- u) @% N
if(!($insert)) {! l! X( A: M) c2 f3 C; {# _# A
print "Useronline Insert Failed > ";8 `' C/ T K2 l5 V
}+ I" y# _$ ?2 N- K1 |8 m
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.4 X! n( p# r* y& ?+ C1 v
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
/ U2 @! x G8 D6 o/ ~* \if(!($delete)) {
0 I2 F1 W- M8 |! \print "Useronline Delete Failed > ";% z+ T5 D' y# |0 M5 g
}
, k9 H& R& M/ J" {- L! K# D; @//select the amount of people online, all uniques, which are online on THIS page* ?* |! ^+ o2 V. ?( V
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
5 u/ \1 _! R% l7 l+ Lif(!($result)) {% \/ ?9 K4 P$ G6 t R
print "Useronline Select Error > ";
3 `5 Z/ k0 @/ {" v9 Z- F}' {2 \6 e2 ~: K6 a8 ^
//Count the number of rows = the number of people online0 G: b" t2 T s4 _. D
$user = mysql_num_rows($result);0 |( A: H/ c/ C
//spit out the results
0 x0 A6 S0 \4 S1 ^- fmysql_close();
K) h: F" X7 Q. {if($user == 1) {
" ]/ n# E/ F) t/ p$ @print("1 user online\n");
7 ^% Y+ [4 ~9 E4 |5 F& O0 v% S} else {
n& F& c* P" c" cprint("$user users online\n");: v4 d( E0 F; x) w6 [7 t/ P; \
}
i9 r! J5 a7 i5 H# g$ o?>
" a; j1 E* }0 v/ r
- c8 O1 y" u; ^- V/ c1 d以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。 c# n) F6 X4 m" ], [$ k, B
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。6 s1 m; O# U s' L0 F2 P4 w
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。% r/ K+ G' n9 K
当然啦,这两款主机也是相当不错的。
$ Z9 P4 ?8 ]) K. Y, H0 m! j" [智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
6 C& K% ?& n8 c- b7 T0 C标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年! ~+ x% g5 }4 |. L# ^' E1 \ k2 `
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 3 N0 J. a8 U3 C8 F" s1 y5 ^
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
9 t! `: q4 |# [! \* T# L; D2 J0 T自己加QQ去问吧。 |
|