
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
7 l! h" K' c4 p; ~我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
q, r$ q+ m0 B U1 N首先我创建MYSQL数据库表。. k; z7 z7 n6 `$ }8 X
CREATE TABLE tablename (8 `) L1 [5 D- u
field type(max_length) DEFAULT 'default_value' (NOT) NULL
* r7 U G2 e# h1 S3 B. F}可以使用的SQL语句。
' P5 M. N0 n+ }$ jCREATE TABLE useronline (
0 |/ p" v# e! L# q7 |$ z& ^! W. t8 xtimestamp int(15) DEFAULT '0' NOT NULL,
' B9 s6 ]; ^ J5 D: \) Oip varchar(40) NOT NULL,/ w1 r; X* ]# s0 W
file varchar(100) NOT NULL," n& N+ W# c9 b4 N# A& w8 N
PRIMARY KEY (timestamp),) b) z7 V0 P( S
KEY ip (ip),
. N; I8 U: w$ c( Q2 R; U% z* o! jKEY file (file)$ N( X. n& u, V$ m
);下面我们是PHP脚本,首先我定义MYSQL的信息。
$ M5 b; Q/ I, ^$ {+ ^$server = "localhost"; //你的服务器
$ ]) {4 @+ v6 n3 n$db_user = "root"; //你的mysql的用户名5 Q z! F; z# E( K2 \7 M
$db_pass = "password"; //你的mysql的密码
6 C/ }& V2 ~% K0 \$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)7 Q6 b- q6 O' w: u# W- [
$timeoutseconds = 300;取当前时间。
# Y% n: g# f4 Q- D0 F* B' F$timestamp = time();上面的完整代码:8 L2 s! } h. r3 H
<?php$ R9 z* U: o6 }% b* k& J# ^" Q
$server = "localhost"; //your server
: M4 P: u" r; f* s; [$db_user = "root"; //your mysql database username/ s' [1 S" q; y# e8 m! p( I4 T8 Y) r
$db_pass = "password"; //your mysql database password if any
: Q1 n! P3 Z2 o% K" w+ q$database = "users"; //the db name
1 r6 j+ [) `0 o% J$timeoutseconds = 300;//timeoutseconds limit I7 e1 j% H( u# N3 Z |; B5 p
//get the current time& t0 M& N7 ]0 u9 D
$timestamp = time();1 Z' u1 m+ \5 r
//calculate the lowest timestamp allowed
1 R6 n% T- v) r0 Q: x( }. g6 t$timeout = $timestamp-$timeoutseconds;
# a$ O5 `1 m" u?>连接mysql2 t7 r' e! l7 n G
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。/ w+ l# u1 C: R0 u
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接1 }8 S$ s" C( ?3 D8 z( ~
mysql_connect($server, $db_user);查询数据库的代码:7 r3 S$ y) ~" ]# }# D3 |( b( R$ y* W' s
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
% L( Q2 [, R/ E4 J1 ~% ?( _9 I, m9 P$insert = mysql_db_query($database, "INSERT INTO useronline VALUES7 D3 S Z# S. g: `
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
0 _( o0 m5 f/ W: k) p如果用户用错误信息的话,这样处理。. H3 f% V# {) K
if(!($insert)) {
% ]2 x9 D1 x3 } _print "Useronline Insert Failed > ";7 f. o' }& U% b( @
}然后实现当超过设置的时间就删除该用户记录。$ ~$ Q! O8 K: z0 r+ b) O
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。. {4 K0 C) p' k; f) n2 C; c
if(!($delete)) {. M9 F2 W9 {8 K; f5 l- U# T
print "Useronline Delete Failed > ";' K: X* P. W" D
}下面我们解决数据库中不同IP的问题3 t. v; K. b( i2 K! T0 O
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
$ N% ]& V8 M% C) u8 e2 {) T0 v: b, ]mysql_num_rows(query);来统计用户,代码如下。 w% d, }& p, y5 ]
$user = mysql_num_rows($result);最后关闭数据库。
! Y' F c0 ^6 M t$ S% _, _mysql_close();显示在线的人数。
7 m7 ^% ]5 x4 fif($user == 1) {# T) V6 |- U( I2 J; A
print("1 user online\n");# f8 }$ U8 C6 Q" n$ L' R
} else { u$ i, Z: q* ]# _0 h% ^
print("$user users online\n"); _" o- a- g2 i7 |" a% D
}最终把上面代码写成一个PHP文件如下。
% P" e* l: p% z2 X: Q<?php
! X& \) s5 J* `, r4 i//Put your basic server info here2 @. l# ?' a, x& v- M$ B ]4 x8 w
$server = "localhost"; //normally localhost
3 ` q& H6 @8 C P7 {+ L D+ M$db_user = "root"; //your MySQL database username
- K5 u8 Q H! X$db_pass = "password"; //your MySQL database password% Q6 k4 l3 {5 J c2 k- ]' \
$database = "users";
3 D6 m6 N$ s4 z( @4 i1 q. ?$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
. C* F' ^+ U. X P// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last+ X/ ~4 H- P5 j7 }# H) l
// $timeoutseconds seconds)
2 ~& {1 N! k @, q$ P//this is where PHP gets the time1 J$ n, d& Y H
$timestamp = time();
% p" A/ v+ S+ r) p; f, i//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed- N. p: B4 Q+ n) i s& U! b
$timeout = $timestamp-$timeoutseconds;4 S1 J' n0 _! ]5 G8 S
//connect to database: t; ]) |# u5 [/ Y' v" H# P
mysql_connect($server, $db_user);+ w( d4 D0 b0 F# I5 z2 p! m
//add the timestamp from the user to the online list9 R$ U9 n# r: l! |/ u
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
# @1 R; s* \5 y' K! v" |('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");. m/ A, {4 |: d! U& ^- H7 U
if(!($insert)) {$ A* ]: G. j9 F8 K# c" ]
print "Useronline Insert Failed > ";
! V$ @* f \% W+ ]8 ~( Z! W}/ t: n1 W0 ]- |$ r7 `
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
+ {5 g4 V- Z/ ]/ M$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
w. ^9 q: P% o! z9 a! \" T3 o, _if(!($delete)) {. A; P+ c" C3 E$ B
print "Useronline Delete Failed > ";- [5 [: e) {/ ~" x$ e( e
}
# m- S' v4 I0 i5 W5 u$ S7 ^//select the amount of people online, all uniques, which are online on THIS page- _5 u" p9 x9 c$ i. h% K
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
0 R% h5 m% l! n8 f9 rif(!($result)) {
. \- Y2 q7 ?, q0 N# aprint "Useronline Select Error > ";
' _- J A% G! \ q* X}* t! S3 ]: e1 F) B2 v% Q
//Count the number of rows = the number of people online
, A- x" t. ~* @5 {$ F$user = mysql_num_rows($result);
, b0 H$ F# E$ O7 c" b//spit out the results; W5 d4 R4 O' `6 T
mysql_close();& ~! j3 q; a& H& Z" J. a5 Q
if($user == 1) {
+ b3 I9 s, Y. I3 q Pprint("1 user online\n");" d8 H3 @. u( M7 W+ [6 |( e
} else {
$ [$ k: q4 ~- J9 U- lprint("$user users online\n");0 C5 W7 D/ U, B/ B1 B- n; \
}: }' C' o! L" v
?>
9 K3 z% n m3 Z& Z ' J: W% m6 f( Y3 k
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。" N! \( R& a2 b8 ]
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。4 s# D/ P8 a; p! X9 U
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
* x9 E7 V* X U4 G5 ~当然啦,这两款主机也是相当不错的。
5 }0 H/ I7 O, r$ \+ m- Y& t智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年& [7 `: _* I3 T( J* I$ X4 j
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年 h7 l! l8 K2 R }9 ~
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
6 |% m* ]- @" W) ^空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
/ Z9 T" u; y' x# q6 b& F自己加QQ去问吧。 |
|