发新话题
打印

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



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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!' A; l2 O8 S5 d' _
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
. O; o' d+ o- u! A3 e/ E首先我创建MYSQL数据库表。
: j  c  ?4 r. ^4 hCREATE TABLE tablename (% y4 K. f; p& m- d# q% O8 P
field type(max_length) DEFAULT 'default_value' (NOT) NULL
6 [: C0 }3 X8 `  r# [}可以使用的SQL语句。
* ~% F2 `( }0 A/ mCREATE TABLE useronline (
& a+ R* Z1 J; X; e4 @, M) Dtimestamp int(15) DEFAULT '0' NOT NULL,) l8 T& e0 v8 P' X' `
ip varchar(40) NOT NULL,
0 M) u" K# `# gfile varchar(100) NOT NULL,
) H6 `1 f- z. C  w) I, j5 u' c. J$ FPRIMARY KEY (timestamp),
% ]' K" ]2 B! q$ r+ yKEY ip (ip),
: s9 K8 d0 k( r* k* v  }6 HKEY file (file)
% m" ]7 _! N7 V1 T* B);下面我们是PHP脚本,首先我定义MYSQL的信息。/ J% Z( G; J! F1 _+ C* }. f* k
$server = "localhost"; //你的服务器
* M- H& ^+ ]2 k3 V& p1 x6 m$db_user = "root"; //你的mysql的用户名1 n/ p- q& n# L5 ?
$db_pass = "password"; //你的mysql的密码; n/ O: q0 l: V( x* q, y
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)1 E9 [5 O. @- ]! i. l9 ?$ `
$timeoutseconds = 300;取当前时间。
9 J. Y  b/ ~# C; Q/ v" q9 q" B$timestamp = time();上面的完整代码:
, q+ X* H; Q4 q2 n' n<?php( t  I- x" Y: f- h
$server = "localhost"; //your server5 Q  d- m" F: X9 c& r) N
$db_user = "root"; //your mysql database username
- Y' j. W1 a+ A* n: D" S; M% X$db_pass = "password"; //your mysql database password if any
* s  `0 K8 p/ q% p2 t$database = "users"; //the db name
- _& k# ]/ B$ W# t% ?' W# v0 I8 b: k$timeoutseconds = 300;//timeoutseconds limit  {; R2 f' L: V( T- o' O3 ?
//get the current time
7 @8 S  C' r5 d5 `/ a5 e$timestamp = time();
- k. f( D9 w. m' w5 M4 d2 A+ r: b//calculate the lowest timestamp allowed
/ L5 M1 g- O1 N/ L. p$timeout = $timestamp-$timeoutseconds;
; R" m3 {; i+ I, b* A?>连接mysql! W& \* x. Y  G
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
0 q" e( e* K, B# c- e9 Q1 xmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
4 \+ \% g2 ]$ bmysql_connect($server, $db_user);查询数据库的代码:$ D% a: t" }* x: e& Y! [
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。4 m+ n! }2 V' ~7 u
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
- m6 x3 y% J% A3 ]0 `8 W. J('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
: N8 D' q: }% ~, F+ H如果用户用错误信息的话,这样处理。
# ~- c* M2 e/ P8 p) t0 M2 Dif(!($insert)) {6 P! T1 x9 \/ i
print "Useronline Insert Failed > ";1 O' \5 C( c- u: v9 }+ g# A- n4 g
}然后实现当超过设置的时间就删除该用户记录。
. ~! Q& V+ O8 K. Y$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。) T/ N& e; Q* O( k& ~5 x
if(!($delete)) {! y3 u# b/ d! ~3 ^/ k0 i
print "Useronline Delete Failed > ";6 s8 d) Y, k& k+ E' {' s
}下面我们解决数据库中不同IP的问题
* p  |* i$ |9 B$ H7 o. a$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用. S; |0 V) s: X: G3 m) {
mysql_num_rows(query);来统计用户,代码如下。- f: p1 Y: f& R  h& T' y
$user = mysql_num_rows($result);最后关闭数据库。
: G) u% L0 l1 f& Y% e2 }mysql_close();显示在线的人数。
  a0 H# j! O* U- ?if($user == 1) {' M; |3 T9 y. B9 u
print("1 user online\n");
+ G3 _9 o4 P6 _) R  c} else {6 D- M1 {/ G, Z/ e* s6 W' `! @
print("$user users online\n");* e. _( T* a3 r5 S4 N
}最终把上面代码写成一个PHP文件如下。$ x  y5 ]7 O  K
<?php/ n  ]' a' {* s9 ~7 H
//Put your basic server info here' C+ K8 J& z" F
$server = "localhost"; //normally localhost, k% [6 `& E/ f8 J) y7 ]
$db_user = "root"; //your MySQL database username2 T# t6 F$ e, U$ q
$db_pass = "password"; //your MySQL database password
5 h5 j& e! {) f) B$database = "users";# C& }5 V( w( X$ Z! n/ i' o
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are* c. i2 x4 w# n/ O9 N* H
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
3 U; l) R  R+ X1 O// $timeoutseconds seconds)( j9 z, X7 H( @" D9 f! R
//this is where PHP gets the time4 z2 e3 }7 [4 C( ]' `+ {
$timestamp = time();# E  m5 E; X' |; v% S
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed8 u+ v- B0 e  f# M' m
$timeout = $timestamp-$timeoutseconds;, G8 T/ F1 `! F0 t
//connect to database
; i+ S0 G; e  d5 @3 ]mysql_connect($server, $db_user);1 o9 y, {2 _; h7 r/ @0 }) J
//add the timestamp from the user to the online list
2 w' v; Q0 w# Y: [4 M$insert = mysql_db_query($database, "INSERT INTO useronline VALUES# E& e( n" L& X
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");$ ~8 g$ Y1 z4 g( q  K
if(!($insert)) {
' y/ Q, d4 t  c6 A/ U/ ?2 h) Qprint "Useronline Insert Failed > ";
2 |; ~* b7 m  t}
+ M' M! U, r; D( c//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
# Z! U- \; }  n6 F! X$ A) x$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
7 U1 }7 I5 ^2 s* Y, a* Y1 d- ]if(!($delete)) {5 I, o/ c/ @- l6 P$ q* Q
print "Useronline Delete Failed > ";& S  p# J+ r; `3 O. N! p3 f
}
5 ~0 H# e1 E- c' {$ q% @2 O//select the amount of people online, all uniques, which are online on THIS page
8 ~! k$ P# [  F6 O: n1 Q5 C; f$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");# r9 ^, ~3 @, W! F
if(!($result)) {6 B  Y5 c  m3 B% D8 _
print "Useronline Select Error > ";
' L* q/ ?, o+ \7 C}, H- D" c3 ]5 T. ]* J* U+ ^
//Count the number of rows = the number of people online
, W  T( d) F9 Z1 X* }3 i9 w$user = mysql_num_rows($result);1 ]  [7 b1 r8 {5 F* \& S
//spit out the results- Z* \) h* F7 W: G1 j, e) A
mysql_close();
. g2 u6 w+ S2 d  J4 ^if($user == 1) {- Z5 r9 u0 H* T$ x4 ]3 |
print("1 user online\n");
* U% n' V( d5 N7 G* X2 Q. E0 m} else {
4 {9 X, w8 |( M4 O: B4 aprint("$user users online\n");
: m; j3 Q4 f' `2 B' @}* n5 \. T! A) ]. _$ `
?>
0 ?# f: ~. J/ j1 ^* F9 e! l4 x- e% X: ], {' j. j& K4 y: k! h
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
: r$ @8 x. ~5 V( O时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
9 R8 L6 B, A0 _我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
  s  L! f2 u% ]5 y9 V当然啦,这两款主机也是相当不错的。9 B3 Z) Z; ]! ?/ |' U
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
0 ~1 _) T$ }! q, K" ]+ Y! X( Z+ L标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
) N' e$ `# e& Y0 A提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
$ N8 x6 l" y$ D8 v; ~空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=550 W% M- J/ V& a1 x' r- g* j8 z
自己加QQ去问吧。

TOP

发新话题