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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!* y4 A( u' W: Y2 S& T" h2 `: N
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
  o6 f- O& _2 M5 P: ^7 }' g首先我创建MYSQL数据库表。
- j; j7 k+ K6 q# H  DCREATE TABLE tablename (
4 U1 d* Y. J& _field type(max_length) DEFAULT 'default_value' (NOT) NULL+ E% R- x8 o/ `5 b: Y
}可以使用的SQL语句。( S7 s) G+ q% m2 [0 L/ Z  x) Z3 Z
CREATE TABLE useronline (
; j* s- i8 K  |, g+ Otimestamp int(15) DEFAULT '0' NOT NULL,2 c" q, W, V4 U: L( ~. S
ip varchar(40) NOT NULL,  g. M; A+ X' P7 U# @- D4 w7 x
file varchar(100) NOT NULL,
1 Q+ m* ~& V! t+ X( _PRIMARY KEY (timestamp),
; g/ d* t( s1 i; |/ xKEY ip (ip),# {$ [( C, R( j4 R' s
KEY file (file)$ B) y( `% o) w7 y
);下面我们是PHP脚本,首先我定义MYSQL的信息。) U1 T4 |6 \/ t8 {, B
$server = "localhost"; //你的服务器8 }* c% m$ H4 r4 W
$db_user = "root"; //你的mysql的用户名$ Y2 }0 h$ v$ B" N3 ]2 C
$db_pass = "password"; //你的mysql的密码' I5 j7 `; p+ i& E) @
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)$ f5 x; X' i5 A- v& V- [: i
$timeoutseconds = 300;取当前时间。0 u1 K" |5 E9 S4 M# B
$timestamp = time();上面的完整代码:( `. S0 P& b8 P' S/ k
<?php
1 Q: {  J* c# r5 q$server = "localhost"; //your server& F, b- c9 e" v6 [9 f1 ^* ?
$db_user = "root"; //your mysql database username
7 Z- U9 P; w+ ]% P" }: X% p$db_pass = "password"; //your mysql database password if any4 p' P* p: a4 R$ ~3 x+ f7 O6 p
$database = "users"; //the db name
4 R# c6 o: P% H0 o; ]$timeoutseconds = 300;//timeoutseconds limit
1 D/ ^/ K& G  Z" N1 _1 o  C//get the current time- B4 L& `! b$ Q8 e
$timestamp = time();8 ~+ h$ h5 R& }
//calculate the lowest timestamp allowed: R2 b. G% S" h% [: C& r3 Z
$timeout = $timestamp-$timeoutseconds;% K: N" \, [6 `# E: b* D
?>连接mysql
" Z9 ~* k  }. U! R; ~1 Rmysql_connect('localhost', 'username', 'password');也允许使用变量形式。% u$ A4 }3 ?2 G: U  G- ~
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
$ U- c9 c5 {; i+ z2 `$ }  qmysql_connect($server, $db_user);查询数据库的代码:
( R: ?- j+ t1 m! S  G% tmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
# Z3 z6 }) F! Y1 M$insert = mysql_db_query($database, "INSERT INTO useronline VALUES/ U& {# z: S( Y! R0 v
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");. E% j8 D6 R0 D9 F7 P, S
如果用户用错误信息的话,这样处理。
8 e: W* v7 D; H3 S0 X) Bif(!($insert)) {
' N* t! u0 y' X4 s2 Iprint "Useronline Insert Failed > ";4 z+ U" L4 G; i4 Z+ _/ c9 V
}然后实现当超过设置的时间就删除该用户记录。6 w# Z+ S2 m) ?+ I
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。% C2 ^8 O- J7 F, T5 D5 Y- U* h2 B
if(!($delete)) {( O+ D: O7 h; m3 `' Q' B
print "Useronline Delete Failed > ";
) Y( e; X6 U- [- K. n}下面我们解决数据库中不同IP的问题& c8 y  ~2 G) B) s8 J- h
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用" H+ [" q% K' ~; z
mysql_num_rows(query);来统计用户,代码如下。+ b8 t! {- ?" b: p- X& ^. x
$user = mysql_num_rows($result);最后关闭数据库。
( E$ W, m5 m9 M! J6 {mysql_close();显示在线的人数。* X' N  Z& D/ i( n/ @
if($user == 1) {
8 K7 P2 C/ U# _" |, [print("1 user online\n");7 v* M( |( _, C( U
} else {% |* a' E3 T) q( d( U
print("$user users online\n");
. V5 ]. E# j. w$ n! _5 j0 w" V}最终把上面代码写成一个PHP文件如下。
; l9 a. R' `# y; d; {: `9 C<?php4 G; J8 L! G; d  ]. I! `$ _4 I% `5 A( T
//Put your basic server info here
$ d; `, n( [+ v: _6 ~6 a0 r, H$server = "localhost"; //normally localhost
- C+ g5 u. M9 h- Z$db_user = "root"; //your MySQL database username
+ F& d' w' v. C6 `2 i; `$db_pass = "password"; //your MySQL database password
$ k* p9 l0 ^4 o4 k9 B1 h0 T1 J9 W$database = "users";
/ o4 {, O1 a7 x+ r$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
4 [5 O5 i! C* p7 [// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
7 t! b9 `& K( `3 A// $timeoutseconds seconds)
. S8 z8 e8 |! n//this is where PHP gets the time0 ?0 g9 F. Z# p' Y
$timestamp = time();- X, F7 O* Z/ R5 A6 Q  L
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed2 ~" I, q" [! i! ]/ ?
$timeout = $timestamp-$timeoutseconds;- o" H2 y- z, @' O
//connect to database) p  q, M5 {; T* \* P; T/ P; a
mysql_connect($server, $db_user);0 E+ R, `" ?5 H5 V, ?* D
//add the timestamp from the user to the online list
6 h) K" f" i$ w8 X* C2 U$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
4 L0 C4 L2 U, _) s('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
2 I$ |4 r2 u8 f: m+ Nif(!($insert)) {
  s; k6 A& z4 F' B/ P. C2 Sprint "Useronline Insert Failed > ";( Q1 V) V5 I6 D" |9 j
}
$ i! P" X) [1 d/ S# J, `7 W//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
& ~& w- `' `9 o9 ^/ G7 L$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
! M  G3 I6 }) y: K" E- ?if(!($delete)) {7 u& k8 a$ X/ ~) ?7 a% @; y$ j
print "Useronline Delete Failed > ";
4 _& w- w5 C: A0 P0 I$ ]}
! r7 N2 n5 D& ~  t' \) H1 t. C//select the amount of people online, all uniques, which are online on THIS page
! J% s+ T9 i! F8 |$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
; i+ ^, a3 {) l/ L/ b* r* S9 {. nif(!($result)) {, l# Z3 U" i2 D
print "Useronline Select Error > ";
0 g# h* w5 k! K7 _/ J9 L7 Q4 U7 H}- Z$ F' S* B# t- @! W4 r8 h( T
//Count the number of rows = the number of people online: P2 i. A9 r- Q- ~
$user = mysql_num_rows($result);9 G6 A4 p- I9 S  p7 E
//spit out the results" `+ Z7 q" e8 m. A6 Z& i, T
mysql_close();7 p) c1 e( Y" @9 o" G
if($user == 1) {. W6 ^4 X2 V5 s* x
print("1 user online\n");+ W# r3 y8 A7 [
} else {: N8 u3 R* ^, z0 d! v! j
print("$user users online\n");( p8 J' J" |/ l6 `( ^. w4 r
}
) l% i! v/ P' J! F?>
7 }; z1 T3 B1 A* y
0 r: \' E! W1 ?/ G  v7 f) F以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
7 E/ w, L3 U) ]' }5 h5 D0 l时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
7 o% P% T$ Z" ~+ v' F我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。! g' \) H9 v* S3 m% u
当然啦,这两款主机也是相当不错的。
! w% j0 g: Y% {! C! f) W智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年. V9 c& l2 q% U& N; C% w# S- c6 t
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年, l$ b# {5 o5 u2 R. M. F
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ % j: w2 W' H- Y+ ?" U4 M
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55+ Q& h1 y3 t/ o6 i
自己加QQ去问吧。

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