
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!. N6 G7 Z4 @$ u$ [
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
! f' H9 f2 |; z0 d- z3 t首先我创建MYSQL数据库表。
) J5 \$ ~! u' {( u9 G* b# P X0 |: ICREATE TABLE tablename (2 l% j( X6 c& ~6 T/ a! ^
field type(max_length) DEFAULT 'default_value' (NOT) NULL
" Z+ v( S' _5 j# q& H4 Q4 n' K( s}可以使用的SQL语句。
, I' |& c5 u, u0 G* M9 qCREATE TABLE useronline (
" {( G8 l8 l# X7 utimestamp int(15) DEFAULT '0' NOT NULL,
6 a3 }& M5 `/ wip varchar(40) NOT NULL,
) B$ G- N$ h E6 U+ Nfile varchar(100) NOT NULL,
: v2 B1 N. h7 `! q' }( A" KPRIMARY KEY (timestamp),8 F9 m2 E8 `% ] r; i- J
KEY ip (ip),9 [8 p$ G. c& W. L! G
KEY file (file)
( |( r P/ r- I f9 }9 X8 M" D);下面我们是PHP脚本,首先我定义MYSQL的信息。
, T* L/ d. Y$ L# h( \$server = "localhost"; //你的服务器
( E( j5 A; P" `" }$db_user = "root"; //你的mysql的用户名$ o. V/ } T3 M& R$ @
$db_pass = "password"; //你的mysql的密码
- Y& u5 i6 k9 `% A8 ~$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
8 q5 R% s$ N9 E8 V; y$ n$timeoutseconds = 300;取当前时间。6 r' g$ O7 S% y' G% H! U
$timestamp = time();上面的完整代码:
( N( m% m# c& n' u u; R% P0 |<?php2 I$ q9 `4 l/ _! X
$server = "localhost"; //your server: p4 Z; {6 t0 E+ c3 j9 P
$db_user = "root"; //your mysql database username
" r: |2 h" I- Q! f; X. J4 W$db_pass = "password"; //your mysql database password if any! s L' i* z9 }0 T
$database = "users"; //the db name( Z, `3 i1 w: x* Z. Q7 q n+ L1 V- k
$timeoutseconds = 300;//timeoutseconds limit
- H1 } q" H) I0 ~6 t+ ^5 J) f" h/ \//get the current time
- _2 f& l! y* i4 C$timestamp = time();; f# [ y6 S5 z: X( U! \
//calculate the lowest timestamp allowed3 }* }1 k0 d. F* P" H5 I$ W
$timeout = $timestamp-$timeoutseconds;
- w5 X# o8 q+ E9 f?>连接mysql
- \* u* n' S5 }0 s/ B2 ^- k0 Bmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
0 g M7 ~5 z& e' |' Gmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
% M1 s# N# Q9 Y& [" Mmysql_connect($server, $db_user);查询数据库的代码:
( a. }8 R- v9 t1 ]* ]* I; ymysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
% X- s& ~1 E+ U5 L$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
, n$ Z- c4 M1 h: a9 Q9 T% u- h('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");3 o8 z' E1 u4 }7 z c! q
如果用户用错误信息的话,这样处理。4 f8 m% Z, Z; Y
if(!($insert)) {
. f3 K; J( \7 m) oprint "Useronline Insert Failed > ";" \. ~ n3 K9 K! {+ c" T
}然后实现当超过设置的时间就删除该用户记录。+ k0 ]5 F8 k- Y) X) S1 O% }6 E
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。7 Y$ }; T5 L B4 s) \# ^% d
if(!($delete)) {& q8 p! K% R- k- L
print "Useronline Delete Failed > ";5 ~1 o3 D6 f: H6 P! q7 u
}下面我们解决数据库中不同IP的问题
' @0 _ p6 |' h$ [' U2 ]2 i$ K* Y$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用: N H2 Q: N& {4 B; y( O* C
mysql_num_rows(query);来统计用户,代码如下。
8 K6 U& A4 h4 i% E L0 ? _$user = mysql_num_rows($result);最后关闭数据库。
; @: w" Z6 ]/ J. f( B& mmysql_close();显示在线的人数。4 c6 Y- H4 o+ P6 T: v Q
if($user == 1) {. m% j/ a- t. { K" r
print("1 user online\n");
& F" ?0 b6 D$ t; z6 S} else {
. C& F4 ^( ]3 A* ~1 \$ wprint("$user users online\n");
; Q2 Z& _/ ^6 L5 \}最终把上面代码写成一个PHP文件如下。
6 G) V$ P" A: ]% d `2 |& O% v<?php; g, T- o* x3 n% q6 R
//Put your basic server info here
( w. Y+ z6 ^& B) T$server = "localhost"; //normally localhost" D# Y p* x8 b) E X! s2 G% C! ^
$db_user = "root"; //your MySQL database username
% F6 Q9 q, c l) q h6 n4 W4 ?' D$db_pass = "password"; //your MySQL database password6 S7 \/ R9 L9 g8 ~
$database = "users";* i' Y/ s1 E7 p. M; P7 m0 K4 F
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
% x. f3 L# G% x* S1 H4 n8 e' L" A// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
p+ z. u( L( Y8 D& }9 \// $timeoutseconds seconds)0 O) |9 b# ~: a. l4 z4 t
//this is where PHP gets the time) x1 t: x4 q; V' e
$timestamp = time();/ x! z) P0 I4 T+ e8 L% I
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
# r3 y7 U# h+ }8 Y8 i$timeout = $timestamp-$timeoutseconds;
4 M$ D2 @' f Q1 h# T% e//connect to database
, Q/ h8 M+ H+ z4 n& |8 f( Imysql_connect($server, $db_user);9 n- g x. x2 z) T3 x: P
//add the timestamp from the user to the online list7 G7 ? M& I9 ?3 K0 |; @3 w
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
7 I4 |* {) \+ ]% _+ t('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')"); h7 N0 F! q# s+ l0 W
if(!($insert)) {
$ w" ]8 Y4 U h0 ^7 ]& \3 f1 p, nprint "Useronline Insert Failed > ";
* F+ G% Y* {0 t$ j% T}
, ]+ o4 c- C+ _//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
# B4 B) L1 i9 U3 F- V E- W' ~2 J$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");4 w/ m* D# W% g, _' q) \8 n
if(!($delete)) {# A7 ]* h, v9 m8 E4 g
print "Useronline Delete Failed > ";% n4 Q. c; }' U5 P' |' Z
}3 J% a k9 ^% o) e
//select the amount of people online, all uniques, which are online on THIS page
) o, r( S; {& K8 J6 y0 q% S$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");# t7 y& F; ^' t& ^: V
if(!($result)) {
) e1 g) B/ z& `5 \ D9 I- f' G1 Q9 B! Iprint "Useronline Select Error > ";
& L4 [0 D* l8 z' T8 d4 D}
& ]9 o3 [0 S, P% q//Count the number of rows = the number of people online7 r; I ^* D5 [+ N4 ?+ y; [8 ]5 z3 i
$user = mysql_num_rows($result);
' }0 W, _" @, o! g0 x) l//spit out the results
1 N3 g! @1 K/ v& Smysql_close();: v% j3 h+ F- {% z) n; [4 t4 n
if($user == 1) {" U+ U2 q: c; m c' R2 f
print("1 user online\n");8 j0 ^% W) O' V& i( [& t
} else {
; m2 |$ J. K7 ]5 ?print("$user users online\n");
! g) B! N* t( N# b2 ~, U}. t! q7 W6 ^! {. L2 _& d
?>/ m& E0 a5 K% ?5 k- P9 ?- A: L" }

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