返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!9 U0 {6 v% E5 d, r* U
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。8 v' X! y! N2 i# ^
首先我创建MYSQL数据库表。) M/ S8 t8 W! O7 ~0 |
CREATE TABLE tablename (9 c9 s1 [( P9 b5 _) d& O
field type(max_length) DEFAULT 'default_value' (NOT) NULL7 [. p9 ?4 ]' x
}可以使用的SQL语句。
; Z0 a5 N9 e3 I3 [( ^CREATE TABLE useronline (
$ [: D: E) r1 a- q1 [timestamp int(15) DEFAULT '0' NOT NULL,, c3 d2 L8 x& c/ A% q& _
ip varchar(40) NOT NULL,
! D* A. y9 x/ d& L% `( gfile varchar(100) NOT NULL,% V4 Y1 Z" ^: W8 P: G7 G
PRIMARY KEY (timestamp)," z; `; g3 ~: H! U* H6 ?, P8 x
KEY ip (ip),1 D5 ]* p- S" C' [
KEY file (file)
! [' T/ M; u/ X: [- J);下面我们是PHP脚本,首先我定义MYSQL的信息。# L% c  q5 E3 ~" }6 J. _$ z
$server = "localhost"; //你的服务器) }2 n+ W2 Y& l6 o) D9 y0 v
$db_user = "root"; //你的mysql的用户名
; U; J0 a) G: c2 h$db_pass = "password"; //你的mysql的密码
7 Y7 g* _; s. B+ f4 S3 _$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
; A' s) ~' R& S6 y; b$timeoutseconds = 300;取当前时间。# N; `$ H' L: ?6 Z  g8 c  w
$timestamp = time();上面的完整代码:+ t' j, g, b( H: l; D
<?php
2 l' o* L# i+ I& y! m+ d$server = "localhost"; //your server4 H6 i: D4 L* m/ C+ n" D) q9 D
$db_user = "root"; //your mysql database username
3 K3 w( b' ^2 M; V$db_pass = "password"; //your mysql database password if any
8 q0 k7 X4 l5 x* F- a0 n) I3 A$database = "users"; //the db name4 H" V7 }, _6 E- r5 O/ W1 w
$timeoutseconds = 300;//timeoutseconds limit: V$ e( V! t( V! X9 l6 h' P2 z
//get the current time4 _4 c- B. g) c1 ^
$timestamp = time();* \5 W8 h& B$ B, k% C
//calculate the lowest timestamp allowed7 C8 [4 O* f9 o4 N: O' E
$timeout = $timestamp-$timeoutseconds;7 p1 x- v4 K# P. i) }% z
?>连接mysql
% }3 j$ B% c" p4 E, x% Omysql_connect('localhost', 'username', 'password');也允许使用变量形式。
8 ?0 i1 S$ {" p3 A9 _8 r5 Kmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接/ I3 z7 d1 m. N/ o* _+ g: x' _1 K
mysql_connect($server, $db_user);查询数据库的代码:) {6 \+ a8 X% [/ b
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
2 e  x& E7 ?6 Q# P3 l$ ^% R$insert = mysql_db_query($database, "INSERT INTO useronline VALUES2 C. P6 r6 W) ^( D
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
+ A8 M( r2 j9 m如果用户用错误信息的话,这样处理。
0 r2 @, [# Q5 k7 H( u' G  G2 s9 Qif(!($insert)) {4 e- `! Z( m: }
print "Useronline Insert Failed > ";6 t$ M7 E- J; n; @; Y
}然后实现当超过设置的时间就删除该用户记录。2 v' X& S7 v+ B" t+ U
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。& F1 s$ Q- L  \5 ]9 B
if(!($delete)) {
4 ^; i' l# T. a- Vprint "Useronline Delete Failed > ";
7 {+ Y! Z4 e4 G4 _  \9 o) c" y0 d}下面我们解决数据库中不同IP的问题4 ]% J/ d8 \1 Y' G# j3 w
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
0 o$ N7 A: c- S; |4 umysql_num_rows(query);来统计用户,代码如下。/ d9 k2 ?/ C; A
$user = mysql_num_rows($result);最后关闭数据库。
7 i5 v  ~5 g9 ~* @& D0 p3 Y9 kmysql_close();显示在线的人数。9 S, n' X5 W5 \6 z
if($user == 1) {
  m8 X4 l6 p. D6 t" l* D' aprint("1 user online\n");" j' d# i- E4 p. T
} else {
+ q" C+ E% S* o' ]+ H: ~9 \# Pprint("$user users online\n");: M" H2 H2 P& o/ Y! ~8 r
}最终把上面代码写成一个PHP文件如下。
2 o1 x; R2 |; M1 X& r! Z. t* Y<?php
; c$ |; m& @, I* x//Put your basic server info here' O! a- U! U2 C7 v0 p
$server = "localhost"; //normally localhost# h/ m; u) {3 |- Z3 K* O( X0 Y9 y
$db_user = "root"; //your MySQL database username5 f6 p. @: x& E" u, i
$db_pass = "password"; //your MySQL database password) P, z9 O7 ^. m' O, u- A
$database = "users";
: Q6 T+ G9 r+ j* n1 k" f$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
  M1 o6 g) _, J0 B5 Z// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
" T" }4 A* `/ \// $timeoutseconds seconds)
! N* c+ z1 h0 Q! A8 O/ z3 y. D//this is where PHP gets the time
: o9 p' G3 B- f$timestamp = time();; X$ [4 E, k7 r7 D1 j5 M
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
) ^& e/ f" S( [3 t" A8 B( C$timeout = $timestamp-$timeoutseconds;
# p0 Z2 g; d& z$ `. P$ I& Z+ E//connect to database
  |) V" I8 h7 y  jmysql_connect($server, $db_user);# e! ~/ Y6 O/ C
//add the timestamp from the user to the online list
8 y1 H4 ^! e3 Q. Y$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
4 t- d  e5 R2 ^; r# ?3 Z# d('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");% R5 S' E4 Z# W' I! q  X1 o
if(!($insert)) {, C1 D7 G8 \% j( B4 v0 B* o6 v$ o2 V
print "Useronline Insert Failed > ";/ A/ y: j- K4 [' c0 @: Q
}! r9 _5 d7 e1 `% K9 K
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds./ D' J* ^* Q- S" X7 V
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");- u4 v4 j6 Z; y
if(!($delete)) {
8 b- f3 b' R& Q. S# m5 O8 N$ v% rprint "Useronline Delete Failed > ";
$ B7 o/ N3 m* b* X  L1 T( B4 U}3 C* J5 s9 v" x2 n7 I
//select the amount of people online, all uniques, which are online on THIS page
0 @: `& }8 h8 w4 R$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");0 z3 o' `; ?$ _$ r5 w+ H  M4 x* N
if(!($result)) {7 l, e% j3 h$ }4 {% g; ^3 r6 N9 q
print "Useronline Select Error > ";2 e3 W6 V+ z2 x8 r; y% P6 f& d* q8 @
}/ b) y( ]3 f0 o7 K* z
//Count the number of rows = the number of people online0 @. q) L* {9 S8 d5 |
$user = mysql_num_rows($result);
( _% q( r0 X7 i) ^* H- x" i//spit out the results+ t1 c; L( R) f8 Q( E( S
mysql_close();
% `1 e* X: V1 Q0 Xif($user == 1) {3 s' @+ T( U, _8 L2 E
print("1 user online\n");+ E% z3 p1 i; b- A9 J! O9 T+ P7 ?9 M
} else {
: [; [! d- s. ?print("$user users online\n");
0 i9 l4 ~6 _! h}0 j) q! }  q% A. ]; D
?>2 S! t; i, Q4 I7 x2 f5 O& f% z
: f; |6 i: N* D3 B- O6 `
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
3 D  H, \' Y* T: _0 y. Z- m( w时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
. X( X7 @" Z- s1 P* y. b我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
3 H3 ?. r. ^, {8 I1 g; n" y0 b当然啦,这两款主机也是相当不错的。
: r' a; |* i0 m7 b7 K智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
" S3 _& e( t- Q( p% h标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年1 z  e, H3 r- R( E9 O
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ ' A6 c! V, V8 S0 l1 ]2 P) O
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=551 x3 r- J/ |  B9 H
自己加QQ去问吧。

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