|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!) k# `* a' R: h$ ~% x7 [6 ] k0 Q5 |& W
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。' j6 _* ~/ z7 ?/ Y, m& _' f' T. {4 }
首先我创建MYSQL数据库表。
2 K7 X9 }) C Z0 iCREATE TABLE tablename (0 p0 p2 X( v+ ^1 P# M4 z4 s
field type(max_length) DEFAULT 'default_value' (NOT) NULL4 w6 b; {! ` m4 i
}可以使用的SQL语句。. z$ I$ }7 ]- j! a
CREATE TABLE useronline (5 [/ ]0 [$ l0 x$ m8 Z7 Y
timestamp int(15) DEFAULT '0' NOT NULL,
, x$ f' N& p: z. E$ @) |: b, _3 `% Sip varchar(40) NOT NULL,' Z6 T5 I* J' `" p; g3 n& A6 k
file varchar(100) NOT NULL,9 ~# V( b, |" }" K
PRIMARY KEY (timestamp),
u1 X' E$ Q8 R' H" j# r- Z" IKEY ip (ip),
3 X" R' F7 ~2 o* S& SKEY file (file)$ O3 e. Z- W8 N* j- r5 T7 f, K
);下面我们是PHP脚本,首先我定义MYSQL的信息。" L" F3 D% f7 h4 Z) ]
$server = "localhost"; //你的服务器8 t* x/ R3 K! f
$db_user = "root"; //你的mysql的用户名
1 G( X0 t; ~' X" i$db_pass = "password"; //你的mysql的密码
; G* b' N& P3 r5 l$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
6 e, w0 ~3 [* T& B& U$timeoutseconds = 300;取当前时间。
6 b: Q$ n" y1 [3 P8 k$ j6 x$timestamp = time();上面的完整代码:9 \% m& Y. x, X% y+ o' B
<?php
: Y8 n( B" f. F6 @$ Y9 j! a! k$server = "localhost"; //your server
! D* I' k3 \8 m4 M$db_user = "root"; //your mysql database username
( J! f7 ]# h+ z- f! x3 D4 [$db_pass = "password"; //your mysql database password if any8 W$ D/ ]: |- V; Y4 S0 y$ u
$database = "users"; //the db name
) @: l, q- J* _8 v- q$timeoutseconds = 300;//timeoutseconds limit
3 U( w4 \3 S% A+ g8 ] L4 n3 Y//get the current time( A' y) T8 n5 e
$timestamp = time();3 F# r9 S& e; _
//calculate the lowest timestamp allowed
" L7 @, K' O* N% Z7 d$timeout = $timestamp-$timeoutseconds;) m/ @# `, k* ~4 C
?>连接mysql5 g1 _6 D K+ B5 V- D$ n$ k
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。: |% ]; E v. w2 Y1 ]2 w. ?
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
2 O! s" c" t. C4 K5 u0 ~( P2 smysql_connect($server, $db_user);查询数据库的代码:0 T; ]; h$ y. i( w" @% K- C
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
( v7 t: F, t6 b) K" s+ c7 [$ j$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
3 r9 I8 U5 x: I1 f('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");5 l5 t% J2 }& T5 D4 z* P5 q
如果用户用错误信息的话,这样处理。
0 w7 {+ s6 B8 M8 q0 z$ o' Y' l) nif(!($insert)) {
. }7 d- u% a1 E& `print "Useronline Insert Failed > ";
3 V$ C% _6 ~9 a' D: A6 {' i}然后实现当超过设置的时间就删除该用户记录。
1 `0 P& F4 Z0 r/ e6 W$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。6 J: D. j7 C6 V" W
if(!($delete)) {8 Z2 s( l- O: E* a7 L, U; r' z$ w
print "Useronline Delete Failed > ";
. A4 L! G. G4 T/ r}下面我们解决数据库中不同IP的问题- @1 f) c$ X9 M* K! I
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
# Y+ @3 }! P/ y* l0 N* @mysql_num_rows(query);来统计用户,代码如下。& O N! h; w8 e% v; H
$user = mysql_num_rows($result);最后关闭数据库。
; O5 _5 I0 V' X, e/ Wmysql_close();显示在线的人数。 L( B3 I# w2 _+ ]1 ^ P; M- E
if($user == 1) {
* K2 T6 q8 Z( I) J/ F3 {print("1 user online\n");
1 y w8 c3 T1 Q/ i0 t1 h9 c2 i5 {} else {
. h1 M& H, X% C: p" cprint("$user users online\n");8 V/ @" @) [" v! k! i
}最终把上面代码写成一个PHP文件如下。8 I( A3 k! z4 a9 b; K2 j
<?php
, d( c6 v* Z$ z) U0 T. g/ z+ x6 Z) s//Put your basic server info here
! x. c7 Q' R2 W0 Z3 _- l8 W$server = "localhost"; //normally localhost
! ?2 S5 S7 N( V/ x$ v7 ?8 b( G$db_user = "root"; //your MySQL database username5 p# {, d& s' `/ ?0 J) Y+ k3 o1 W
$db_pass = "password"; //your MySQL database password
) e! ^# ]6 t& b7 e, E$database = "users";
" N v* N# n. u! R( G9 i$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
6 G0 ]! L$ t- i9 a& q' |$ T// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
! n0 W+ O) f2 D) m* g// $timeoutseconds seconds); y$ x4 L; z, W3 v9 v& ^6 D
//this is where PHP gets the time
" |% m( e% d# `, {3 ^# E$timestamp = time();
" ~7 z, t* F$ E//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed' o" C2 I* ^ Y! ]! n4 `8 i5 ?
$timeout = $timestamp-$timeoutseconds;8 M- C: a, U: g6 J7 ]# t! W
//connect to database4 j! }3 ^! a# c# h1 d/ j- R6 v
mysql_connect($server, $db_user);
- x) r4 _8 r! n. x//add the timestamp from the user to the online list
. ~. z: v O% t$insert = mysql_db_query($database, "INSERT INTO useronline VALUES' P( a# ~5 b7 t1 h- ]9 X1 ^8 [
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");+ `; k$ E8 c9 H/ c
if(!($insert)) {* y5 ?6 R( T" k% _' P
print "Useronline Insert Failed > ";+ y7 o! I' C! z6 |
}
3 c$ D! J' i0 C# P0 t//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
2 g1 G i. } l. ]$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");0 v% z) c# K) I H Q( A" w
if(!($delete)) {
4 S p$ O: R9 B4 h" sprint "Useronline Delete Failed > ";$ G l6 G. R, ?; v2 M7 c5 r! b
}
- L5 Z1 C7 h# C; S//select the amount of people online, all uniques, which are online on THIS page
: s$ u9 r7 L( X2 k% {& L _$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
1 D7 m6 M( F' _0 h8 Z" mif(!($result)) {
) }4 x5 `5 e$ C4 |0 xprint "Useronline Select Error > ";# y$ X4 v) M3 \3 U
}# e6 L( v K, k6 v& Y$ z6 E
//Count the number of rows = the number of people online
. h% a0 F7 q( k! j* }8 b* S& {$user = mysql_num_rows($result);
* s) p1 B, h% [5 A3 k& J* S//spit out the results' F5 X' D( P$ F5 _& w
mysql_close();& {% V: l1 d: K# |1 H/ T
if($user == 1) {
! D; q. q0 Y1 |; N1 {/ m* T3 hprint("1 user online\n");
& u2 h& m2 ^& C4 e. t} else {
2 P- l3 i, J7 Q9 j* Z" _- uprint("$user users online\n");
0 H) u- h6 m. Q, k3 ]5 o}
2 x4 H5 a5 q Q+ a! b?>
3 d/ v" X3 y0 T0 @) z' ?$ T$ o & x+ g. d) f6 [) n# d) I1 `! s$ K
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。4 ^ t. j! f$ `
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。8 b3 e. O0 \, O' v
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。& Q; m. h' \1 l4 Q$ l' ]& a
当然啦,这两款主机也是相当不错的。7 t$ h8 j# x, R! e' D
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
7 x4 i+ M: Y) B; V1 E4 I标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
, O. L! {& t, ?2 a9 L提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ ; i! P1 x) N- s$ G% t
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
, A: @/ \* |; ]& K n自己加QQ去问吧。 |
|