获得本站免费赞助空间请点这里
返回列表 发帖

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
; s) X% z( E, X& u5 x$ `' l- g我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
9 t2 \$ Z, Z! D/ U' s' N  r首先我创建MYSQL数据库表。
2 H3 v. R3 N8 u8 X; |& u: N0 eCREATE TABLE tablename (6 I' @' d0 E% e
field type(max_length) DEFAULT 'default_value' (NOT) NULL% |4 G$ \) f  \
}可以使用的SQL语句。* w! @# E7 C$ S; F8 u
CREATE TABLE useronline (8 o8 o& Y7 u* ]& Z; Z$ {1 f; _& |& ?
timestamp int(15) DEFAULT '0' NOT NULL,0 H& W3 m+ A7 j( E9 @. q
ip varchar(40) NOT NULL,
; X8 p$ V9 w" Y: q5 hfile varchar(100) NOT NULL,  ?5 f( i+ g4 [0 |& }
PRIMARY KEY (timestamp),8 o& ~: b& }; Y# r2 R2 \3 Z, d& ]( M
KEY ip (ip),1 I8 F8 n) D4 V% e$ K, z6 C  i* H9 W0 r. y
KEY file (file)
9 R$ ^2 g6 E/ e1 ^$ G8 a' b);下面我们是PHP脚本,首先我定义MYSQL的信息。
/ ~7 U1 O; l+ ?0 ^$server = "localhost"; //你的服务器
( ~8 p# V2 R9 J; `& B4 b9 T$db_user = "root"; //你的mysql的用户名
- y2 ]4 T, L  K; C# j3 L  z$db_pass = "password"; //你的mysql的密码
$ S9 S( R* ^' _& |$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)0 e0 l6 g- g: J! \% X
$timeoutseconds = 300;取当前时间。
6 A  J5 z7 r! h: f3 p0 P8 \1 D$timestamp = time();上面的完整代码:+ J" B% {# [: ~) [6 f1 j. `: l( J0 _
<?php" ?. a# `  @7 ~4 s) S, {" [
$server = "localhost"; //your server
, E4 [/ @& D* y" S. O$db_user = "root"; //your mysql database username3 K. [4 e1 M: {( s5 h3 B: w
$db_pass = "password"; //your mysql database password if any$ U; s0 [! S+ R3 s* Q
$database = "users"; //the db name
/ \, a5 H% ~1 M$timeoutseconds = 300;//timeoutseconds limit2 Z8 @1 u! ]4 C) y4 v% W
//get the current time
" N9 n1 E8 [+ E6 g. R$timestamp = time();5 ]/ ^( k/ @8 G3 t
//calculate the lowest timestamp allowed
( ?% |/ Q& e; Z$timeout = $timestamp-$timeoutseconds;
4 P. m2 f  b8 T0 {0 W3 r% E5 R7 ~?>连接mysql
4 n9 h5 M- u. [mysql_connect('localhost', 'username', 'password');也允许使用变量形式。7 l& t" N" k6 ?+ Q: G
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接7 [; x7 ?  b' f0 D
mysql_connect($server, $db_user);查询数据库的代码:* {! A+ j6 v/ o5 }* T# B
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。/ U8 W- _. O+ g7 p& x
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES3 c* V7 |$ z3 ]" j: P; R  D- t$ o
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
- v9 H2 S7 W( b# k如果用户用错误信息的话,这样处理。& ^  J; l) x: i! a8 r, E
if(!($insert)) {( l. g: y& g  K3 b+ ]! B; H- Y
print "Useronline Insert Failed > ";
2 |8 O( N9 Q- v# c& B$ [. X}然后实现当超过设置的时间就删除该用户记录。% `4 ]7 }( O7 G9 ^0 _0 V
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。: J* B" c0 J8 y' }% F  w- v
if(!($delete)) {
' s1 Q7 `5 R  D- X; ]print "Useronline Delete Failed > ";) |( E5 |% |$ U1 W  a) K
}下面我们解决数据库中不同IP的问题: r; e; d  f$ m% V7 f: V- o. \
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
; H; ~) A" n$ p/ s3 C# g, H" dmysql_num_rows(query);来统计用户,代码如下。, T9 u& I% r* F' M8 k+ T- V
$user = mysql_num_rows($result);最后关闭数据库。6 z5 g2 s/ L4 C) f2 u, y  d7 _
mysql_close();显示在线的人数。
' j% x, I, u7 T5 K' s0 e; E+ X& Hif($user == 1) {+ S/ ^7 H8 P, M, K9 ^( A0 b9 G0 S$ ~7 Z
print("1 user online\n");* z& A* j6 c) k3 M8 P3 q
} else {
, t$ D7 h2 h6 v7 @! jprint("$user users online\n");
- L2 v  c9 L# u  [8 G  t}最终把上面代码写成一个PHP文件如下。
0 x& m$ G. Q& w<?php
8 U9 I; j2 s2 r; H3 W2 h" m//Put your basic server info here. o5 Q! |2 i- p# y
$server = "localhost"; //normally localhost
9 n# r  s* q4 b( d  |2 @$db_user = "root"; //your MySQL database username/ ^: a( r" r& _0 Q$ f& T4 f
$db_pass = "password"; //your MySQL database password* y! [  W- u2 y+ z5 u
$database = "users";. K& H* d) Q5 m0 n- e
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
2 G) o# n+ v$ C) F" w# u// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last# r* D9 [" Z# v1 l) a
// $timeoutseconds seconds)
, Y- j' }" `3 Y8 x8 {$ _. k( w& O//this is where PHP gets the time: F3 U2 C6 q( P  z
$timestamp = time();
8 @5 `) }0 L: J& p$ k( ?0 S//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed1 a4 d& P' [. O1 M! @% T
$timeout = $timestamp-$timeoutseconds;
9 j( u8 a8 ]2 D8 B4 x//connect to database
8 P" G9 @/ ?- H, |. s, B/ K: t) cmysql_connect($server, $db_user);9 g/ t3 e/ m! G7 ~( j& d0 t& n" `: f
//add the timestamp from the user to the online list
& j( j$ e2 N2 V$insert = mysql_db_query($database, "INSERT INTO useronline VALUES. I+ o( E! h; o% T& V" A9 ]
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");! q7 k) W- e2 t9 d
if(!($insert)) {
7 Q8 n% i8 f& Nprint "Useronline Insert Failed > ";# L2 f  _) O) }, k& Q- j
}
, }" c% r# T/ ?, `$ o! ?//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.! X4 D) L  g1 ~( Y# @1 d! |
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");# T- U1 ?/ T; R0 T  D
if(!($delete)) {- W% d/ p3 \- k+ e% F
print "Useronline Delete Failed > ";
3 k) J: M9 N* K" I9 l# V}
# C9 i. k: X7 {5 M! @- J: j& P//select the amount of people online, all uniques, which are online on THIS page
1 t4 F: d/ ]( A" j4 @$ }! k$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
# h% h* P& p/ w9 N. ^. `$ X7 Y! Tif(!($result)) {
7 }+ v- z3 G% i3 u2 a* yprint "Useronline Select Error > ";. m# s. H. P0 U9 y  Y* q
}
9 {( N% P! W% K' P//Count the number of rows = the number of people online
7 d1 c% b5 o' R* p$user = mysql_num_rows($result);
9 g) \1 A% x; }; C. A//spit out the results
- V: Y2 A- A! b+ z3 Umysql_close();
- b  Z! Q! \( y2 B7 c+ M  Q- kif($user == 1) {
/ C  X8 n/ x8 t' O% L" H* @print("1 user online\n");
1 [, P0 b/ A6 p: X* I. U9 [} else {2 r( M, J" A( \$ A
print("$user users online\n");7 a0 s+ l, T- K' g
}4 d0 z' J9 `- k3 j
?>
1 d) H' i1 c/ @, v6 w4 R
1 N8 A9 F8 E0 q' b2 ?+ u以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。0 S4 |9 ^$ w# M# z4 C, n
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。' W4 k, x" r% f6 M/ w) T6 U) W7 Z
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。- F- P& g# T' u# ~! m% d" ?
当然啦,这两款主机也是相当不错的。
, Y6 `5 `; l8 T" ^6 C' `智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
, c1 b: P% s$ C3 A$ m标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年) |8 o& k1 V! |
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ & B, ~# t( i3 f; g
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=553 l! t3 v9 }! ?  n! D
自己加QQ去问吧。

返回列表
【捌玖网络】已经运行: