|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
. W9 G5 |$ k* f" J5 u0 S9 F我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。4 S8 S* @8 J- U8 q8 I' j
首先我创建MYSQL数据库表。
* _- m) J5 o _% G6 @( uCREATE TABLE tablename (& } \9 K! B' _$ I
field type(max_length) DEFAULT 'default_value' (NOT) NULL
4 q" H( l3 ~5 l}可以使用的SQL语句。" e$ w @7 h+ M' m) ]+ p
CREATE TABLE useronline (& N- E# z" J( i+ D; H$ P
timestamp int(15) DEFAULT '0' NOT NULL,
; Z5 Z! C2 F0 N; S0 n7 @ip varchar(40) NOT NULL,8 n$ K9 T3 t! S0 F+ p, V3 x
file varchar(100) NOT NULL,
" ?! J( l) F7 g" |# OPRIMARY KEY (timestamp),' E1 K- W2 i8 @3 I% L% o' r: B
KEY ip (ip),
4 M: w$ T* k+ P5 L( D9 a0 ^KEY file (file)
% h& s3 d( f) O% b+ [. e);下面我们是PHP脚本,首先我定义MYSQL的信息。2 t" h" @8 H% u5 Q5 Y
$server = "localhost"; //你的服务器
0 n% r- E' b1 {- y$db_user = "root"; //你的mysql的用户名
) X4 L/ }9 C- T" K1 @$db_pass = "password"; //你的mysql的密码! K9 Y$ d( Y M& n
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
! y0 ^$ L0 X+ P# u* b$timeoutseconds = 300;取当前时间。+ T8 x+ H9 O+ \2 h" C. S
$timestamp = time();上面的完整代码:# g" C( }0 o7 {! o# i. e
<?php4 l5 |. P' g4 G
$server = "localhost"; //your server
8 w) y4 I$ _8 q4 E9 Z) g. q$db_user = "root"; //your mysql database username
- F. c' Q* N' `, d" P T. e$ A' i3 m$db_pass = "password"; //your mysql database password if any9 y7 }* H7 E3 f6 ^: ^: \
$database = "users"; //the db name' p4 J, z0 m% p( v. v6 ?. W$ K
$timeoutseconds = 300;//timeoutseconds limit
$ \# b4 O( I3 d3 I//get the current time
# e* y2 m ]/ a$ X$timestamp = time();
% s" L# p2 `, o4 p0 s( @! q//calculate the lowest timestamp allowed
% o/ S1 y7 o/ ?. k3 G' {+ A$timeout = $timestamp-$timeoutseconds;$ f- ^7 P1 E* J' e
?>连接mysql
! V9 I$ A3 J* t, Umysql_connect('localhost', 'username', 'password');也允许使用变量形式。
% l, y8 |5 K% a+ P; f" \mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接, O% U9 S) ]: x) J
mysql_connect($server, $db_user);查询数据库的代码:
0 `4 i" o0 M4 w& w5 Imysql_db_query('database', 'query');我们只要有访客就要增加一条记录。' \! q. j' p' Q; H
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
* ]0 i' U$ K' O. w. T$ u('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
4 D1 }# ?0 @7 m% Q1 ]# p如果用户用错误信息的话,这样处理。, L: k1 m$ s9 G# C3 C! r' }/ G! ]
if(!($insert)) {! H6 d! V7 I+ B
print "Useronline Insert Failed > ";0 @; \, H! A) G( M, {$ \
}然后实现当超过设置的时间就删除该用户记录。
$ ^: W7 J N! A) |6 A7 J$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。. G$ E. J2 q, `2 H1 b+ T1 d7 U
if(!($delete)) {
2 [, |6 K3 e: k3 e# V: Mprint "Useronline Delete Failed > ";
6 f1 i% I+ s0 T+ c, g}下面我们解决数据库中不同IP的问题
2 Y+ }6 e# }2 V, ^# W+ ]$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
" [7 ]. |9 H' V" f& K& F# c9 Amysql_num_rows(query);来统计用户,代码如下。
7 e: e. ]# {% e$user = mysql_num_rows($result);最后关闭数据库。' C0 o, r" z3 i' @% y
mysql_close();显示在线的人数。! n1 Q; M! X( d! ]6 Z
if($user == 1) {+ X/ A( G" o, N
print("1 user online\n");. _& z' Y! I0 Q7 }0 v! x" e
} else {) c/ I! m# h/ ^( x$ R' ^" i
print("$user users online\n");( h$ O; `% r* k, m
}最终把上面代码写成一个PHP文件如下。
9 T6 ~7 j2 ^+ p6 k3 D) Y. B- b' J<?php" e8 y2 d- i* m, ?
//Put your basic server info here+ X2 m; @: I r7 b7 d# b
$server = "localhost"; //normally localhost
7 g, _9 \9 c( i! f! i8 V$db_user = "root"; //your MySQL database username
8 N1 o: i7 X- D( T$ i. R! ~- ~/ r$db_pass = "password"; //your MySQL database password
8 |! z& v% w4 x3 I+ K6 K$database = "users";
9 r) @, O9 D! E3 V* k* p/ D! C3 `$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
" o- c. l$ P# {& I( i8 z' y* L// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
. A; I6 H$ K! j- y+ f& q' w+ T( P// $timeoutseconds seconds): N. L! R! P3 B/ j5 v7 W# U
//this is where PHP gets the time/ f9 D+ ]3 k% M2 i7 F+ P: x
$timestamp = time();# ~! Q4 I, d, F5 M1 ?
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed1 x' b0 e4 E' _/ h2 l( B9 J
$timeout = $timestamp-$timeoutseconds;
u9 e1 x: m* Q6 Z) T1 k: C& [//connect to database
7 }7 a2 L& h) E B1 F$ g! omysql_connect($server, $db_user);$ Y7 h# ]* q7 C( e
//add the timestamp from the user to the online list! p3 v3 Q/ y5 D* U' p. G. L
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
: R5 _# i8 U! N5 |; A('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");* K4 i/ v/ b4 i4 v" E/ b- U+ z
if(!($insert)) {$ H' r! i$ I( z
print "Useronline Insert Failed > ";. U. f# b, p, x" q" }6 H
}6 l) F# Q7 }$ P
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.& u, e! {1 P* a4 t8 W5 p; L' v
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");$ _- e" R1 z2 T3 V& A7 ~) i/ H
if(!($delete)) {
8 W+ A# H* A3 O2 V- ?3 j" C$ Wprint "Useronline Delete Failed > ";: r6 X/ v" `8 M2 A& P+ {" T
}
( D) e( y4 a, }3 ?" F) @//select the amount of people online, all uniques, which are online on THIS page
, u$ R8 W6 {/ d7 T$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
1 X7 ~* L' i. N. k* ^" C' j" Uif(!($result)) {
2 z+ u" ]% `9 Nprint "Useronline Select Error > ";
+ w# s+ Z( J% j7 F1 P3 C}- R- W4 h* c4 _/ z# Y" D3 j! s# v
//Count the number of rows = the number of people online
! {0 ]% A& F1 n" _) l$user = mysql_num_rows($result);
" Y8 ?& G7 `- o0 L g; B//spit out the results
3 a* I( g/ W7 d; F0 O2 P$ dmysql_close();
0 d7 Z( f; m" _& Vif($user == 1) {8 C2 M# h0 S- P5 d
print("1 user online\n");; q0 G$ w& E1 d# U4 l
} else {8 m% }# R2 q, U- M _3 H
print("$user users online\n");3 L& |$ W; R( P% W& h6 ^4 w2 k7 l7 ]
}6 Z0 r7 W P, z1 }' W
?>
: P7 G1 U1 Q1 ?4 F$ M# c
3 Z" G; W% n; k! M8 G9 J以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
O; X4 |" Y& _, q7 ~$ f, v时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。* ~! r: U' c# s7 p
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。* I( ]; J. Z: ^$ y2 B H* [
当然啦,这两款主机也是相当不错的。
" F+ g0 ~! t$ `. D( I智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年+ S, ~* U4 d, I0 ~' x9 E- r( b$ ~8 [
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年6 M- |4 g0 P' Q5 i) a" g
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ . w: g3 k1 Z- |% O! x
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
2 u- m/ s* J9 v3 |3 u5 `自己加QQ去问吧。 |
|