
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!. h1 M4 k% u- \- u# U0 d3 ]
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。" E# L+ _8 D4 U- Y9 ]
首先我创建MYSQL数据库表。
1 x5 @- H8 y, c# k8 e3 ZCREATE TABLE tablename (( W# K# s: X$ C: q
field type(max_length) DEFAULT 'default_value' (NOT) NULL( v5 j, M% v8 G" ]& x
}可以使用的SQL语句。 _* N& h( E. c! b7 S, s2 Y
CREATE TABLE useronline (
2 G8 G5 H3 i( h% Jtimestamp int(15) DEFAULT '0' NOT NULL,
3 g e5 k2 H6 G) P1 E# y9 D+ kip varchar(40) NOT NULL," S0 W! M4 }) ^! |
file varchar(100) NOT NULL,
1 j; L0 c$ Q; q7 S# pPRIMARY KEY (timestamp),4 I1 n/ M; w' k4 d& N) b* n2 i8 r
KEY ip (ip),
& } ]0 Z3 Y1 K% ~& c+ @0 EKEY file (file)
$ {* v* J$ l F5 C F. g6 u);下面我们是PHP脚本,首先我定义MYSQL的信息。
. J! q3 ~6 D7 N6 T$server = "localhost"; //你的服务器
* h9 w, x6 X" Q1 e: K' ~$db_user = "root"; //你的mysql的用户名6 X3 V- L4 G# y! F0 z4 j
$db_pass = "password"; //你的mysql的密码
2 B# x4 r' A$ _- ^# h+ M1 k$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
7 L- v. K- G( T5 H$timeoutseconds = 300;取当前时间。
2 [' ]* {$ I. G# V2 A- @+ y$timestamp = time();上面的完整代码:
. u; {, d ^! s; e D, W K<?php) `; G; j0 p3 D2 _- q/ Q: ?* M0 L
$server = "localhost"; //your server
/ U7 R. q4 z+ `& E' h" c( h0 k$db_user = "root"; //your mysql database username
" a5 W# C. x) L# }! v1 n% x$db_pass = "password"; //your mysql database password if any5 K9 K! U* E+ q1 X: M$ c& ~- q
$database = "users"; //the db name
C0 }) D. u+ n4 i0 s$timeoutseconds = 300;//timeoutseconds limit6 ~6 \% T) _0 r$ s# R* C2 w' N
//get the current time
1 @: c( _; P' y- z1 t6 x) h$timestamp = time();
8 y. O+ B- o& d( E//calculate the lowest timestamp allowed
) [6 I0 ^3 P8 W9 ], V/ j$timeout = $timestamp-$timeoutseconds;
4 a8 H- I% G$ I?>连接mysql
- X9 P" E. U" j$ v& {9 A7 Cmysql_connect('localhost', 'username', 'password');也允许使用变量形式。( j0 U6 Z. M3 L3 c) m
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
2 o- Y8 w% [. e$ M% pmysql_connect($server, $db_user);查询数据库的代码:/ G/ E. H# b" c$ [
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
) |' Q, A4 o9 x9 L6 C$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
" j9 I4 Z0 P! |8 w$ \! _8 G% ]('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");7 `3 R2 V) \( {6 Z# K5 {
如果用户用错误信息的话,这样处理。* Y; N; x* x) n) ~
if(!($insert)) {3 C. [5 y1 q" U1 ]
print "Useronline Insert Failed > ";8 f/ j$ {& n4 ]% n# G' t; y
}然后实现当超过设置的时间就删除该用户记录。 r5 S% {% [# t
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。8 [ t8 o, T, c: S6 i
if(!($delete)) {
. h1 c0 O4 l8 m$ y! zprint "Useronline Delete Failed > ";% S% n: R3 w! D
}下面我们解决数据库中不同IP的问题1 D3 U8 u i \6 q
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用5 x4 O! k3 Z6 x; ?( K
mysql_num_rows(query);来统计用户,代码如下。
4 G+ z8 z/ I8 [+ E8 U& O0 t7 ]$user = mysql_num_rows($result);最后关闭数据库。/ v h9 V' Z1 O. O7 }
mysql_close();显示在线的人数。% F' f/ T& W8 X% w
if($user == 1) {
7 E0 X! q$ x; y& Z7 vprint("1 user online\n");
) F% ^; n l6 @' j, R; V} else {
u/ Q4 C2 B" X+ U: Iprint("$user users online\n");
7 u# S" g* r) l5 W# m7 n1 h}最终把上面代码写成一个PHP文件如下。' \$ }3 l' o' @" U0 X/ M2 `
<?php
; U$ X' W. p- D. u2 W/ ^% j, F$ z//Put your basic server info here
7 X$ A4 ~. U: ?, ^6 ]& ]$server = "localhost"; //normally localhost) x H b1 J" S( @8 S
$db_user = "root"; //your MySQL database username
, b" R% p1 p' y( h! ~, T$db_pass = "password"; //your MySQL database password
; _/ ~8 a9 [; ?" r$database = "users";
9 r" V, p6 W" o. s# Q/ J) n; c( W$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are0 ^2 [2 r7 A$ p+ s5 ?2 w
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
/ g# r) ^, ]) ?& }3 t0 x) ?) Z; Q# A// $timeoutseconds seconds)
; J( _9 ]' w) E; X//this is where PHP gets the time
l$ Y8 ^" V" n, L7 a$timestamp = time();
9 S; @" _8 f( U) l* e//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed) y( J2 y8 f# p8 O% {' y& P8 l5 `
$timeout = $timestamp-$timeoutseconds;
" s3 _0 Z. O: w# |8 J8 d% a//connect to database5 k- C+ e4 J& i D {" ~$ D
mysql_connect($server, $db_user);
) Y, t6 ~ v* s1 u3 O: y//add the timestamp from the user to the online list5 c/ E# O) [* I+ E, O. C7 f
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES3 V! s3 e1 @- b P
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");) A R$ F7 d& ?, i
if(!($insert)) {
1 `( r( M/ X, I8 kprint "Useronline Insert Failed > ";% X$ v5 ?6 e" H7 Q; v
}
+ V5 t8 F' X8 i- P//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.1 e0 `9 b2 l8 G2 x* b" `. Y2 f
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");$ J5 w, E: w- w# k3 a1 P3 k; s+ D
if(!($delete)) {
1 S9 q* q+ r- M) M2 Y/ Cprint "Useronline Delete Failed > ";8 S, u! K& V7 {6 }
}% D% v0 ]7 B* R+ B
//select the amount of people online, all uniques, which are online on THIS page6 J/ N& r. v7 o! V0 L! G
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
& m8 C% A# {# _1 `/ Kif(!($result)) {
+ O( {6 x) m- F. T! N9 p* T6 lprint "Useronline Select Error > ";0 A" Q' B3 a; o3 G
}
. ^. }8 _, r" d' h I, {2 {//Count the number of rows = the number of people online
; q: l- y4 M" B% \3 o- z- R$ E' @$user = mysql_num_rows($result);
% g. Z Q6 |2 t; G$ ^//spit out the results
# f# K ^0 F5 v7 M8 Rmysql_close();1 l, E Y$ e' [2 I6 g; g
if($user == 1) {
/ A- f2 A' R( A* F/ N# Nprint("1 user online\n");" U- A% G' P# r: u/ ?: ]
} else {
% J5 w1 B" T' J; k' T6 o4 t2 zprint("$user users online\n");0 p7 _9 ]$ `# p$ H1 j" w
}8 F: c( i& @$ W/ d4 Y4 z! ~( Z& N
?>- _4 L* j, c6 p& v

. I0 E% l9 d' r, P( f以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
# \1 ~1 i8 g6 L6 G8 U时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。# I0 f4 E+ _1 G/ l8 m
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
7 r* O& [, q f当然啦,这两款主机也是相当不错的。3 o L9 S2 G/ ^% Y3 e
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年* @( R5 s7 w3 A+ E9 j B
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
% v3 q8 W& a" k D1 A: x提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
2 `# z' O5 _' b空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
7 Y" k7 S: z8 f* g. s/ E3 W自己加QQ去问吧。 |
|