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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!% [. [! c( @3 d3 E
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
4 F5 m+ a& j, J首先我创建MYSQL数据库表。/ d# D/ u, D& D
CREATE TABLE tablename (8 w9 p0 _9 U$ O$ T
field type(max_length) DEFAULT 'default_value' (NOT) NULL
! Y; d* r, u! e! g# ]}可以使用的SQL语句。
& Y3 {4 P  ~! W( }CREATE TABLE useronline (
2 |% e4 A1 `) l- ?3 P+ Itimestamp int(15) DEFAULT '0' NOT NULL,
0 I0 w2 w' M0 S0 ~ip varchar(40) NOT NULL,
( `. t  K, l& Z3 ^9 P; Zfile varchar(100) NOT NULL,
% G* r( ?- W# e9 Z/ ePRIMARY KEY (timestamp),
1 `, c" x& ]5 m5 d/ b1 R! B7 PKEY ip (ip),; S3 m, l2 s7 [9 _. S  K
KEY file (file)
! M+ U, N9 {* F& k/ s' @( Q6 |);下面我们是PHP脚本,首先我定义MYSQL的信息。
& N+ q, H4 O. ~. V) m) [$server = "localhost"; //你的服务器
1 l  w2 C9 t" f/ |2 ^$db_user = "root"; //你的mysql的用户名% }$ I4 p7 y/ n7 ~' _9 W$ i
$db_pass = "password"; //你的mysql的密码
4 t* U# [8 \( ^4 B2 _, ]7 b$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
) p4 S( Q% \" h, K! q  O$timeoutseconds = 300;取当前时间。
% i$ C6 A1 T" q% {3 ^1 p$timestamp = time();上面的完整代码:; W3 I7 m0 s+ H# Q: G
<?php2 A0 c8 k6 j' A& |2 J0 m2 j
$server = "localhost"; //your server8 ]7 C) N1 b0 P6 l
$db_user = "root"; //your mysql database username
3 x: J- ~, J0 k! L9 c; q9 b$db_pass = "password"; //your mysql database password if any
2 z5 l9 [6 u) D' S$database = "users"; //the db name9 y* H+ q% E; B$ C, A
$timeoutseconds = 300;//timeoutseconds limit6 y0 B9 j" o4 k8 O8 s! ~
//get the current time8 J7 e: L& \" x2 U* H& z* [
$timestamp = time();0 K8 [" ]' E/ S! [5 H1 G; b
//calculate the lowest timestamp allowed
7 Z6 \, k( C( S" X3 R$timeout = $timestamp-$timeoutseconds;; Q+ `9 V+ {( N7 O+ g! n/ Q
?>连接mysql
' n  }6 d/ z" I$ q& x9 c+ o1 e! @mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
) y! w" _2 M3 Y- t# F0 ]* X: ~mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
$ }7 f3 z" r+ A" pmysql_connect($server, $db_user);查询数据库的代码:
/ n" {/ E0 z+ _8 K4 q4 ~; Q8 Pmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。0 A% Y: p4 ?9 b" y# x% K
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
: o- y( l" I( L" o, e. X('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");6 B+ X+ B# ~; J9 Z: l) c7 g2 b' d
如果用户用错误信息的话,这样处理。
7 d; f& y1 W0 Z% ]if(!($insert)) {1 f& f  T1 |2 g
print "Useronline Insert Failed > ";
" |0 Z# P" p. |+ k' P/ }}然后实现当超过设置的时间就删除该用户记录。" B/ M& T/ K2 X# j8 _" k
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。- C7 @% A+ o7 x" ~8 p2 u9 j
if(!($delete)) {: P3 ]- {/ i, }0 I% n4 n" R) ]
print "Useronline Delete Failed > ";/ b8 G- ]& b- }
}下面我们解决数据库中不同IP的问题1 x/ B. f9 ]9 X! \5 n: y- c
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用* k4 q+ a( f; L( g1 e3 \
mysql_num_rows(query);来统计用户,代码如下。% T/ v& u5 _3 U0 {/ l& t
$user = mysql_num_rows($result);最后关闭数据库。6 C4 o& \% B! |
mysql_close();显示在线的人数。. x0 A" i6 m! _) ?
if($user == 1) {. l% [% b$ ]' n5 O- o( `/ I
print("1 user online\n");
# \! t" l3 _. a} else {
0 M, I; f$ Z( W+ v+ \5 ^5 uprint("$user users online\n");* C- t# v8 U8 r, C5 p- F! p( ?
}最终把上面代码写成一个PHP文件如下。
+ s" |/ ^% t3 E" ^<?php9 |3 O+ I8 y& N+ Q4 t: P
//Put your basic server info here+ s6 \% A7 m0 k1 T2 E8 U) D7 q% r
$server = "localhost"; //normally localhost1 ~8 d1 `3 L3 q- {; D
$db_user = "root"; //your MySQL database username. g+ k+ T2 a. ]# R
$db_pass = "password"; //your MySQL database password3 t; f0 _, i/ j1 _% z
$database = "users";
+ F4 B' D% U9 z# U$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
+ R) T1 |& _! l( S- L, _! J) a// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
: }4 M* r. t- e- D' l; S3 ]1 y8 b// $timeoutseconds seconds)$ v5 {2 W$ s! s
//this is where PHP gets the time  W8 I  Y, j$ V6 `' T8 ~$ X
$timestamp = time();3 h) u; n8 y% x- ?
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed5 U4 r8 ^3 @( p$ K
$timeout = $timestamp-$timeoutseconds;
5 ~* B- G+ b* I9 }1 ~//connect to database
0 L4 {+ B/ P! I9 `8 R% ^mysql_connect($server, $db_user);
0 G7 \4 G- \$ U( ?//add the timestamp from the user to the online list
1 ~) N" d; g# ]& v' T) E: m$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
% @" U  M1 M) m. d7 W2 ], G, A; V('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
' i! z0 ]  R2 N  d8 A- x1 }if(!($insert)) {+ O. g$ n/ o9 V9 p- X; {
print "Useronline Insert Failed > ";+ U5 i# X0 W% V; q
}9 ]9 o* a) n' K5 y, f. T
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.6 D8 O) J, K6 }
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
' e* t" f0 i# y* |* ?, oif(!($delete)) {
; k3 H0 \- G9 ^' V; _print "Useronline Delete Failed > ";
" `5 k& t: \/ V4 h4 n. u- @" _}5 A, D) W# }2 d. v& o6 ~
//select the amount of people online, all uniques, which are online on THIS page* [8 D" e7 {2 ]' b# U
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
1 T2 b# W2 Z' p1 m) u3 P6 Bif(!($result)) {
& {. ]6 f% O; \8 f. T( rprint "Useronline Select Error > ";
7 I8 r- e( ~5 U: M9 ~}: b- m0 l! p) I! [$ P, G
//Count the number of rows = the number of people online
0 O& f6 f: U2 ~! o5 E$user = mysql_num_rows($result);0 v+ ?, G+ I1 I+ \- i& K
//spit out the results1 w5 a. k4 d- w# A3 }* L
mysql_close();+ [6 j' P" t# ^& u
if($user == 1) {& c  ]- T( G% _5 b+ x5 }
print("1 user online\n");, E. j- ^/ B2 L# j
} else {) L5 e+ ]/ [) m' b9 v
print("$user users online\n");
% z; e& x: S' [# q: E, r% G/ {}# y$ _2 p( v5 w# r2 ~! P
?>
& ?# J. y) |$ N8 u- m1 @; |( Z2 Z- R4 ~+ `( c
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
  N! M8 ~! X; p9 T( z' G: D4 b2 E时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。7 O& c/ n% _7 E- P- d3 v& W$ R
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
2 d- c: d0 ~7 O- q; u5 m当然啦,这两款主机也是相当不错的。) ^+ ?% Q: J3 i: L7 I0 w/ V8 N' |3 z
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
1 ]8 c9 |* n& B标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
  x* a+ C. i  W  p5 X提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
; v0 T' Y& H# G& J空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
% t0 x& D1 _% f/ M. w$ E自己加QQ去问吧。

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