|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!3 W' t; y, i& ~( U6 R7 V- r7 H
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。0 [7 V3 E- q0 ]
首先我创建MYSQL数据库表。
9 M8 ]/ g- H" s7 R. F$ f# cCREATE TABLE tablename ($ o) I- u. I: L- l1 X! D8 N( M1 A
field type(max_length) DEFAULT 'default_value' (NOT) NULL
. T) R9 G% ]! w& d& k/ R}可以使用的SQL语句。# V# I8 N& [; I/ J3 z' f+ M
CREATE TABLE useronline (
) I* n1 o8 P4 N9 ^) ztimestamp int(15) DEFAULT '0' NOT NULL," p) Z* E% c) T a% [6 \ F+ u
ip varchar(40) NOT NULL," ^* I6 ?3 D+ b' B% n% {
file varchar(100) NOT NULL,
) j: Q" ~- a. E: r' {PRIMARY KEY (timestamp),
+ r6 A }8 l$ u1 j0 t0 \KEY ip (ip),
2 m, y. B3 J" O5 C6 i1 _, R3 OKEY file (file)
9 n+ @$ E% b& @$ U1 S);下面我们是PHP脚本,首先我定义MYSQL的信息。; i! C9 R5 M4 j# p
$server = "localhost"; //你的服务器1 ^; t. v( ?; k* K' F. A |
$db_user = "root"; //你的mysql的用户名
5 v! o8 ~3 ]/ o- b3 a$db_pass = "password"; //你的mysql的密码
1 G N; Z" U$ K9 k$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
" q! m8 }) o5 G4 O! s1 |$ ^$timeoutseconds = 300;取当前时间。& _) X) U) i8 ~+ e$ G
$timestamp = time();上面的完整代码: X1 [3 k9 I# r$ K' i6 \
<?php; l( Y; E4 t: ? |2 x
$server = "localhost"; //your server
9 W- x/ B3 z: V# M" y1 X$db_user = "root"; //your mysql database username: k: c) H) K. F& {7 c* Y
$db_pass = "password"; //your mysql database password if any6 }; I0 B. \2 s, Y
$database = "users"; //the db name
" a$ |7 R4 E t; L' v! a" @$timeoutseconds = 300;//timeoutseconds limit
7 i+ T0 _/ j2 J( }4 l# {' S//get the current time
] d% k& X: q3 N9 V9 O* O$timestamp = time();( G/ U! i; l, d2 L! E
//calculate the lowest timestamp allowed
& l8 z1 m+ Y" m N6 H0 Z$timeout = $timestamp-$timeoutseconds;0 S9 Q+ Y' z1 h1 u0 p) l
?>连接mysql6 G" ~9 V) i7 m% N H" m7 ~% s; J
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。6 \" F/ @3 ?& e q+ e/ J
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
6 ^' I1 i% Y# H. xmysql_connect($server, $db_user);查询数据库的代码:
2 z6 @3 ?8 W5 l5 ]9 {1 Y% O4 `mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
; Y0 |' X$ O7 B' W$insert = mysql_db_query($database, "INSERT INTO useronline VALUES+ i G/ D2 F& Q7 ]* t
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
: i2 Q* u: B. ?0 f如果用户用错误信息的话,这样处理。8 K( y0 F. d4 x
if(!($insert)) {' Q0 P" m4 }' C$ q7 H2 m, a( x# d' H4 m
print "Useronline Insert Failed > ";
3 g5 ~+ }" d0 E, O/ O$ z" z ?}然后实现当超过设置的时间就删除该用户记录。
# _& |' _) D' t5 m$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。# D3 i/ D8 E2 i7 ?. M
if(!($delete)) {
b4 h: v; V9 nprint "Useronline Delete Failed > ";/ r0 i/ ] F6 T
}下面我们解决数据库中不同IP的问题% T0 I$ Q: H% Q
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
% l3 M+ h, M: \) N) w+ umysql_num_rows(query);来统计用户,代码如下。; g ^6 A9 G- O7 q3 x
$user = mysql_num_rows($result);最后关闭数据库。
4 [3 {, Z5 ^# x1 R. Kmysql_close();显示在线的人数。
5 u6 B+ u% a. T0 o. B$ G& P: f6 Xif($user == 1) {; @& F- [% @$ j r5 W
print("1 user online\n");8 N0 s# z, n& b7 M2 n
} else {
. |0 l3 Y2 K' x; d( Vprint("$user users online\n");4 F. c! P+ _9 \! C+ G
}最终把上面代码写成一个PHP文件如下。
1 t1 n3 y/ o) g<?php
& i" ~3 p7 C9 Q1 l//Put your basic server info here
2 A# Q5 H2 h5 \) X# Y: y% ]$server = "localhost"; //normally localhost( S1 _" v* S- [8 a$ M/ k) {: C
$db_user = "root"; //your MySQL database username1 t; @' |- ?' X2 N, v1 D$ {5 t1 f p
$db_pass = "password"; //your MySQL database password
6 ]; u3 l) }/ ^* Q3 r$database = "users";4 j: z7 u8 Y9 @. v! ?
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
- H A/ i1 a, ~' J, j$ [// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
7 B) O0 y4 F* R// $timeoutseconds seconds)
T8 i4 N1 n4 C" _1 h; m//this is where PHP gets the time
. I2 }' F$ ^" ^, x; ?% D% ~+ F- U1 Q$timestamp = time();
; N1 |. f# O A% d0 b//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed4 u- M' j/ d7 m
$timeout = $timestamp-$timeoutseconds;: X+ C/ S6 l, R' m/ H% e
//connect to database
0 n' W4 }' _0 t& v ?" r( q' Emysql_connect($server, $db_user);/ ~) u8 | m' r4 N4 {: a! H
//add the timestamp from the user to the online list1 s' b9 V; q& y& Y' L8 t
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES- D5 |/ g" f" G
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
/ S% l, S, J3 Q' a. d$ U% |if(!($insert)) {
8 G; L x4 w$ ?5 J2 o5 Y2 P0 }print "Useronline Insert Failed > ";
9 F: \" A; Z) C/ }: Q5 D}
$ z; c7 b1 u% N o" u//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
+ R! p& m" C8 }" r$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");4 u. X- C' ~" j
if(!($delete)) {9 n9 g3 A4 @+ M4 H
print "Useronline Delete Failed > ";! B% o$ _% G( ?* s
}
" v$ r- ]3 L1 t' x; Q//select the amount of people online, all uniques, which are online on THIS page2 l1 c0 M$ h0 q! c5 u+ B
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");5 B, F$ z- Z$ Z i( P4 l
if(!($result)) {
6 R# v2 W& ]) u( z3 S6 |6 fprint "Useronline Select Error > ";
4 N9 c7 M/ }7 k: w" e}
1 ?$ S3 @/ n5 }//Count the number of rows = the number of people online u# ~* e. }/ K6 C
$user = mysql_num_rows($result);
6 [) H9 O, N; l) v( ^# y//spit out the results6 _' G, p/ w4 n F
mysql_close();
% b4 `/ |7 O( o0 Yif($user == 1) {0 q* w8 W& e6 }( ]
print("1 user online\n");" w1 [$ O8 L+ N5 V; A0 n0 B& O
} else {
4 }1 S% D' b3 q |( G' Bprint("$user users online\n");- u/ i; S6 k$ K9 i5 ^
}* x: e! ?) q: H; G6 Q9 I
?>
4 O% i' O( w# y( X& F: K; R
* @9 U- E l! H以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。2 y9 i0 `5 f( t# S6 t" l
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
% j3 y% O" {) f5 O9 M. x7 k; p& L我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
% w- s7 j* |7 x2 s0 [* `当然啦,这两款主机也是相当不错的。0 W) m, y4 N8 p0 B, ]
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
/ X+ F! v( L8 b+ g标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
7 `. v# V9 ], D( o% I o! Z1 U提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
" w- n( o" r( i9 V: j空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
" Q0 y- V, }0 u自己加QQ去问吧。 |
|