|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
f ~1 L) a( f @我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
4 \, C! E' P" g2 m2 R) |首先我创建MYSQL数据库表。& \+ I8 @; v& q) e& |
CREATE TABLE tablename (
- f1 j. k# O+ \" l& E9 U9 P: kfield type(max_length) DEFAULT 'default_value' (NOT) NULL
# H* D2 g1 w: `( r9 G}可以使用的SQL语句。
& D5 e+ H9 p, W0 ]( Z* h9 vCREATE TABLE useronline (
9 {" }) [4 D3 r$ n* A9 i9 h$ n2 ~/ Etimestamp int(15) DEFAULT '0' NOT NULL,
3 E1 Z3 U* |. m. T4 ^ip varchar(40) NOT NULL,* g' ~, S6 K0 l& X8 C+ }
file varchar(100) NOT NULL,
' }8 ^, m2 K" R: cPRIMARY KEY (timestamp),+ l* M0 z& e% D: d5 E r
KEY ip (ip),5 E8 J n: T) }, I& h3 A
KEY file (file) j: F( `# G* w X: [: W) }1 Y. L
);下面我们是PHP脚本,首先我定义MYSQL的信息。
! Y ]7 o D! s! L' e$server = "localhost"; //你的服务器2 J H8 a' q! S$ s5 Z' Q/ Q/ F
$db_user = "root"; //你的mysql的用户名8 M+ u) T6 W n% _/ J
$db_pass = "password"; //你的mysql的密码
! d$ a0 E* k# J( r- s4 C% n8 g$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)' g4 h% `. F2 B3 D# W* V
$timeoutseconds = 300;取当前时间。
% Y6 u! s- c$ G* d/ h" z$timestamp = time();上面的完整代码:' K3 n) Y8 g( A6 a! J$ V9 S
<?php* i8 R* c) a( b& N! p! U) i
$server = "localhost"; //your server; T" O0 @2 ~' S X/ T) [
$db_user = "root"; //your mysql database username
) q; G8 U/ k. V7 [( i9 D/ `; W$db_pass = "password"; //your mysql database password if any& C7 L5 ^: _ {6 }
$database = "users"; //the db name
0 n6 M& a3 N+ V( ]6 ?$timeoutseconds = 300;//timeoutseconds limit0 z9 X3 ^: T- i4 A6 w5 s$ G( I
//get the current time
6 N/ N* Z+ Q1 i$ o- j; Z$timestamp = time();
* ^9 n, ?" K* N$ K; j# V: d" U//calculate the lowest timestamp allowed
- {! H7 L: d% i. l- u1 {$timeout = $timestamp-$timeoutseconds;4 o# \4 p, p& k5 q3 L
?>连接mysql6 \1 g4 {* ]$ l1 t( `! n; @
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。2 d& P2 d u: ]4 m
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接% l1 M. k4 q/ f5 C1 k7 S3 o
mysql_connect($server, $db_user);查询数据库的代码:- ^. E1 q- `0 s! E1 R( u: q
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
1 @3 H/ u, R6 }4 g) x$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
5 B1 s# L1 w8 F* N1 z2 r('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");3 N8 L& k. N' n& Y% g$ m: I
如果用户用错误信息的话,这样处理。+ B3 V/ e4 I, U
if(!($insert)) {
, {* U ?- K2 }/ lprint "Useronline Insert Failed > ";
4 t8 R2 _7 k1 {1 J U9 P}然后实现当超过设置的时间就删除该用户记录。
# w0 H L8 U8 O- v$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。+ Q, ~" t7 b9 o& A% y
if(!($delete)) {* D2 m2 N! X' A( i' T8 G, x( Z' L
print "Useronline Delete Failed > ";7 b, e( Y+ \9 U" J" ?9 B
}下面我们解决数据库中不同IP的问题
% p; d7 \+ D' |4 D5 [$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用" S# d3 ~! F* E( ` ]7 P+ p
mysql_num_rows(query);来统计用户,代码如下。
' s4 M* w6 ?, L9 u$user = mysql_num_rows($result);最后关闭数据库。
% X8 n7 c' g1 z, g6 t. I$ Pmysql_close();显示在线的人数。 D$ z6 D: K5 `0 X% d+ u
if($user == 1) {: J& l/ A$ F, d6 q& R
print("1 user online\n");
* p; O7 \5 l3 K- Q6 u! {* M( V/ d8 |' Z} else {. T! @9 _+ s1 t' O) g* Y
print("$user users online\n");% ?1 B8 g( _: Z% ~- q' ~2 M- {! n
}最终把上面代码写成一个PHP文件如下。9 N6 t! F$ ~$ }5 o0 a, N
<?php- |6 p& c* S9 _! |
//Put your basic server info here& y9 U2 c. p( @: `
$server = "localhost"; //normally localhost8 R7 U+ }* w. G8 o
$db_user = "root"; //your MySQL database username
- a. ~" n; ^3 M: Q$db_pass = "password"; //your MySQL database password1 V+ c6 f( W+ w7 ^( s, [; j* U
$database = "users";( `7 h; ~7 L: H5 O8 d; [. B0 Y
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are5 z* S7 L) ^- w. U9 U& n3 ~( C4 Y
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last( P, v# \' r- D" \! D0 {" `
// $timeoutseconds seconds). S" b' E9 \, u! r0 S& Z1 v% k. \
//this is where PHP gets the time8 }- O! d y2 ~7 r; W
$timestamp = time();& i2 s* ] M' E
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
+ y+ g5 {0 R6 B8 v$ k4 x$timeout = $timestamp-$timeoutseconds;
# m; o G8 ~( w: i! R0 T//connect to database4 N& M. G! ]- T4 Y; X
mysql_connect($server, $db_user);
v: I& t4 O5 ^! j5 ~+ y. S: [//add the timestamp from the user to the online list
- ]* e, p1 n# H; A$insert = mysql_db_query($database, "INSERT INTO useronline VALUES- x! w Q: o! s
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
* |% m7 }2 M2 u9 P/ q3 o; C9 O5 Iif(!($insert)) {$ _% V2 |5 t( w$ r! P
print "Useronline Insert Failed > ";( Q! o9 @3 b7 [
}
% ]# M/ U4 D/ L. B//delete the peoples which haven't been online/active in the last $timeoutseconds seconds." L$ M) b5 G3 [- h' Z- ~ M A
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
3 i+ |7 q Q: ^' ~if(!($delete)) {* U' ` r& |* y3 L. T1 K
print "Useronline Delete Failed > ";. }# K! z; _: t/ c0 ]
}
9 K( z& D8 T0 s* o) n' y2 E//select the amount of people online, all uniques, which are online on THIS page
: H# m9 k' ]8 e% ~8 K, t' U$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");: H: v: ^. I' k; J+ u
if(!($result)) {
" R8 T1 r- E/ vprint "Useronline Select Error > ";$ _4 ~1 s1 [ ~& F5 F
}
$ V$ m* a: Q, K0 d0 L! k5 E//Count the number of rows = the number of people online
u& l @& l- V; d' D' t4 Z0 @% X$user = mysql_num_rows($result);
. M9 W" X* H1 ]6 v//spit out the results
& C4 k+ a; A5 Z4 V5 D: b1 kmysql_close();, x7 q( P8 t1 S
if($user == 1) { I* q' u/ V/ ~9 M5 G
print("1 user online\n");- ` e; }! E+ K# [- k
} else {
5 D2 ?, q5 ~' D% ^, b2 Y7 d* `; Lprint("$user users online\n");
) a* Z" K" _% a# W x} X" a2 d: I* y6 d
?>
1 B' \+ n* J. L+ T# U + B* Z2 b7 w& b8 w# C, O
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。8 n1 w4 x# E( p" d( }
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
9 D% M/ o1 q! h# |/ K我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。/ o' E+ q4 } B- q" Z! j
当然啦,这两款主机也是相当不错的。
9 X+ j! o% }! A2 G5 G. h7 T智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年' {" g& [! |8 J
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年/ P" b! ^/ W( Y# l& w: r
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
" D/ F" X0 W; O: ?! M3 Q5 K空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
K* E1 ~: d" B! e% e: `2 t5 A4 @自己加QQ去问吧。 |
|