返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!7 z  W/ k' a! K; V
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。9 P" \+ a$ [. j$ E4 T/ ^
首先我创建MYSQL数据库表。
9 K$ J0 l4 u6 w  R) `4 M; ?9 E$ @8 yCREATE TABLE tablename (5 Y* _) G: R" B9 v( j* `
field type(max_length) DEFAULT 'default_value' (NOT) NULL' j* M. n' Z8 S/ ~
}可以使用的SQL语句。
' [3 R# A! s* u) K6 q4 l) FCREATE TABLE useronline (/ B5 R; _) f  a5 h: m/ q
timestamp int(15) DEFAULT '0' NOT NULL,0 p4 Z: y& M$ m0 }( u7 ^
ip varchar(40) NOT NULL,2 a% o" @+ H+ O& v/ Y4 [* A
file varchar(100) NOT NULL,5 S0 p: I) I% T( j
PRIMARY KEY (timestamp),6 s4 p" q" C6 X! H
KEY ip (ip),1 N7 }7 [1 f1 _# n
KEY file (file)% x5 Q8 n3 c0 W/ }3 x$ n. q  u
);下面我们是PHP脚本,首先我定义MYSQL的信息。
7 r+ v% X$ S/ p# w& h9 ?5 M$server = "localhost"; //你的服务器4 |& m) n4 Z- x& I+ t# P
$db_user = "root"; //你的mysql的用户名0 s* \; A6 [+ y  d8 g0 m
$db_pass = "password"; //你的mysql的密码
/ l  e, k' d$ `. A4 V: E$ p* A) c$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)/ b+ [5 |& v% C3 }, b5 R" R
$timeoutseconds = 300;取当前时间。
; e4 o/ K1 x- o' C4 Y0 p" O/ \$timestamp = time();上面的完整代码:
0 K& m1 r& n5 c9 ~2 V$ b  A' d<?php4 O7 U3 c+ n% B! i. o, ~9 e
$server = "localhost"; //your server" x$ w4 F1 e' t# f- d7 E, F
$db_user = "root"; //your mysql database username
: Q- F7 ], v  n: N% I/ y$db_pass = "password"; //your mysql database password if any0 t4 r  ], e' X7 J  y
$database = "users"; //the db name
* ^$ Z5 x+ g8 v# F$timeoutseconds = 300;//timeoutseconds limit9 c+ o1 H0 g( Y4 {! @! E
//get the current time
) X7 o) q8 A, u2 l! H  I$ t$timestamp = time();; R+ T7 X/ A. L. P! C' q. d
//calculate the lowest timestamp allowed0 j9 E8 C: u  a" P3 @5 E1 ?
$timeout = $timestamp-$timeoutseconds;: Z1 c( z, f2 w. G2 u  v, @! S
?>连接mysql
6 C; O" V2 y1 ?4 |  mmysql_connect('localhost', 'username', 'password');也允许使用变量形式。5 @+ Z+ ?$ V4 M3 U
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接- E& L7 x4 F+ }2 I& A) ~& q
mysql_connect($server, $db_user);查询数据库的代码:0 U1 X4 u; b2 L  K6 |0 i
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。# ?  h5 A- ~( w4 l& R" ]3 u. g
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
# m% ?5 a8 n- V5 P* W8 r0 V('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
) ?# v# {* o7 U3 ^9 Y2 i( H$ u如果用户用错误信息的话,这样处理。
& D' w" ~% y) z: t9 s8 Uif(!($insert)) {
" y0 q. s  ^* t* X; dprint "Useronline Insert Failed > ";* H8 L, d; Y; e7 H: m
}然后实现当超过设置的时间就删除该用户记录。6 x# o- o5 G1 B! j! S4 d
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。2 ]+ z$ @: U$ g8 Q
if(!($delete)) {# f3 k( @5 h$ y# y
print "Useronline Delete Failed > ";0 |. O# e# f# x, r. p
}下面我们解决数据库中不同IP的问题
% U2 @( H9 z, N8 ?$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
1 C4 _8 U1 E: i+ Fmysql_num_rows(query);来统计用户,代码如下。
% ~* K. k9 G2 e) f- m' u$user = mysql_num_rows($result);最后关闭数据库。3 y, [" n5 L! I" }7 a- L
mysql_close();显示在线的人数。
7 ]8 \3 v6 z7 C5 Q* |3 [/ gif($user == 1) {
. k3 [5 w$ X4 x8 N) p8 l' }5 {8 uprint("1 user online\n");  {' V% k7 y" R; q6 e3 G
} else {
; j& O3 v0 ^/ H, bprint("$user users online\n");
) e9 Y- M1 ]) W- _# N9 G( F" r}最终把上面代码写成一个PHP文件如下。5 N7 u; R0 T2 T
<?php
+ y+ A  o, Z* R# Y+ F//Put your basic server info here
# n. X! S% a" T  X2 I$server = "localhost"; //normally localhost; B7 ]) w7 O9 j8 D( N9 m
$db_user = "root"; //your MySQL database username7 D% x7 D8 F. d+ ]) p
$db_pass = "password"; //your MySQL database password( W. H9 A7 p  d( [1 `  _
$database = "users";. ^+ J1 ]) ^: n
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are' Q, {# k" _" K9 l  i. S3 p# j* ?
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
& z0 P+ d5 X3 ?, t& V% H1 k// $timeoutseconds seconds)
" G, }' z1 G/ V2 h% p  R8 s//this is where PHP gets the time8 s# M4 \( \/ h
$timestamp = time();
) j9 o) q: U) \//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed( c5 V% x( \8 B4 c. [: ?
$timeout = $timestamp-$timeoutseconds;$ |- p" Z8 F# v! K8 M! e
//connect to database% T* T2 t7 _( x1 O
mysql_connect($server, $db_user);
& H' `' V# ?8 o//add the timestamp from the user to the online list
& C1 U4 u" k# F1 w$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
; x* g3 ]- {; |' x5 d( k('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
  W5 G0 b/ y3 tif(!($insert)) {
8 c; f+ I8 U! A8 O% Fprint "Useronline Insert Failed > ";
) r, F  ]4 u3 ]}& S% G# `4 y( q* w& R* n( y
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
" P" i3 x/ U6 L$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");8 ?5 s/ p7 n# Z2 {( P8 A# W4 O0 b
if(!($delete)) {3 ~) k+ S) ~3 S
print "Useronline Delete Failed > ";/ X' D' F- U4 f! Q( |( H8 }
}
8 p  y! O" J, U; J6 [7 e//select the amount of people online, all uniques, which are online on THIS page
% y0 \1 K5 R" s! ]$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
5 p- C7 t3 v4 W7 n0 dif(!($result)) {- @$ x$ @1 `* g8 Z: @# e; |
print "Useronline Select Error > ";+ q- A. Z% b  `/ }  f) s% {5 o4 r
}
+ R7 x. H" [: Y# m- Z//Count the number of rows = the number of people online* l2 y% o( G" m/ A8 [0 H( V
$user = mysql_num_rows($result);
& ]$ U) g0 R/ u6 W% P//spit out the results2 n0 ]- l! J  S: N4 P+ ^
mysql_close();
' E/ A* A4 |- U  lif($user == 1) {
. E* z; d4 v1 X3 N6 }1 ]! Tprint("1 user online\n");
9 r5 P* w  C  W" v, u) \3 V} else {
4 u0 ^: h6 l7 G) V  [5 ~0 zprint("$user users online\n");
' B1 ?6 Z: {- o, E' [}
6 O7 M( {$ J# `6 Q/ u/ ~?>
9 u! G% p. j( H
" a5 F& Q# ^- I2 M" a以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。7 O' `3 T1 D# B( s. }9 G1 o
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
# Q* ~) o" D! W" o& p! g我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
# a' {% V" A( i* Z6 m: l) _1 M  j当然啦,这两款主机也是相当不错的。
# j! a, u% ]$ L9 r9 f智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
5 g4 J- p8 F" f+ E- k标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
0 T6 K$ `% K" _提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 5 z* o# B2 X, p+ }6 A
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
) E' X3 Y; S) V5 k$ ]* F+ e+ p自己加QQ去问吧。

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