|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
" m. K0 \# K3 V: A我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。& q) ?$ R5 k5 k$ O1 l0 n
首先我创建MYSQL数据库表。* F6 T" H$ E: Y
CREATE TABLE tablename (: L9 S `# j$ r+ V+ [6 b; c T2 @1 |
field type(max_length) DEFAULT 'default_value' (NOT) NULL
, d* F! F& H7 _: ]8 _}可以使用的SQL语句。
6 b, E8 b. O6 v: `) M# B" ]4 qCREATE TABLE useronline (- W) t, U0 u D3 s. x4 X/ ?, T
timestamp int(15) DEFAULT '0' NOT NULL,
) R& Y- J. E% d) l( a4 `& P* g" aip varchar(40) NOT NULL,( _& u# @+ T" B: A. l, W
file varchar(100) NOT NULL,0 \/ b. N4 V3 o# F6 m8 K
PRIMARY KEY (timestamp),
% y9 E: r2 M$ A2 ^/ w0 G# OKEY ip (ip),6 z' j2 A5 b' A4 J4 p! i3 w1 s f# N
KEY file (file)
& r$ K( C4 F3 J& a! v2 I$ W$ @);下面我们是PHP脚本,首先我定义MYSQL的信息。2 v+ a6 x; f$ g9 }
$server = "localhost"; //你的服务器
1 z, S7 ^$ L5 X* M1 Q' I* x. R$db_user = "root"; //你的mysql的用户名7 P- ?7 Z" y' ^& q0 ?
$db_pass = "password"; //你的mysql的密码" M2 B% l- U1 b4 C/ @6 ^
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数) |3 k% F4 n' T+ J% z, Y
$timeoutseconds = 300;取当前时间。* u2 u) _" h) X5 y& M/ S7 N
$timestamp = time();上面的完整代码:0 W0 d' A4 V! k! P6 W; V* K$ p
<?php" _" T8 i" J% |( l
$server = "localhost"; //your server
+ {+ D, X$ Z e7 m8 ?+ M$db_user = "root"; //your mysql database username
6 X! H, a7 y/ x, B1 S" w$db_pass = "password"; //your mysql database password if any! Q9 ~' S9 b( Q$ Q
$database = "users"; //the db name3 M$ z7 H+ K5 Z" [; x$ Z3 E
$timeoutseconds = 300;//timeoutseconds limit/ q+ z4 K2 k" M1 \4 i0 R# Z4 L# d
//get the current time0 s2 R* r/ e+ j5 a& { Y
$timestamp = time();; d6 a" J7 v+ {6 J2 T; Q# i
//calculate the lowest timestamp allowed
3 N$ r; c; A0 |' F! x$timeout = $timestamp-$timeoutseconds;% L! J u1 }2 M3 A
?>连接mysql4 D1 v* I, ? c( y6 }
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
' \; ~& V/ v, @# [, bmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接5 a" |( E4 b( V! U: T
mysql_connect($server, $db_user);查询数据库的代码:9 a1 C: G4 ]) M% p
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。! Q. J. T( O6 l P: t7 _7 I3 |
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
4 P3 ?% ^6 B+ e, }7 O! N('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");* @# E4 W U- Q& k: h
如果用户用错误信息的话,这样处理。
: |# t4 ]. O$ R: V" mif(!($insert)) {
: M; o8 u. n: {! Kprint "Useronline Insert Failed > ";
- L8 ^( y9 g1 b! T) ~" J# t}然后实现当超过设置的时间就删除该用户记录。, ^9 t5 d1 O6 f2 I8 }$ a" _$ u' X3 @$ F
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
7 T( d! H; m6 x/ S1 ^% ?3 Q5 _if(!($delete)) {
% i9 i/ u0 u2 W% B# V! Tprint "Useronline Delete Failed > ";0 K' j8 U3 o- J5 y+ K$ }
}下面我们解决数据库中不同IP的问题
, |; |3 I, `5 w. w4 `$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用, P e4 @# f9 z: f
mysql_num_rows(query);来统计用户,代码如下。
' E2 ]# l$ \5 E1 I4 ~$user = mysql_num_rows($result);最后关闭数据库。7 i/ U( |$ H7 D' j3 W6 ]4 e
mysql_close();显示在线的人数。. W# J- P# ~9 p! J3 T6 u+ H
if($user == 1) {
3 \" v9 [, N9 p' p4 {: D oprint("1 user online\n");
2 Z5 t Q" W! ~( g1 f8 u} else {
) ?8 A/ A5 h2 [0 Bprint("$user users online\n");
' f* h3 C& g; n2 O, S1 j9 c" U9 T2 O}最终把上面代码写成一个PHP文件如下。( P0 |) x* x5 h
<?php. h+ N+ {& | N
//Put your basic server info here
* }9 {( T' g; L) T2 N8 r$server = "localhost"; //normally localhost
* H* C) b5 u# M$db_user = "root"; //your MySQL database username
; p1 ^! V% ^5 f+ n$db_pass = "password"; //your MySQL database password
( n0 ]. ]& K* F4 ~# [* r6 M$database = "users";
0 R1 ^. d) ^2 h$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are) @9 {' Z# M' A; F. W4 N; P3 e1 a
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
; x2 C5 t L+ D% `// $timeoutseconds seconds)5 J, q' v1 J% e" X/ j. ]5 S E
//this is where PHP gets the time+ Y1 U4 v9 [+ E. U$ I
$timestamp = time();/ W$ v3 d1 m; G& }4 d- g* Y/ j
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
! { j& i2 a6 j& r. b4 b7 |. i" D) B$timeout = $timestamp-$timeoutseconds;
. f8 I& B& a( ~. x//connect to database
$ y& h7 W g3 x3 w, imysql_connect($server, $db_user);; W5 ^6 ~4 m7 P) k* E5 j
//add the timestamp from the user to the online list
- Z9 n, k# Z3 }* O, c$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
7 o4 e- {9 ]' B('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");7 D& U5 T# Z+ u- U$ ]7 u u) \$ m: `4 z
if(!($insert)) {3 R9 X2 t" d4 E/ v3 P; ^
print "Useronline Insert Failed > ";0 Q; G6 \0 _3 l' H; z9 \
}
( S7 N9 d& p1 G/ _% f3 N/ Y//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.: ?1 J, K+ F' t4 g. N$ O s' h
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
. l6 D3 A1 f+ ]" e' c7 v8 ~3 {if(!($delete)) {
! t4 o. V% }% b8 z7 e" q# U3 Xprint "Useronline Delete Failed > ";! ]1 v U$ R, {; T5 n
}& d$ ~; z9 G# Y% Y: b
//select the amount of people online, all uniques, which are online on THIS page# t/ Y( f2 _( F6 U. @7 B% i4 ~, W
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");4 C# M0 @6 G$ o/ O: Y+ G
if(!($result)) {4 G0 E5 J2 h2 p, H
print "Useronline Select Error > ";
1 f1 Q+ @6 b7 M) Q* r2 K5 u' @}+ T- v9 D% d. B" _
//Count the number of rows = the number of people online, b( b- U+ u U6 y4 _; G
$user = mysql_num_rows($result);" e. z$ o# s# E) @ e D. m( x
//spit out the results
' z4 B" Z4 x( y4 smysql_close();
4 l5 Q2 Z: G0 Z$ [& Wif($user == 1) {3 l( H$ ~ t2 L8 d
print("1 user online\n");
7 M4 Y7 j7 B/ C9 K$ o. H} else {
) l0 [) V2 w" Z5 e$ ?0 D! \print("$user users online\n");
g. U% u4 V" x% A! R( I}
: H; ^. P, ^) c( X# E, U?>/ i6 F1 R. S% q& U& \

2 o- d" m5 ~" ^5 B& p2 z0 w以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。5 ^1 B4 Q* V+ A9 ]8 |
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
4 P2 n' b7 L. j2 N# F5 p我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
& B1 A1 l) j$ T( f- Y) {5 _当然啦,这两款主机也是相当不错的。
; h2 G4 D/ [2 Z" p0 W. r6 C8 }# ~智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年! _2 @9 h( y$ i# w. {7 S, B
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年4 m, g! B- z5 Y0 p" j3 @
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ + w7 m4 P( }" ]: ^
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
5 H" E3 [* g: y+ S' ]' e0 W自己加QQ去问吧。 |
|