返回列表 发帖

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!  p" F( P  r- j- }! H5 |
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
2 \2 M6 o9 H; X首先我创建MYSQL数据库表。
& i, `7 ^. o& m* k* {2 `% ZCREATE TABLE tablename (
/ G1 k+ L/ f# Y& ^8 K9 afield type(max_length) DEFAULT 'default_value' (NOT) NULL% E. S4 T, c, h
}可以使用的SQL语句。
9 C& j; r% N2 O, RCREATE TABLE useronline (: D, I" Q; F  Z% e0 ?, W
timestamp int(15) DEFAULT '0' NOT NULL,
0 f, n! E! L& ], wip varchar(40) NOT NULL,. m4 b$ b8 c; B2 y  [
file varchar(100) NOT NULL,# \5 L4 T9 s0 t
PRIMARY KEY (timestamp),$ h8 X; T8 v( j1 r; h4 F
KEY ip (ip),& [5 q8 z0 i8 K- d6 O
KEY file (file)
% l; B' P5 m+ V( y0 a6 j);下面我们是PHP脚本,首先我定义MYSQL的信息。3 g: j0 Y6 O5 L! d# Q5 [
$server = "localhost"; //你的服务器/ j& p& i  K- ~5 h7 R
$db_user = "root"; //你的mysql的用户名
# u4 o% V% I( {1 r0 j4 H+ {$db_pass = "password"; //你的mysql的密码
6 g9 H& {* {( y$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
+ u3 [# h/ S4 R+ r& G) U; M$timeoutseconds = 300;取当前时间。8 Q& {/ C7 c" C; M$ z: w* C% U0 H
$timestamp = time();上面的完整代码:; _' e" k1 a: y8 X' R
<?php
- u- l1 x0 g( l# N. \% G7 {  q$server = "localhost"; //your server
- G( \  W" F0 b0 m6 v$ |7 [9 ^$db_user = "root"; //your mysql database username
( W( S: R3 g, ]  l; g$db_pass = "password"; //your mysql database password if any
% v) U5 L( G0 W9 ^( f8 s) C2 M$database = "users"; //the db name
  u/ n5 p$ B0 x$timeoutseconds = 300;//timeoutseconds limit
) Z( ~+ v) b7 z% B//get the current time+ h1 U) W* O0 K0 N" K/ s7 F
$timestamp = time();) q, R. A7 ?1 G9 C
//calculate the lowest timestamp allowed
# p8 U3 j. s+ z7 x) V; K$timeout = $timestamp-$timeoutseconds;
2 c% P; j. r/ K6 I?>连接mysql
  o1 F. t4 h, ^( r8 K& z5 _mysql_connect('localhost', 'username', 'password');也允许使用变量形式。. b: J# l+ U0 u9 c8 x
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接* g- j4 L8 D8 n+ }! x
mysql_connect($server, $db_user);查询数据库的代码:
! n) D+ f/ b; Y% ymysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
: u6 v1 ?9 H7 w2 i2 s0 p$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
" q6 l. ~9 ~1 R1 p('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
! ]- {  q0 Z7 s' g+ J* P如果用户用错误信息的话,这样处理。
5 r0 f( e/ }. r- `! Xif(!($insert)) {
8 z. p9 v& v( K8 i% l& Pprint "Useronline Insert Failed > ";& l, @; u0 e  b0 t9 g
}然后实现当超过设置的时间就删除该用户记录。
0 I* r8 a  I/ \4 }: a$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。; E! q3 N; r& o- L
if(!($delete)) {0 V8 Q5 m1 G- J. @6 O) _8 o: m6 s
print "Useronline Delete Failed > ";0 W: n! |( c$ M
}下面我们解决数据库中不同IP的问题+ q7 c# N( l* N
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
) @( p5 q5 E# J; a: ^mysql_num_rows(query);来统计用户,代码如下。
& b& x: E; D3 Y4 N( t$user = mysql_num_rows($result);最后关闭数据库。4 c# p  z( O! h
mysql_close();显示在线的人数。" S8 u2 _* |! \: m; W$ I' g" Y. C5 I
if($user == 1) {3 U( k. c% l# @# Z9 o% w
print("1 user online\n");
( A: Q  m+ `6 ]} else {
+ d3 j4 `5 E+ u4 S  Y8 Aprint("$user users online\n");
, `4 O1 o( M! p2 t7 h}最终把上面代码写成一个PHP文件如下。
9 u8 F: P+ x6 b# F! w& x<?php6 j. @- R. {: W8 A
//Put your basic server info here% |. G7 U9 Z5 F, J6 Y' V+ J
$server = "localhost"; //normally localhost
' ^' r. F: C# X6 J7 Z8 u$db_user = "root"; //your MySQL database username* w, I2 N8 ?% n4 O
$db_pass = "password"; //your MySQL database password+ H+ M# ~& R/ m8 _) X1 M. z
$database = "users";7 g$ M" D9 [" F4 D6 K+ E6 q
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are: r: P/ h  W! E9 `4 u/ L0 O
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last- {$ S) E1 J9 i& I: L- k, [( \
// $timeoutseconds seconds)
+ U3 u% I, I: \/ S//this is where PHP gets the time
. ^9 d& G$ m# p& U" Q' B$timestamp = time();
8 \2 y7 I+ x( ~1 [//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
* }6 x: Y6 j$ _$ b2 C$timeout = $timestamp-$timeoutseconds;5 \5 M: @. Z4 A  Q0 z9 T
//connect to database% }8 G6 h; f+ g$ l* [! C' P& L; ]
mysql_connect($server, $db_user);+ u% v4 @7 p2 e# t# o) N
//add the timestamp from the user to the online list
0 K# h8 d) Z; X# }  r$ j$insert = mysql_db_query($database, "INSERT INTO useronline VALUES6 a2 x5 e- W( \9 F  m# I
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");/ d! E) C# P% D& G& a0 _3 K+ P$ a
if(!($insert)) {  v9 L4 S8 ^: t) M) J
print "Useronline Insert Failed > ";
( W1 P: N, C0 ]}
: K8 K& K3 D" s& Y) m5 _1 y5 C//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
) Q, i4 u, V, u" o! j* z$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
1 x& t6 Q: H' g. c  lif(!($delete)) {& w) H- }6 ]5 G' Y
print "Useronline Delete Failed > ";( w  R  ~7 @: ^" I# ~
}
; D0 G* W' M! ?- U. Y4 ]# G9 C//select the amount of people online, all uniques, which are online on THIS page
: {5 a) w8 g" r8 K6 t$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
. E: L# u! I+ M0 ]2 ^) \, _if(!($result)) {
- P. g% b1 b  s) H  b- o# D# }/ cprint "Useronline Select Error > ";2 M  Q" f2 j" h: S
}/ ~1 U) U2 C& C
//Count the number of rows = the number of people online
5 z9 l: `% v) ~  ~- x4 U4 [  \$user = mysql_num_rows($result);
- C% _. B0 r4 u1 G8 d+ `2 V//spit out the results3 O$ R9 P) y! t( l) k
mysql_close();
# M& m; \' Y; W( Lif($user == 1) {% e3 g' Q! E% L
print("1 user online\n");7 p$ `7 s/ k5 P; R; Y4 T$ j7 p
} else {
* m% S# ^# r: P1 gprint("$user users online\n");& [( u% V0 g! I2 ]% @2 P1 T
}" p7 E- ^, M1 ]+ f0 Y
?>- k+ R& g  X( }9 q; w! }
1 q8 H; u; ?. l5 w0 L5 C
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。% }) j0 m4 G+ C: s
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
( }8 t# ~; s& [1 Z. o' h我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
6 q; V! b. J, N( B) y8 O当然啦,这两款主机也是相当不错的。
/ ?' |5 b- k" K% k! Y: L) \智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
( K' y  R) ~" p标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年4 V- x+ q& f8 ~" C$ \$ v4 d
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ & S* C! b9 I" i' p
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
8 y( }* x; d" e* L9 g自己加QQ去问吧。

返回列表
【捌玖网络】已经运行: