Board logo

标题: 刚用PHP写了一个网站在线人数的程序,请大家进来指点下! [打印本页]

作者: lilcy88    时间: 2008-5-28 10:40     标题: 刚用PHP写了一个网站在线人数的程序,请大家进来指点下!

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!6 p1 @; A% }- ~
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
" Z) f" N7 `6 y" d7 Q首先我创建MYSQL数据库表。3 V- n* W! R9 @" i' |3 I7 s8 ^
CREATE TABLE tablename (* _( y3 v! Z, c+ N9 ?& h; [
field type(max_length) DEFAULT 'default_value' (NOT) NULL4 W2 ~8 Q/ i) y/ e7 G
}可以使用的SQL语句。1 W! \8 d- s% {
CREATE TABLE useronline (+ p, ]% B6 i4 \: |# I
timestamp int(15) DEFAULT '0' NOT NULL,
5 u5 x; `6 R& w( Dip varchar(40) NOT NULL,
: D; A# @3 a! o7 m  p: Vfile varchar(100) NOT NULL,& w9 ?! S% ]. [$ A# x+ c/ ]# K# z9 ]
PRIMARY KEY (timestamp),7 C8 Y+ _  _. ]  L3 A6 ~( f/ b9 Y# |" L
KEY ip (ip),1 C, s) t5 y( p3 B2 C* B& J- V0 s
KEY file (file)* ^+ V6 D5 j3 C" s6 u7 h
);下面我们是PHP脚本,首先我定义MYSQL的信息。6 C, v; k, p, j9 t/ T
$server = "localhost"; //你的服务器
* b: M+ t- t1 m3 Q9 H$db_user = "root"; //你的mysql的用户名
2 B) _7 D2 |+ f& \1 r$db_pass = "password"; //你的mysql的密码
6 N$ ^: h. r; ~  B! y- S  C2 ?; w: X$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
! a) c# Q  e6 Z) _$ F$timeoutseconds = 300;取当前时间。
8 b5 S. k" z: A4 K$timestamp = time();上面的完整代码:9 o9 a( ^8 N0 Z1 F
<?php. b2 ~, Q. \$ n+ e2 m/ o7 |4 l6 _7 z0 @
$server = "localhost"; //your server
: ?0 |0 G; N5 O, i4 v" r5 v$db_user = "root"; //your mysql database username
1 t7 d: f7 s6 y$db_pass = "password"; //your mysql database password if any
& s! E2 @, q) G( S1 h$database = "users"; //the db name* }! Y3 a% N0 }! Z9 l9 V! y
$timeoutseconds = 300;//timeoutseconds limit& d' d. {; c: \$ f0 G: J, d
//get the current time
) m+ i. I) [) y$timestamp = time();: I" a. L  Z8 ^5 P
//calculate the lowest timestamp allowed# y# f. d$ m' E
$timeout = $timestamp-$timeoutseconds;- k4 f0 j$ W. y! G# y6 c% K& [  L+ k
?>连接mysql
' a  w( |- e( ~+ [: nmysql_connect('localhost', 'username', 'password');也允许使用变量形式。$ ?6 z5 L. Q7 m; i
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
; b9 t# P1 N6 u% I4 `3 u; Rmysql_connect($server, $db_user);查询数据库的代码:0 ]/ u2 l/ i1 t' N  ~1 b
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
' h; }: L+ R+ ?' q: K4 b( ~2 c$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
% f# r% C* l. u# g- e('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
* `# R$ {/ W" v. d如果用户用错误信息的话,这样处理。9 \3 W- h5 t6 R) |1 R9 j$ e' K, H6 O
if(!($insert)) {0 ^& d8 ^  m! i2 J
print "Useronline Insert Failed > ";
$ |+ {; Y* V3 N}然后实现当超过设置的时间就删除该用户记录。* L2 A- @8 {% U3 t9 U3 ]  a% f1 y9 L
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
1 B; T6 L; b# {+ a) h+ ]# Lif(!($delete)) {4 S% }, u2 ?! L+ H. \* R
print "Useronline Delete Failed > ";: P& r. J( ?0 ?5 p8 Z
}下面我们解决数据库中不同IP的问题
. o2 Q+ O1 }0 r) U$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用8 _( b# [  `7 F# q2 e" `; g
mysql_num_rows(query);来统计用户,代码如下。
& O# L  [4 }7 q* ^" ~# m# w$user = mysql_num_rows($result);最后关闭数据库。6 b4 L" T: v/ N- l& G9 ?" J/ T
mysql_close();显示在线的人数。
) {1 C$ v! c5 B# [if($user == 1) {# f/ m0 p4 b) q5 k% }6 H4 H
print("1 user online\n");
; z: p4 I0 g! v( Y4 E6 V} else {. Q+ v' x; m" g7 e4 ?5 D- X9 h5 g
print("$user users online\n");& u+ G" }% j6 j0 z0 O' |
}最终把上面代码写成一个PHP文件如下。
, h* Z& A. E) k7 R<?php( S8 Z5 l) @8 z. Q. q
//Put your basic server info here# x  w! Y2 C, S2 k% T9 c( U0 J
$server = "localhost"; //normally localhost( P& A6 W- {; s+ M
$db_user = "root"; //your MySQL database username/ {# {3 v* _/ D
$db_pass = "password"; //your MySQL database password$ c# a. p* T/ s$ {" `% [9 n
$database = "users";$ k* b4 ~7 V: T( ^) o
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
, @3 g# Y  ^& `// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last+ I0 [' w+ N0 U! q/ c0 x
// $timeoutseconds seconds)! F: W! w% V/ A+ B: T6 q: J% \' e
//this is where PHP gets the time' u# a7 h- m& w3 `: t1 ^% d
$timestamp = time();
% k. U/ k5 f5 k: q6 i. ]( V7 y5 d% U//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed; X" L6 E4 }  S& S
$timeout = $timestamp-$timeoutseconds;
9 v5 r# k% B: C//connect to database
5 ]9 J+ g4 `6 u* _. W# f( F" K/ jmysql_connect($server, $db_user);/ U" S8 \7 s4 `4 F# N; }( i
//add the timestamp from the user to the online list2 c& b  d% X4 k/ U: z
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
$ t( v* a5 k1 K('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");& b( @& X5 E% Q+ E
if(!($insert)) {& l2 w( u8 i7 @0 ]
print "Useronline Insert Failed > ";& w0 l% W) o9 W' G; T
}
5 O) D# f$ |. |  X4 ?" `//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.& L9 b6 [) D& \, G1 h
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");7 s5 y& k: y4 W4 ]' R- b, }- w# k5 b9 G2 N  A
if(!($delete)) {6 X8 \. `' c) B9 ]) W' r3 p
print "Useronline Delete Failed > ";
! m" F  m# ?. \}
: F1 u4 ~, s8 d( m: T% g( U' R//select the amount of people online, all uniques, which are online on THIS page) ^8 D% q- J7 K
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
, \: _( [! j, Uif(!($result)) {- ^" v: S7 y$ k4 |: r% t
print "Useronline Select Error > ";
6 y! }0 J/ s. H+ i# W" i' }! H}
) p/ ?: Y3 |9 ?//Count the number of rows = the number of people online; D1 ~7 g2 v, x7 O) G# Z) o" ~
$user = mysql_num_rows($result);; n; c/ H4 I% L  k
//spit out the results$ K# p& u3 ^4 c9 Q, Y7 ?
mysql_close();
2 F3 T1 M$ Q- w8 Y$ S3 Q8 @if($user == 1) {
7 {+ S; \" v& F7 d. O  eprint("1 user online\n");3 N$ ^9 E' p. N4 s& _6 P* F6 v( M
} else {9 S0 P8 K" R& _' @, Y
print("$user users online\n");7 @. T( Y4 J! u# |( a
}/ q# T$ N& U* w& d
?>$ U9 v9 o, [$ f) q

6 L4 a/ z! J9 x0 e/ R. {# S以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。+ J; o) i' v. J& D7 ]0 n8 W
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。! N' _  i# o6 L9 b) y; A1 p" j" P& M
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。# T: v+ C, S8 ?. p' |
当然啦,这两款主机也是相当不错的。
1 h) d, i: w# E+ S' n智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
" D9 ?/ `9 v. R; h! o标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年1 P3 _/ c& m8 ]; I! o* A
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
5 a) F1 v/ a& g6 Q: Z( M' R0 a空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55; T# i. u2 r; ]- F- d
自己加QQ去问吧。




欢迎光临 捌玖网络工作室 (http://www.89w.org/) Powered by Discuz! 7.2