|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
6 I" m/ q( B* c3 ]我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。' y- f* r# [: _- Y7 }$ r. W
首先我创建MYSQL数据库表。) M# r" y3 }. i! B. x, W
CREATE TABLE tablename (
& i( P, @" a! p0 E6 i. J2 Kfield type(max_length) DEFAULT 'default_value' (NOT) NULL6 g' @/ q4 g+ }) _! Y3 l2 `" T
}可以使用的SQL语句。. d( L T% [; \" v% p
CREATE TABLE useronline (
% C6 u- o. Y- @6 _0 Z p" ztimestamp int(15) DEFAULT '0' NOT NULL,
$ _- {# Y1 A" c/ A8 I! T& w# oip varchar(40) NOT NULL,
) w, l( x+ Y8 X- H$ zfile varchar(100) NOT NULL,
f- I# P& ~( r: H$ _. i; pPRIMARY KEY (timestamp),
' V5 t# w5 V8 l" B, G) p8 uKEY ip (ip),5 C- y' v$ }: k
KEY file (file)" y N( J5 t( |5 P
);下面我们是PHP脚本,首先我定义MYSQL的信息。4 ?+ B$ c& s( z! Q2 i
$server = "localhost"; //你的服务器$ k! K! g' }& M0 u9 Z5 J
$db_user = "root"; //你的mysql的用户名. t( _$ B) a1 s' b) d
$db_pass = "password"; //你的mysql的密码
9 d, l. w* u2 ^$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
; G1 ]+ K" i; C1 |$timeoutseconds = 300;取当前时间。6 j j0 F- Y9 n- ~& [0 V
$timestamp = time();上面的完整代码:
2 ^" V, J* g i( o- U" o, P<?php! i1 I/ d/ z! ~1 a6 L
$server = "localhost"; //your server+ J* p3 \4 I2 E! ~* ` |" Z
$db_user = "root"; //your mysql database username9 R: i8 L( R8 X8 c& ~
$db_pass = "password"; //your mysql database password if any. A# n1 Z' X* [+ \! e/ K
$database = "users"; //the db name& U: q( G2 E0 s! @5 b; E$ _
$timeoutseconds = 300;//timeoutseconds limit
/ c6 v) X$ e$ w9 L+ ^//get the current time: ~3 f. y8 M( g5 I, N! O
$timestamp = time();
( W) M U% [, Z+ T8 n//calculate the lowest timestamp allowed2 M% u" w9 F+ a2 G
$timeout = $timestamp-$timeoutseconds;+ @8 c0 q: l, p" J; r6 X9 ~& o
?>连接mysql1 C7 e: ^' |: }* q( z3 [
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。& }; m1 X4 ?9 o0 f
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
) W! R7 m& p) w. }# \mysql_connect($server, $db_user);查询数据库的代码:( {6 W. _% E: `0 D( G* U& s/ j: X' j
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
- P6 U4 s* `$ ~2 O9 e$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
6 F9 n3 G7 v0 j E" Y. Y1 t+ O; K('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
* c2 M, r. x* B' @ f+ g( z如果用户用错误信息的话,这样处理。; b9 M7 w. ^3 f* u1 B
if(!($insert)) {' }8 q. D+ g" C7 W3 }/ `
print "Useronline Insert Failed > ";: |! _" ?) t' |8 R
}然后实现当超过设置的时间就删除该用户记录。
3 i3 j$ ^! b1 P2 [$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。+ t3 {& R2 m) |& E/ ^. [* A! h/ f
if(!($delete)) {" Z9 T! J2 o8 B+ ]7 s
print "Useronline Delete Failed > ";
# ]2 x* f& c( a2 f4 \4 V4 j ?}下面我们解决数据库中不同IP的问题# I2 z' k+ k* d1 b/ Y
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
' i- h( [6 e' l: vmysql_num_rows(query);来统计用户,代码如下。* u+ U- D: Z$ h" K9 J
$user = mysql_num_rows($result);最后关闭数据库。# K7 R* l$ R7 W' ?+ G! \& D
mysql_close();显示在线的人数。$ K$ z# E4 W) H) ~# h
if($user == 1) {# a. N% `6 O8 a
print("1 user online\n");
0 N! F& l( y6 p- Z, J& b4 g} else {5 W/ u4 L" B, @) [6 |
print("$user users online\n");
, Y( L9 n/ w6 x$ W; v( l5 N3 Q }}最终把上面代码写成一个PHP文件如下。" R6 d7 p2 C" w; J- W( i
<?php
7 z+ K/ v: @4 R4 a g+ E//Put your basic server info here
8 A5 @2 }) N* O% C' T$server = "localhost"; //normally localhost2 Z& {% n* e( ~% Z, f, x
$db_user = "root"; //your MySQL database username
4 P# k3 v% L. I; m8 B0 P( u5 Q$db_pass = "password"; //your MySQL database password, z3 t9 } l% V( q
$database = "users";
- Z0 ~ {9 i$ U' g+ Y% S8 O7 p$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
4 [- F4 j4 I4 u7 a& G9 m: K& [$ s// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last8 u( j& `8 e7 {* a5 I( a) Z
// $timeoutseconds seconds)
1 P% e3 U' f; s2 G, ]//this is where PHP gets the time
" m7 e- l( Q/ k: k/ \$timestamp = time();$ g8 l! j) `0 j2 @" [% a
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed/ r/ G* {* o: s
$timeout = $timestamp-$timeoutseconds;
5 `) o) {( t5 y$ P//connect to database+ @3 }6 E* P* G& `; \2 r$ \. L7 m( Z& z
mysql_connect($server, $db_user);
9 C9 H, A* p( o$ z8 Y! H6 i6 J- K//add the timestamp from the user to the online list7 I. c& n2 n) F/ b
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
+ r) K4 r- {3 Z6 ?! W('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");& h/ `5 h% Q. [0 T
if(!($insert)) {2 U/ t l) K$ |* H, v0 ^1 L5 M
print "Useronline Insert Failed > ";: O8 ?, O1 n$ b! J1 I0 o& g
}
0 F; v. W2 y7 T \( J2 ?' l//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.3 a+ ~0 y) [7 P
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");$ p9 e2 c% O1 V9 b; v5 w; e
if(!($delete)) {7 ?- `' C: w# h4 O6 i7 `7 {
print "Useronline Delete Failed > ";
! ^7 ]0 B3 @+ q- |" N, \: K}$ ], @2 J; b# K7 w
//select the amount of people online, all uniques, which are online on THIS page. _: | w) X- G& b# t
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");: |" M, y3 { k6 N
if(!($result)) {
9 x: h$ N' d3 {7 z. O0 W/ ]$ {print "Useronline Select Error > ";9 z, G- p3 J9 C' ]7 \) X6 D* i
}
# ?8 i5 r# H& J6 Y# ~' ~2 s//Count the number of rows = the number of people online( ^9 T& X- }6 x( c: w& t& X3 M8 R
$user = mysql_num_rows($result);
8 H9 o F# ?( d% Z( \3 N; G1 C//spit out the results1 ?2 @3 n7 q7 F0 s, L- z
mysql_close();# ^; n+ O8 x: x) B# b
if($user == 1) {2 E$ m* g* e- ] V- r! ^/ i! Q: ]
print("1 user online\n");) B( C) g, I; l& v) }
} else {. l. X; z9 J7 P) v
print("$user users online\n");/ G8 g0 }, L5 @$ i1 x" v
}9 L7 q7 T3 E, |* T. R' g% [
?>, p0 v# ]$ D: @. i9 N, Z% V4 |

& W) x( |; m0 K0 v# J* g以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。' r0 M! i; }( V) j9 E5 N% ~3 |/ B7 m3 \
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。# z4 \+ w% c6 C, l3 ] k7 }
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。& O+ x6 V* G& D! ]2 g7 T+ z
当然啦,这两款主机也是相当不错的。- n/ d: ^4 G5 `
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
) z3 F" }3 h) h1 b5 F0 `标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年' O3 `8 G5 u: W8 B( b- N
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ ; W/ i* t6 t0 Y1 S/ Q7 M
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55( e8 B. V3 r) ~0 r: R
自己加QQ去问吧。 |
|