|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
* @! K1 ~/ B( [2 ~# ?/ l我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。1 Y+ Y1 E" d: f" d5 Z+ i6 ? w
首先我创建MYSQL数据库表。
/ E: n$ | u5 ^/ U4 T( K2 k3 RCREATE TABLE tablename (
( w. C- P/ A7 S) O) |9 Kfield type(max_length) DEFAULT 'default_value' (NOT) NULL: {0 F& N/ {8 o7 T. T) f) H# y
}可以使用的SQL语句。
5 G" p( C& A& N+ qCREATE TABLE useronline (9 e" J. Q: O& l" P) y& U1 u, t
timestamp int(15) DEFAULT '0' NOT NULL,0 G; S$ B+ @: V. D# N& x. s
ip varchar(40) NOT NULL,
X* M/ V. i( ?4 [# {, f, ifile varchar(100) NOT NULL,5 i2 S( F" }! O( ?+ d5 ]
PRIMARY KEY (timestamp),$ y R+ h# E) T
KEY ip (ip),# ^ \$ ]/ R5 L9 s6 x, w* X
KEY file (file); h# P3 e R+ G6 m. |1 W8 S3 O
);下面我们是PHP脚本,首先我定义MYSQL的信息。$ l% ]" b5 ?) h8 v' l; Z' r
$server = "localhost"; //你的服务器
/ h/ X) E/ |1 r: s$db_user = "root"; //你的mysql的用户名
& n6 J6 e3 i& G3 k7 r# G5 x$db_pass = "password"; //你的mysql的密码/ x* x* l/ s& D# ~ x+ b
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
6 u+ o! {( }, N, Q' m: j4 ^$timeoutseconds = 300;取当前时间。( _ w$ U# v s2 N* |$ [) v
$timestamp = time();上面的完整代码:
/ h# y# B* i) w S# I/ z% @; p* U6 V6 w<?php
, S+ T% @; x1 y6 q; ~7 b4 L& O6 E$server = "localhost"; //your server3 T7 E4 }! m9 |+ e$ `
$db_user = "root"; //your mysql database username
; G+ } q5 V( @. t' a- z$db_pass = "password"; //your mysql database password if any( S8 \4 n0 U3 D) y) f: N; ]# n0 t
$database = "users"; //the db name2 z4 J5 R7 k- @# W9 }1 @5 x" ~: |, v
$timeoutseconds = 300;//timeoutseconds limit
8 }* M: f: c; ]7 k% J7 {3 V//get the current time
# I% k$ z- ]3 ~. u+ [$timestamp = time();( b0 B$ h( g7 [/ Z- C- u* R# w
//calculate the lowest timestamp allowed7 @- v4 V% p9 q: s
$timeout = $timestamp-$timeoutseconds;
9 C2 |. n! k# T; G5 _5 w?>连接mysql+ A7 U+ t0 z& g' o2 J. b7 }; g
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
" b$ K; J& T! A3 r3 E5 \mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接2 P5 h3 s) ] h O% l
mysql_connect($server, $db_user);查询数据库的代码:
$ I) X9 w& b6 ^& S- _mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
2 ]3 H2 Y3 s' {* @: i# h$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
3 c# H- P. `: B8 ~& Y2 ?: m('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");, G/ B- m" o A- `2 S h; c
如果用户用错误信息的话,这样处理。
$ ^" V# w. x4 H9 l9 {! L8 tif(!($insert)) {& p4 l* j- D# m$ {; W& B4 l% j
print "Useronline Insert Failed > ";, b( u: p0 d5 e2 {5 l$ g9 h7 z
}然后实现当超过设置的时间就删除该用户记录。
e0 m# U! w! P! R8 f$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
3 Z$ W. b" j( a5 u; P8 pif(!($delete)) {: O# m4 ^. ]! w5 k! g7 A6 X
print "Useronline Delete Failed > ";2 A3 Z1 U5 X0 h b8 `) ^- {
}下面我们解决数据库中不同IP的问题# M& b4 D1 V! W) a- i6 P' b( ^
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用4 {4 S6 O* u- Y+ a$ q
mysql_num_rows(query);来统计用户,代码如下。) X4 b% @% K1 [3 W6 k+ \$ q! h
$user = mysql_num_rows($result);最后关闭数据库。5 C$ e5 r2 H1 ]6 Z" T6 Q
mysql_close();显示在线的人数。
+ W6 z6 k. n8 ?3 ?5 b& sif($user == 1) {
0 N- @7 J$ d2 r) ?print("1 user online\n");
5 x9 K6 V9 ~ r3 V4 b' b; j: D, n} else {
9 y y% s7 x3 g s6 Z+ [2 dprint("$user users online\n");+ y$ G- M3 {/ b7 T$ l
}最终把上面代码写成一个PHP文件如下。& ~5 s F+ p H; ]! }8 n- z
<?php
3 `& R3 W) X6 m//Put your basic server info here
9 `0 V( r/ r w4 k* u7 m$server = "localhost"; //normally localhost
: A# L0 x3 ^& c" Z9 G8 h$db_user = "root"; //your MySQL database username
5 H5 J" r) c: a* \ `% Q0 d$db_pass = "password"; //your MySQL database password
' v: u* j) e0 X$database = "users";5 ^, g: v4 X% j6 C# x ~" R$ a
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
( o* w+ A4 \1 q3 N: o// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last# ~8 m# }7 Z0 O9 T" Q, I
// $timeoutseconds seconds)* B, ?; J3 M8 G9 D% @" F) M
//this is where PHP gets the time
, ?) V( X7 q) P% \, T2 f z, U$timestamp = time();
$ `' h& g( T9 {& {" T& F% S+ B//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
4 E# _0 {7 _7 j" b$ a/ u$timeout = $timestamp-$timeoutseconds;: r; M: R6 w j) N$ b
//connect to database
! x# n% g) n$ f/ _. nmysql_connect($server, $db_user);# G# h. L l( A" g
//add the timestamp from the user to the online list& x# f, ~+ ~# ]: [& B5 e" N: O
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES9 q5 z" y6 |8 z( B7 }7 N) F4 a
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");9 e! A9 \! U2 m3 f6 P. H3 V% h
if(!($insert)) {
$ F7 T* X* m: i3 C) m% ]print "Useronline Insert Failed > ";
. t; f# q0 w" Z}
c$ c5 A. l2 p( n! a//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.) y' B( @' z9 l- j! S# Y
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
* m% R8 U& C) V/ n7 Jif(!($delete)) {
: C: B. t; J# d' J4 j. }print "Useronline Delete Failed > ";' J. E9 l1 N$ W3 k/ ~3 f$ s
}
1 c4 P2 L- e0 C//select the amount of people online, all uniques, which are online on THIS page8 A" Y$ `0 ~) ?3 P' Y
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");, M+ }4 s6 n, V5 K2 D7 L
if(!($result)) {! A& O3 u/ w& `, T. v- }
print "Useronline Select Error > ";
( p; J$ m: N( j}7 S( N/ }( t9 \0 @+ [
//Count the number of rows = the number of people online( X' R1 [( P6 G5 ~' K. J) J. |
$user = mysql_num_rows($result);# k* t' h$ D% l& R1 o" E7 b1 p* w
//spit out the results
2 H+ `% x1 p0 W5 a" c0 ]mysql_close();
& k0 m' C9 F2 P" l& iif($user == 1) {
% H& w U2 q. k% |print("1 user online\n");
! b3 \( s! i8 ~0 x} else {
# A4 L2 A; j: M& m9 s/ G( Kprint("$user users online\n");
& y- i! b9 R! h0 `% x% `, J% Q- w( ^3 L}$ N! R. n6 d A, h$ u& A" }
?>: _; O) K/ F( `' g; w' r1 z- j
' t0 |2 f2 T S& q7 P! O
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
3 k* a- ^5 s8 D* O* ?) t时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
8 v( }' Q" G+ u7 Y: K我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。7 {. a. ?0 ?9 A2 T
当然啦,这两款主机也是相当不错的。
2 X$ @+ s2 P+ e- S0 P U智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年: z; M3 ~5 u- B6 C
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
. L8 a& M1 ]* r% P- q7 [$ n提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
8 C9 s' T2 Y+ ^7 t4 x9 M& O9 Y: [& C空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=557 ^/ I3 h0 C7 f' f9 n
自己加QQ去问吧。 |
|