
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
2 \$ j, D- e, [" [我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。+ W# ]/ z( D, B. T1 j
首先我创建MYSQL数据库表。
7 n, W4 ]( k& ~5 ^( VCREATE TABLE tablename (
0 t" O/ y# B1 Z, A5 q9 K" Q$ r3 Sfield type(max_length) DEFAULT 'default_value' (NOT) NULL+ j7 k- h, M! R0 R5 }! {' @
}可以使用的SQL语句。$ E+ c: z* C+ }/ g
CREATE TABLE useronline (& G5 h, z, z( y) i! r- u9 k
timestamp int(15) DEFAULT '0' NOT NULL,
6 y# D2 ~9 _7 L% `ip varchar(40) NOT NULL,. e* ~3 u$ `% g! u) H. t( Z" i; \
file varchar(100) NOT NULL,
% D/ F& [) U3 W1 G! F. y; QPRIMARY KEY (timestamp),1 b6 s' O9 @ Z! }8 B1 G8 Z( i
KEY ip (ip),6 {, v( S! E2 q- V$ U& ]
KEY file (file)
9 n2 i0 a! ?1 g2 X0 B);下面我们是PHP脚本,首先我定义MYSQL的信息。, J: {+ {: M Z+ |7 c
$server = "localhost"; //你的服务器
# t" u4 [' c7 H+ g, d. b$db_user = "root"; //你的mysql的用户名
0 [6 E! R _. ~3 W1 O- U' N$db_pass = "password"; //你的mysql的密码
3 C3 L% U$ Y: m, }$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)( w* r/ Z/ P( _1 l
$timeoutseconds = 300;取当前时间。1 L- D! p) G4 x9 y* m
$timestamp = time();上面的完整代码:
2 ~8 Q" R v& \7 y<?php
* C: H( e, |7 b" y# g$server = "localhost"; //your server1 {0 W7 S0 l: B( e9 E" H
$db_user = "root"; //your mysql database username0 Q* g7 x) x* L+ v/ v' u; L, r
$db_pass = "password"; //your mysql database password if any. [6 j/ k2 K0 Y. W/ L. V' M
$database = "users"; //the db name
' i6 l% u S0 o0 E' ]$timeoutseconds = 300;//timeoutseconds limit1 E- F# Y3 c, W, Q/ x& G
//get the current time
& s$ J$ e5 E6 u5 o! t) N$timestamp = time();
D6 _9 |' x( g5 D& @//calculate the lowest timestamp allowed
8 K! L& v6 f$ l. Q& q( v8 d$timeout = $timestamp-$timeoutseconds;8 `( U$ B6 Y# J2 I6 a9 X. B: ~
?>连接mysql
9 ~: U5 T- c% |/ {; M! Y, Wmysql_connect('localhost', 'username', 'password');也允许使用变量形式。* R& S: F$ N1 e9 Q4 v$ p
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接/ e: @" b! b6 L7 j/ f( a7 R
mysql_connect($server, $db_user);查询数据库的代码:! ?& l/ t7 }/ g5 A) C3 A3 _
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。# I z6 f, l/ V' f- m4 y
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES* A* v8 f! H8 G- R. M% K; Q' u) ?
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
- t( M: a% \& A/ \ L如果用户用错误信息的话,这样处理。
6 Q8 m4 p. Q- w6 o; D/ Zif(!($insert)) {
' `. @" E; n: i& h$ ~" y. |8 ?print "Useronline Insert Failed > ";
) A, P% C# O# C1 l' Z" p1 U}然后实现当超过设置的时间就删除该用户记录。
; e3 L" s8 z$ f0 U( O0 F2 l4 l$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
! X2 Z# F; l& q9 [if(!($delete)) {
% E% o8 k1 n0 Xprint "Useronline Delete Failed > ";
# |( d8 E+ j6 Z3 n- T}下面我们解决数据库中不同IP的问题
# j9 k# _1 @: }9 Z5 L/ T$ k$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用( c( j+ v" E1 z. X
mysql_num_rows(query);来统计用户,代码如下。
1 d9 ` G! p: e6 h6 L6 r6 G3 R, W$user = mysql_num_rows($result);最后关闭数据库。* X$ B* }: p1 m2 \* M8 s! y
mysql_close();显示在线的人数。' x; i& [2 h z/ v3 w( B
if($user == 1) {
% @8 n6 N3 U3 \& i" M8 Q# kprint("1 user online\n"); R2 `. H7 r8 `) R: f8 O j
} else {7 h! S4 ~$ m n5 v% F; w
print("$user users online\n");
% \& \. j) B) q6 z! q c}最终把上面代码写成一个PHP文件如下。7 i6 u* V: S5 c) |
<?php
3 z3 P& C3 F- y& T//Put your basic server info here. @( A# |8 ~- |7 @
$server = "localhost"; //normally localhost6 [! J/ z9 e8 @8 L" y
$db_user = "root"; //your MySQL database username1 Y; \! C8 z* e4 ^1 |
$db_pass = "password"; //your MySQL database password' K" A- s2 O+ D6 t
$database = "users";) @' W9 N. @% w' t
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
( q) }2 q$ c' Q5 E+ M+ O// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
/ |- Q* Z# v) L) Y5 ~// $timeoutseconds seconds)
! G4 q% F: d* M0 X+ x6 z& I2 C" Z6 T//this is where PHP gets the time o9 J' l( L# O
$timestamp = time();- F/ U Y5 H' i4 A, h
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
5 ~* d5 S# k0 n! G# w2 S$ f6 I4 l1 S$timeout = $timestamp-$timeoutseconds;
& h& e% ~' m0 D2 A4 Q2 r//connect to database, L, I3 Q8 Y. k4 {5 H6 ^7 ?
mysql_connect($server, $db_user);
) z$ U/ C8 m f" |# `//add the timestamp from the user to the online list) c9 v# }7 |) \. u3 i& Y
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
& ^8 Y6 F! W/ M- a2 z+ a('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
: c8 l# K+ N7 r1 `) c; mif(!($insert)) {4 k+ w4 Z6 q7 I* W
print "Useronline Insert Failed > ";. t3 l+ V2 R' W, @/ f
}
0 p) D9 k" Q' L; U& ?7 W6 S) A//delete the peoples which haven't been online/active in the last $timeoutseconds seconds." A3 g1 [* A( u
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
$ }. L1 S+ O9 p& z1 \1 _& Iif(!($delete)) {
/ [# J$ A W9 xprint "Useronline Delete Failed > ";2 w( m- X4 B" z/ g! y# n% E
}3 u" Z4 R6 L( ~4 ?4 p( i
//select the amount of people online, all uniques, which are online on THIS page i, a, O z* M0 A B
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
7 t: F# ^) T8 Cif(!($result)) {7 R" t2 ~/ A$ |. Q3 x. x$ @' V
print "Useronline Select Error > ";
! |; m9 ]9 m5 z4 _5 K/ ~}7 V. E" C% Q+ z o( Q5 P9 y
//Count the number of rows = the number of people online
+ A# C2 i3 W; L& v, S' g$user = mysql_num_rows($result);) I* P3 h+ n! e3 i& z5 I
//spit out the results
& s/ s' v0 m- j/ A/ o& C, Wmysql_close();9 _( j6 c; K2 a/ r, ^
if($user == 1) {
! B6 x+ Z2 @( B( oprint("1 user online\n");
( f7 z/ s4 X, G4 D} else {) {; T/ ]+ H# t' _: Z
print("$user users online\n");
- j# Z$ q# U5 v' S) \}
, [5 X2 @/ g, ~( P; s3 N?>
' j8 Y- N& d- i l/ B 3 v! N) d$ h1 J; s' `6 M
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。0 y3 F. B0 V$ M; x4 l% b; y. G
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
6 H- q* W* A" A4 n& r; k我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
* E) p: k# L" z* U当然啦,这两款主机也是相当不错的。
J& `4 D( h( I4 Y智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年7 j/ W# F! b- f* |7 d: h/ h b
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
# \4 l' n6 `: {. m, a' E+ q提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ & J9 y1 o2 U. v5 p
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55 f/ R4 o5 W# U! R1 a5 N
自己加QQ去问吧。 |
|