|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!; n( h- R' ~8 u: r
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。: M I: ^% A% M. |4 W) ?
首先我创建MYSQL数据库表。
) c- H6 z* ]" M/ S( L; l& {9 {+ KCREATE TABLE tablename (
) f9 g" S4 ?/ `, c9 Ufield type(max_length) DEFAULT 'default_value' (NOT) NULL
% H) i! ?1 V. H0 j& G* I- ]}可以使用的SQL语句。
& l9 `: _! l% b" NCREATE TABLE useronline (
G1 h7 d5 s# I; E) Q- r: p2 X/ o9 Ltimestamp int(15) DEFAULT '0' NOT NULL,
; J( S6 e% L- K( d; F3 t# B' gip varchar(40) NOT NULL," M6 W1 v4 E' v* {* t6 Z6 e
file varchar(100) NOT NULL,
8 @( S; u. {+ i+ WPRIMARY KEY (timestamp),
; z9 }4 Y/ N4 AKEY ip (ip),3 b8 c- {4 \4 d v( b' `5 R% z, m" M1 E
KEY file (file)/ S$ E$ n6 ]9 H) \. T
);下面我们是PHP脚本,首先我定义MYSQL的信息。
8 S( w% ?, m" C1 {0 r$server = "localhost"; //你的服务器! n/ O2 P7 w3 q, ]+ r
$db_user = "root"; //你的mysql的用户名& R3 E7 d, F( u
$db_pass = "password"; //你的mysql的密码
0 }1 v) v, E! Z5 ?4 ]: j$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)( j5 ?/ `) N7 d. m; N. A
$timeoutseconds = 300;取当前时间。
, C% \* s; f) Y# c I9 y$timestamp = time();上面的完整代码:0 @- Y) @) c) R7 Y9 x8 Y3 y
<?php
) O8 a8 c! G) Z: F; v ^4 B- Y$server = "localhost"; //your server$ I; U) D, H/ K& A- y; r+ b: O
$db_user = "root"; //your mysql database username
5 T. X, m% J# C) ^& |/ H$db_pass = "password"; //your mysql database password if any
$ q2 Z" f1 y! l0 e( C* ^1 d7 ]) f$database = "users"; //the db name9 w: }: A |+ U" u
$timeoutseconds = 300;//timeoutseconds limit: }# j& |2 F& }. ^" ?
//get the current time# j0 N4 p8 l0 m: t8 B/ {% k' Y
$timestamp = time();
4 e9 Y, y8 G# Y3 R* |//calculate the lowest timestamp allowed
( V( I# T* r) O9 q$ w$timeout = $timestamp-$timeoutseconds;2 y6 U8 E. L3 d: R4 H' V% z
?>连接mysql* |1 l( Z" i+ t/ `" {9 {6 p3 f
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。5 K( P0 k# t$ D' D) n
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接; s$ h7 H$ e# t: ~! d9 X
mysql_connect($server, $db_user);查询数据库的代码:! L" |- u) m' ?6 m
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。$ v% r6 E) \! K, b# F, w
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
" ~0 @0 y5 k$ b5 z: G% c; r3 u('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')"); J0 B' X7 p% {2 v8 e5 D1 h* h7 m
如果用户用错误信息的话,这样处理。
+ I; d( |( V' E* O, fif(!($insert)) {
2 D$ }7 I1 v- g, ?print "Useronline Insert Failed > ";1 h% [8 } ~. w/ ~1 g9 j& Q/ Y* b
}然后实现当超过设置的时间就删除该用户记录。
, V- v3 i8 v1 |$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。$ L1 I7 U. ?1 u
if(!($delete)) {' R' W- M# q$ }: \/ `
print "Useronline Delete Failed > ";5 |0 D1 c2 G+ H9 v2 ~! I7 f* x2 K
}下面我们解决数据库中不同IP的问题
. r$ p% x; `3 V: |! R6 N$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用3 Y) g. o9 A5 O+ ~( i! ] s: F
mysql_num_rows(query);来统计用户,代码如下。
2 W1 ?$ W. I, c# O; ~( U2 K8 f$user = mysql_num_rows($result);最后关闭数据库。
& K' W0 c0 G! |. }" o, N0 gmysql_close();显示在线的人数。
- @) S {' b* h$ ?6 ?6 Yif($user == 1) {
. r5 A7 @( E3 J) v3 @print("1 user online\n");6 ?) H8 ]6 r- J$ G/ J0 z
} else {
& ^0 F, Y' \& h& |$ u/ \print("$user users online\n");. x1 v Z% ?% c! f' e
}最终把上面代码写成一个PHP文件如下。
4 K& y }7 y' L' w$ d! O<?php8 G0 e3 p4 p& m e
//Put your basic server info here
$ d/ O) o; G2 z- T0 H5 V4 k$server = "localhost"; //normally localhost
! B6 z6 T2 F: a$db_user = "root"; //your MySQL database username* L# T9 t" y" L& ]) s7 E& }
$db_pass = "password"; //your MySQL database password6 I6 G$ `. P% P/ a3 M, K( a. Z
$database = "users";* B8 a) a5 M4 p# Q1 u) X4 i9 _+ r
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are6 Q: ]% o" u6 O* o V- g4 f
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
3 Q8 @4 s& C6 U3 y$ }" [// $timeoutseconds seconds)' X, d0 }8 @" F2 w7 a* Y' _7 x
//this is where PHP gets the time0 m) o6 w6 I: X; a
$timestamp = time();
f6 b0 T5 Q/ B; e& }/ Z//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed9 @& J e, L# K+ d! t
$timeout = $timestamp-$timeoutseconds;
3 a4 s @; j6 z7 A0 e( l//connect to database# h2 H, z' e% y/ f1 W
mysql_connect($server, $db_user);: [9 |: v8 \; ^' k9 Y
//add the timestamp from the user to the online list
5 p" `2 c L }' o3 e+ D8 r$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
3 F' M7 Q& v7 A! _, o('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
$ h5 M5 p" T4 ~% X) k* y2 F% lif(!($insert)) {
3 j: N: I l4 n% tprint "Useronline Insert Failed > ";# D9 D7 `% ^% `7 }* [7 R# a
}
' h% n. c- G6 m; O//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.; _6 h9 O. q6 m& L
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
/ A6 ?$ g1 A% ]' j7 k7 oif(!($delete)) {) f! {# N3 l; U' t) D2 H
print "Useronline Delete Failed > ";" \) N' m; v6 b) ]* ^
}
5 e+ V L+ q( t- D//select the amount of people online, all uniques, which are online on THIS page' X, i2 m& Y5 `* H8 f- D% y
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");# M" X0 S+ D1 R
if(!($result)) {* L& q1 u9 L4 `* g
print "Useronline Select Error > ";
- T5 H+ E& X5 g7 ?" J' D1 B}3 m/ [% y- {3 I% `; x
//Count the number of rows = the number of people online
: g5 O* I3 U, v6 ]5 {$user = mysql_num_rows($result);9 u4 J/ E: Y) K$ V2 e
//spit out the results' K. y0 n8 g' ?# H6 p0 [* b; T+ R
mysql_close();3 t$ I* J2 X/ V2 |
if($user == 1) {
W3 [2 J' O3 Z2 Jprint("1 user online\n");
# F3 s- M6 O6 X/ n- U( c} else {
5 |" q7 o6 P0 S& Bprint("$user users online\n");' j8 u$ r4 L: D( N; Q4 @
}
& s/ f8 f3 p9 d+ [?>
2 K& g7 r/ d0 C6 S# C+ |: E2 h- m# i 5 S% ~5 K3 X: W& J/ f" X+ w
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
) D9 u4 @* V9 t r& q3 D时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
$ u$ c- q+ t0 x! G我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
7 F3 S7 u( N( Y, I0 ?& M1 F当然啦,这两款主机也是相当不错的。2 J. E* ^0 b0 }; M( l. L5 _' r* z
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
' R/ N B* ^; ?! c标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年) O9 j# Y# X9 x) H V+ W" M
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ : u4 g6 ?# q- V% o# Q
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55/ f0 r3 B& o6 ]$ o2 ?
自己加QQ去问吧。 |
|