|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
. Z$ h ?, ?, O: K7 j" a% G我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。3 Z t) f$ D) H/ J* a- }
首先我创建MYSQL数据库表。
. L, C3 E, a7 p; | r0 |CREATE TABLE tablename (( _. l4 x0 i! s: O$ H/ D. l/ V
field type(max_length) DEFAULT 'default_value' (NOT) NULL
/ J' {! j/ j2 u# d2 G Q}可以使用的SQL语句。
! D, l" i3 k6 }: F# V3 I- C' s5 YCREATE TABLE useronline (0 M* E- }# ?/ l8 W. O
timestamp int(15) DEFAULT '0' NOT NULL,6 L* Z* ]! W! }, K" W" x# ~# D/ ~ E
ip varchar(40) NOT NULL,
! W- q1 G8 ?4 Sfile varchar(100) NOT NULL," |' n7 N# F' x
PRIMARY KEY (timestamp),
7 V W- L# y. j' s% z# NKEY ip (ip),8 `9 a, m* I( C) ~! P
KEY file (file)
+ U0 d/ R+ z3 g; |);下面我们是PHP脚本,首先我定义MYSQL的信息。
' z" X$ ~) s+ k7 U; i( q8 T$server = "localhost"; //你的服务器* y! r( U' U" R/ |- c, t/ d
$db_user = "root"; //你的mysql的用户名
3 G) ^$ U& [. J8 ~+ @$db_pass = "password"; //你的mysql的密码% G: N6 C* ^ X' m5 Y
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)0 X! k- [0 l6 r6 q* c; e; D
$timeoutseconds = 300;取当前时间。 H4 ?1 y2 c' W
$timestamp = time();上面的完整代码:
$ o8 e0 m9 B$ Q<?php
) q2 p9 L+ S4 b) `$server = "localhost"; //your server) R( x" K: A, Q& W, w" _
$db_user = "root"; //your mysql database username- ]6 E; K9 x9 h' }# @3 i
$db_pass = "password"; //your mysql database password if any" c2 k2 U1 G% h# o/ Y5 N) O
$database = "users"; //the db name
& L: U# F; e, P- M$timeoutseconds = 300;//timeoutseconds limit+ ]( C& ?# j; L
//get the current time
# z5 d1 M$ h( ` |3 d$timestamp = time();+ w6 P. V! ?+ E8 ~% V2 g
//calculate the lowest timestamp allowed" s" T( _0 C4 y0 ?% t0 U# j
$timeout = $timestamp-$timeoutseconds;
- @6 H; ^4 P7 t% l?>连接mysql
) L- T Z7 f4 e! J6 s3 C, y( U+ Qmysql_connect('localhost', 'username', 'password');也允许使用变量形式。! |: i Z. w: p/ W
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接- K, V" i7 J' a
mysql_connect($server, $db_user);查询数据库的代码:
" o, J8 c- A/ ]- W! o( Kmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。2 X( `4 [. ]5 x" v s* p
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES! N. v" s* g- H7 S/ E0 v. d* j
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");6 w% c9 k: Y, j, H5 h7 _" x( `! I
如果用户用错误信息的话,这样处理。: y- ~- x4 Q4 h) z5 S% i0 w' r
if(!($insert)) {+ `* e$ ?/ P$ i- A
print "Useronline Insert Failed > ";
" r, G2 G+ ~$ P% j* s1 w# U}然后实现当超过设置的时间就删除该用户记录。7 ?9 m& q6 b; K6 [% c1 W) R, ]7 ^
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
- U# r, y& E' l$ Tif(!($delete)) {( n3 `1 s! J) g
print "Useronline Delete Failed > ";
6 B6 ]1 q# p. \# p3 k}下面我们解决数据库中不同IP的问题
) {& J0 M; L/ l) I! E+ g$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
6 }& h1 A' f& q& Y3 X. rmysql_num_rows(query);来统计用户,代码如下。- M$ b5 J! }+ n6 D- m+ k
$user = mysql_num_rows($result);最后关闭数据库。' d, T( p- B1 p) c
mysql_close();显示在线的人数。. @' c8 K" _! e- q# ~/ w6 |- |
if($user == 1) {! B0 C; M8 x. f) y) V# E }7 ~
print("1 user online\n");; t) }) |; J' B" R* `3 q/ L
} else {2 q2 }" |( w" u1 ^( I. g* P
print("$user users online\n");
1 `9 ^, U- j* \ w. C3 w* e}最终把上面代码写成一个PHP文件如下。
# s: R8 R" V* c* c( o% M<?php6 G( o# j2 O G7 H4 R$ j$ U, j' c7 o
//Put your basic server info here( g' h: _/ l1 w
$server = "localhost"; //normally localhost
% n9 v2 z- k/ M9 f: X, Q$db_user = "root"; //your MySQL database username3 \4 |. E* ]. P" Y( \& G$ e
$db_pass = "password"; //your MySQL database password
! L. l! V5 D# p* x, }$database = "users";
" P, |6 g7 m2 M, d; L0 C$ W$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
1 C- h5 A" w. E; O3 G+ x& j// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last: ~+ i% M; T" b
// $timeoutseconds seconds)
; h' K$ I% C$ }: K2 f5 B, W" e- d//this is where PHP gets the time- H4 z8 l7 w( Y) G
$timestamp = time();
' @/ A7 w. X% e//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed% w3 ^- t0 I+ ?9 c2 _8 W
$timeout = $timestamp-$timeoutseconds;
0 s$ P) D2 j% F8 C {//connect to database! |$ j0 e8 ? ?; R5 \: N
mysql_connect($server, $db_user);" V7 @1 _8 g" Y
//add the timestamp from the user to the online list6 ]% c% {3 F& F2 u [( Z+ Z. w& {7 Y7 z
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
" K( y: n2 p. s7 i('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
- H7 X' d- O L5 c' q9 Eif(!($insert)) {
8 r) X5 b! m& J' _4 _+ oprint "Useronline Insert Failed > ";
$ W, g* G4 c. U6 { p( N0 P+ K}
2 {3 Q+ W9 ]' s. B& }//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
+ y3 x* n7 g" Y W* V) y$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");) d8 \* s# @2 @4 Y# U9 }
if(!($delete)) {
+ q7 P- K4 }. J7 y Q" _) [1 Xprint "Useronline Delete Failed > ";% ]! v6 L X1 s Q9 l) l
}# E, _% b/ x) C7 i
//select the amount of people online, all uniques, which are online on THIS page
& D) ^ g1 j: W4 l2 t$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");+ R! p' Z3 @5 ^" r7 ^
if(!($result)) {) e1 M0 G: l5 ?0 k4 d
print "Useronline Select Error > ";
) q! G$ ~- e- a# n' ?" J9 B" U}
7 B I5 K! F1 m4 D/ ^8 t//Count the number of rows = the number of people online
" U* K6 c9 m$ ~" h& I% I+ G$user = mysql_num_rows($result);1 q6 |( A H0 G J
//spit out the results
) E6 ~/ H1 {* ^9 o9 D2 ~mysql_close();
; F" e) t2 e, O& C' ]- ~! jif($user == 1) {
) _* o4 E4 O% V3 c! Lprint("1 user online\n");
6 W# d- L+ @3 S) p" c} else {& D3 S6 x+ G9 h {: }
print("$user users online\n");
3 G/ A, W3 @: Z3 J- g+ ?} u: i/ {% I* ?" B5 x# E( ]
?>
' S) ~- d! W9 q0 X4 b5 Y6 }
6 b# o' t8 H! g) C以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
: U( R7 A5 L. T时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。2 r- @( \0 u H4 i+ D9 \7 O: p
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。( M* [; w% V7 ]- t5 f, F. V- T
当然啦,这两款主机也是相当不错的。* w. g& ~5 `% x
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
: {2 Q$ i7 g! e; h: U' ]& ?9 C标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年5 o* Y4 `9 B {- @
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
6 n U5 ~7 D5 E+ h1 B" |! b" x空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=558 c: M7 X& p( _. \! L" q) S
自己加QQ去问吧。 |
|