获得本站免费赞助空间请点这里
返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
  I3 B% X$ D/ Z3 c: j' F4 B我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。' R! z9 S- V: F  J# j7 J* h
首先我创建MYSQL数据库表。
* a8 Q) O% i9 s6 O, R4 m: o$ R/ OCREATE TABLE tablename (
3 Q* Y* u4 K. B3 _field type(max_length) DEFAULT 'default_value' (NOT) NULL
  U$ b$ ~' R" y" z" Q$ }}可以使用的SQL语句。$ T8 M$ P" H( q. a
CREATE TABLE useronline (
% k4 P; o3 b8 T& U+ Y* C$ d6 Stimestamp int(15) DEFAULT '0' NOT NULL,
+ p& r6 Q9 p4 C& z. z) t' Rip varchar(40) NOT NULL,4 ], G. \: u1 n+ M
file varchar(100) NOT NULL,. y, Q: s9 S0 g) r$ G$ ?; ]
PRIMARY KEY (timestamp),+ T! d) f: ~/ _5 ~( n
KEY ip (ip),
3 V. N- J1 m& [KEY file (file)
* H4 ~% P7 q+ J' A: q);下面我们是PHP脚本,首先我定义MYSQL的信息。( k7 U9 F+ K& H7 t
$server = "localhost"; //你的服务器- `5 N2 X! `+ D! [* \% g+ W
$db_user = "root"; //你的mysql的用户名, C# Q! p' O# \3 V, [
$db_pass = "password"; //你的mysql的密码
8 W5 _" H8 Q* x& H2 b$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
9 z( W0 |9 t4 X" b  U! g3 c$timeoutseconds = 300;取当前时间。0 k; I" N% P6 j' T7 }
$timestamp = time();上面的完整代码:5 L# W+ k, Q3 z' @1 T0 m
<?php* E) E0 L) h6 K" t
$server = "localhost"; //your server
8 o% P3 _: n6 q: T1 x5 S  S  l$db_user = "root"; //your mysql database username1 Y, r% C% b' G7 q+ `5 U' c! ]
$db_pass = "password"; //your mysql database password if any
% K' V- L" v/ {- O6 v! M$database = "users"; //the db name
0 H# h; w: R# X/ R: N! |6 r$timeoutseconds = 300;//timeoutseconds limit; U. o1 v: I9 f/ w
//get the current time* z5 [: f" E; {- f5 b7 M
$timestamp = time();/ p& V2 M& P1 |/ k  i, p- e
//calculate the lowest timestamp allowed/ [7 m* l) r7 h3 J6 p
$timeout = $timestamp-$timeoutseconds;! [3 e& R, L  q9 H' z3 s
?>连接mysql, Q3 e! v& G9 L0 ^: u6 h0 }- c
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
6 {% E% G* e- w9 @& Z0 B& \mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
* a( M9 v0 O- n4 Q$ hmysql_connect($server, $db_user);查询数据库的代码:
+ ], t4 x  |+ \9 s# ^' L) j. Bmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
: T$ L# G" d5 Z, f+ {  [! P1 q$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
* C5 P9 M9 f, v/ X$ M0 ]# ?('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");7 m; n  a  Q( }: T5 Z$ @9 p
如果用户用错误信息的话,这样处理。$ @3 E* L1 E- k7 l+ L  E
if(!($insert)) {
+ b$ [- n# e" p& cprint "Useronline Insert Failed > ";2 ]" A5 d; q) Y0 E1 P# \) @
}然后实现当超过设置的时间就删除该用户记录。4 I9 o# k; i4 c' _, E2 d' B
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。9 W/ _3 @0 h/ U4 ~
if(!($delete)) {8 t: a6 w( l6 f/ w
print "Useronline Delete Failed > ";
% q' A) m+ T/ [% `% o}下面我们解决数据库中不同IP的问题! ]) E: T9 Y) P/ p6 {) b( Z4 i
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
3 s4 `# T0 ?, I& Y6 {" Smysql_num_rows(query);来统计用户,代码如下。
& f6 B7 a3 e* ?" V9 R6 [& J$user = mysql_num_rows($result);最后关闭数据库。
* m, I' c* I# H! `mysql_close();显示在线的人数。* ^' Z, y) p$ r, Q$ _$ v
if($user == 1) {9 T; X2 A% F: i+ u: F
print("1 user online\n");
$ M( \' \4 I  C! v$ w" M& E} else {" L& T' U; S" d9 j2 O
print("$user users online\n");- \; _3 a) ?$ @4 Z1 K
}最终把上面代码写成一个PHP文件如下。& C" `/ o' R& n3 z+ D; _7 ]7 [6 A
<?php5 M4 L) a- Q, h
//Put your basic server info here- |) ], O7 |! Q) _/ s4 w
$server = "localhost"; //normally localhost& q! J( l2 W) Q, w
$db_user = "root"; //your MySQL database username4 x+ U6 G8 n8 x( o5 `# I7 p
$db_pass = "password"; //your MySQL database password& H  c& Q8 [' _" s+ L5 r
$database = "users";
* n! ?3 D( ], T) @$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are! x2 j! h" r/ m* b; {2 j
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last; r/ r2 h3 r1 r. e2 l
// $timeoutseconds seconds)
" Z% i* s9 G6 @; Q//this is where PHP gets the time# o3 N" `" d5 `% @5 T& h9 q
$timestamp = time();" P+ ~  }! q5 J9 o! ~% W
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed: B5 z; l& e! \2 c. N. m3 N5 L& x
$timeout = $timestamp-$timeoutseconds;
' G# u% x, w2 l3 w  B9 m//connect to database) t# x4 p; P. h9 a& q( m, y
mysql_connect($server, $db_user);1 ]! {+ _1 }7 K% {, i) _
//add the timestamp from the user to the online list
; R# z2 {, N. S$ b# a$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
0 ?" h) Y; B# i2 n9 N" i('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");  x/ g  o% f* ^! ?% \  e
if(!($insert)) {
5 F4 c  c, y9 ^. `, m3 y& @print "Useronline Insert Failed > ";+ t2 d7 r- S2 w
}
. W, v5 @. T- v4 r1 o2 e# t8 P, m7 A//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
4 [5 X- n, }8 X  L6 c$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");9 t4 }' e: L# z: k7 A
if(!($delete)) {
+ a) T0 u1 C' c  y) I# s; qprint "Useronline Delete Failed > ";
$ Y% n- M- L3 r/ k3 C4 Z7 d6 H; }}
( c  a/ w2 U$ W% T% G//select the amount of people online, all uniques, which are online on THIS page6 l7 ]3 w; B0 b- [1 m9 k& X
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");" A4 c! M9 o* _& C9 D
if(!($result)) {
0 T9 Z- w7 N2 e5 A2 v' j9 Yprint "Useronline Select Error > ";/ x  h; Q8 w# t( C7 S' w
}
  \" Q. C; y  y//Count the number of rows = the number of people online  ]4 ~+ {" g: t
$user = mysql_num_rows($result);2 u8 f- O, m8 P1 d1 B
//spit out the results
$ W8 {  v5 [4 b# tmysql_close();
& x; d' K! D5 \if($user == 1) {
2 S2 T4 p5 o% V# [1 o& U/ dprint("1 user online\n");  _) {4 h" r* o1 n+ q8 `4 {
} else {& B. s# ?" V! O% \0 r+ k5 o3 L
print("$user users online\n");
7 o1 m( S( h8 v; i+ O# M}5 I% e- ~' M9 |" k+ Q2 `, g% J9 ~, q
?>  H2 d# N$ Y) J2 Q: h# C  x

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

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