
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!- b; m/ B1 Y, \- L, n
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。8 e; c7 _3 `6 p# l* [
首先我创建MYSQL数据库表。7 A, a2 X" h+ j
CREATE TABLE tablename (
5 O# h" s+ F; f/ a) l* g [1 mfield type(max_length) DEFAULT 'default_value' (NOT) NULL
) T9 Y# x, G: H, U}可以使用的SQL语句。6 R6 i( h) f/ |9 K6 e, ^1 w- E
CREATE TABLE useronline (
, i, |: o6 K2 A% t1 O4 Vtimestamp int(15) DEFAULT '0' NOT NULL,( N8 x5 q( @' O1 R" R- m
ip varchar(40) NOT NULL,
$ D8 `! t: c3 M7 w! }: y6 L: Kfile varchar(100) NOT NULL,
+ c% x. k9 m1 G6 B% F0 wPRIMARY KEY (timestamp), G# {2 B2 d1 f: e) m" Y
KEY ip (ip),
9 o+ D7 r0 {* {2 n$ ]/ b6 DKEY file (file)
0 [8 A9 l w l);下面我们是PHP脚本,首先我定义MYSQL的信息。
, p# `5 A6 a" @% Z0 M7 \. Z$server = "localhost"; //你的服务器# s" @" |7 L. f$ P+ Q$ q+ L& t" B
$db_user = "root"; //你的mysql的用户名
( t2 @+ N5 l! o$db_pass = "password"; //你的mysql的密码0 n" h/ m* q! K9 v( w* A" c) q* L
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)' h* u+ s; {5 y/ n" }
$timeoutseconds = 300;取当前时间。
1 C/ d5 @+ r/ [$timestamp = time();上面的完整代码:4 V8 i1 {2 a9 C
<?php4 O* i8 M5 }" T7 y: `5 [+ O
$server = "localhost"; //your server1 ~ J' G0 U3 m* f9 g
$db_user = "root"; //your mysql database username
5 R' j. \" M7 h5 k) D: T w* j8 L$db_pass = "password"; //your mysql database password if any
I$ K3 @- F2 Q3 K: `$database = "users"; //the db name
( L# J9 b( I$ _4 a$timeoutseconds = 300;//timeoutseconds limit
' U. }1 I0 c. r- t% b4 y, C& L//get the current time/ Q( `/ V) s# I. v" D
$timestamp = time();/ w' Z1 M6 v- t, b, P4 B2 U" J$ ]
//calculate the lowest timestamp allowed
( |! t5 c/ u) l. {5 b9 \8 H' f$timeout = $timestamp-$timeoutseconds;! D* y1 X2 W0 q" b& a
?>连接mysql; I5 U- f) V! {
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。% Q; H" r3 }- T
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
, e+ j) R t9 E q6 D5 p: u& emysql_connect($server, $db_user);查询数据库的代码:1 b1 F0 U+ N0 a
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。% z+ t2 s' o* W. ?' x F& y0 \1 O
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
4 r- X1 R6 x" X( I('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
6 C" R; z& u, h: x如果用户用错误信息的话,这样处理。
?; J- J# O" P7 W) B3 A1 Bif(!($insert)) {( I( I7 _( g) H. x6 b
print "Useronline Insert Failed > ";% ~$ g9 q! B$ T% {) [
}然后实现当超过设置的时间就删除该用户记录。 G8 c4 }. N6 b4 E7 u
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
/ W" H' g( M6 f& h3 n- W6 Y8 |if(!($delete)) {
) A- O# q, o1 h8 d/ {: Jprint "Useronline Delete Failed > ";
0 l0 m% a6 Q6 z3 ?% n7 B& A}下面我们解决数据库中不同IP的问题1 q8 F6 H+ Q, B3 c
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用: ]% N2 v9 C, z; |3 T( s
mysql_num_rows(query);来统计用户,代码如下。
1 x; X! n3 X- m, w$ Y$user = mysql_num_rows($result);最后关闭数据库。
: Z# D* v, J' e2 c0 `: Cmysql_close();显示在线的人数。7 v8 j% u5 L8 O5 k% T% }- Y
if($user == 1) {) E/ f4 ?0 ~7 n8 f$ F
print("1 user online\n");! @$ g% y; r$ p4 N k) Z/ A; F# `
} else {5 z$ g) s R4 X+ h3 c% P
print("$user users online\n");
0 F( x* m; V" D5 Y% P. _6 y5 ]}最终把上面代码写成一个PHP文件如下。
% V6 u7 n0 v. c) U: }) M, K<?php' V, s0 n6 F5 k1 J( M: w! p! c! `
//Put your basic server info here' q0 @) H+ {1 N( c3 d) `4 I
$server = "localhost"; //normally localhost
# K/ S0 I5 `. P0 t$db_user = "root"; //your MySQL database username% P' ^! Z& t D2 D8 }, B* X
$db_pass = "password"; //your MySQL database password" Q( w+ p U# ^
$database = "users";
! A/ @" E' r5 }+ w. @: y$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
2 R. z5 S# O+ i/ [3 i4 n1 I// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last6 v" ^/ [- T* G5 r- s7 c' s/ H1 @# V
// $timeoutseconds seconds)1 A4 ]; [4 g6 Q/ M7 k
//this is where PHP gets the time
, h2 o) m: P8 E3 C+ q" S$timestamp = time();) \% A3 s# H$ E. W2 |+ E/ k' Z$ r
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
) [6 r2 q+ O, u' H1 L4 P9 g- `# T$timeout = $timestamp-$timeoutseconds;
4 m; q/ a( p0 z5 L+ |4 r6 I//connect to database
0 l. Y" I' ~/ tmysql_connect($server, $db_user);
: w% R/ E* S0 e% S! h# X, h; U//add the timestamp from the user to the online list$ y7 X( V* y$ Z( V: Q0 w9 v
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
7 N+ i$ X5 V5 G8 ?1 I('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");/ ^% [4 z2 P( T# ?9 }0 F
if(!($insert)) {# w, H! W O8 n! |1 }- F/ U5 h0 V
print "Useronline Insert Failed > ";
- ^# W: B. U- v, T}
& `2 u% U6 O! a! A8 ~8 a0 R4 v7 P//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
1 Q* B1 L2 Q. _! V( f2 A% P$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
" X4 n3 M% L$ F8 Gif(!($delete)) {4 f8 L, C# ?+ Z' _" ?: s
print "Useronline Delete Failed > ";& u" w" \: t! c9 X
}* Y2 x3 F ]" G0 R) A6 j/ v! b0 `
//select the amount of people online, all uniques, which are online on THIS page& J. j: Z% u2 [8 e* F& F2 }
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
6 h6 K2 i3 U0 X6 ~6 _1 g/ L9 wif(!($result)) {
9 |' e R! C4 o% ^) `0 Qprint "Useronline Select Error > ";
$ U; z% }% u4 q}+ S- t- u; e4 R
//Count the number of rows = the number of people online
8 @7 e1 r' y9 E3 A- S$user = mysql_num_rows($result);
, L6 R6 u! q# n' H$ m3 k//spit out the results
8 E) f$ m4 I2 j; g( ?; ^mysql_close();
0 E# f* z4 e, v$ q, j5 P6 [if($user == 1) {
0 ]2 Q2 r3 k+ ~& N8 ~print("1 user online\n");$ c9 U# M8 P1 h/ h4 o e
} else {
" ?! I2 s1 J6 E% r, E- y! u% L/ E7 fprint("$user users online\n");
+ K7 e: u5 v; ]0 H5 ]1 F& e/ F}
0 U% d( A0 d" {2 R# X9 i5 R4 U7 p& X?>1 G! B0 e# z- k7 C, y

) q& F" L: L6 c/ A# z' m* z: c6 [以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
/ S! I) J& Z2 D时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
- e+ V! |, _! x我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。1 `% P" `' I% ^$ e& A
当然啦,这两款主机也是相当不错的。
, \- e2 [1 _- E/ q+ U智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
# s3 N0 ^% O5 ]- y4 O- ?! u标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年4 T( o9 U* `" ?' [
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
* |! ?* }8 J3 G空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=558 E6 @) Z$ p3 R1 x4 \
自己加QQ去问吧。 |
|