|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下! c. T7 @/ Y" c1 e% S: i& j$ v
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
3 M7 y+ D& _) F) t首先我创建MYSQL数据库表。& U- j7 H9 q* Y" W
CREATE TABLE tablename (7 X( h4 \0 s( c. F& a4 X
field type(max_length) DEFAULT 'default_value' (NOT) NULL, i4 V/ p; ]: u3 f* L6 z9 z
}可以使用的SQL语句。
$ s- w$ P# p# x% jCREATE TABLE useronline (
' E8 e. m2 ]' U* x; ctimestamp int(15) DEFAULT '0' NOT NULL,- k7 U) S q" b/ c7 U9 r
ip varchar(40) NOT NULL,5 ?- s8 u* F0 y/ `
file varchar(100) NOT NULL,- ?6 x6 T3 K/ b- b$ D) d$ B/ ?
PRIMARY KEY (timestamp),6 r8 _1 O9 g" X& M$ T' I
KEY ip (ip),
9 |( I/ i. {: N5 [% cKEY file (file)
" b" ?9 i) Z& N);下面我们是PHP脚本,首先我定义MYSQL的信息。
+ @2 {& ?5 k' Q. K( Y0 z0 W) v y! I$server = "localhost"; //你的服务器/ s) B( \- y6 G7 U8 X* t7 }
$db_user = "root"; //你的mysql的用户名
' U$ B% b9 b4 U5 b9 g& x8 G$db_pass = "password"; //你的mysql的密码
/ w& b0 S% Z+ |: D: f# y. d: M! i$database = "users"; //表的名字设置统计的时间(多少秒内在线人数). B, s& w# ~4 U* w; I
$timeoutseconds = 300;取当前时间。% Y+ x% B8 W. O1 {# g
$timestamp = time();上面的完整代码:
! Z1 ~* R, m, T" J/ g1 [<?php
( d) S b9 S7 }. q" b8 B I$server = "localhost"; //your server
0 u7 l9 d8 F& R! I/ z7 x2 L$db_user = "root"; //your mysql database username* O: |2 c7 N5 D8 z0 z, J
$db_pass = "password"; //your mysql database password if any
% J' C8 R% C; J. ?; f$ v5 C) h, k$database = "users"; //the db name. G# s0 W; E3 W# n& s4 d6 Z
$timeoutseconds = 300;//timeoutseconds limit# S8 T" A! T2 X* _# W% Y
//get the current time! q8 t2 u$ W @7 Z# I# X
$timestamp = time();( T+ C1 m- X. D# s7 y2 T+ r
//calculate the lowest timestamp allowed6 G' L' g- i5 j$ F
$timeout = $timestamp-$timeoutseconds;
3 a- r8 x. p) H6 u?>连接mysql
6 a1 U4 i* k1 I. f0 lmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
& ~+ {" o( P! L z/ b4 Zmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
; w2 y( b! s) U8 s; k; }: zmysql_connect($server, $db_user);查询数据库的代码:
, W+ W' T8 t, ~9 }$ ]5 K) }mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。* M& L- A1 T3 X: n- k* H y
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
& P! y4 j* j" h6 n8 V% X('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
: R" @+ R# @& Y0 I% @3 R- s( R8 u如果用户用错误信息的话,这样处理。- S- Q/ H( F3 x
if(!($insert)) {5 R+ Q3 V( S ^4 b& V# g
print "Useronline Insert Failed > ";
2 O# \9 W$ s1 L) Q5 T+ l; C5 q7 ^# ^% {8 }! c}然后实现当超过设置的时间就删除该用户记录。7 \9 g, \* r. g. \! S( K+ T+ H% m
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。6 l/ z% F! P% V2 {& X
if(!($delete)) {7 L I8 o( W ?( f% n u
print "Useronline Delete Failed > ";
5 H# C* F F- C}下面我们解决数据库中不同IP的问题
2 y6 ?& y5 l& T. n0 ~& t( F5 U$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用5 l( J7 W9 V }: A# C; \% o
mysql_num_rows(query);来统计用户,代码如下。
7 u6 ?$ b( a. b" ]+ n2 p$user = mysql_num_rows($result);最后关闭数据库。- h0 R" z R1 x7 }, n( I2 G& u1 F
mysql_close();显示在线的人数。
L f6 ^. `& k7 t( k. }if($user == 1) {
: r5 R' q/ V+ Q( W1 qprint("1 user online\n");! Y( W; G* y( f+ }0 k0 g# u
} else {
; j, q q: c& T& {; t) r/ u( ]print("$user users online\n");
; U0 O8 P) x$ y* z$ B7 a i1 W}最终把上面代码写成一个PHP文件如下。8 E: h" M3 X* B8 G: P
<?php" |9 ` E' s; c5 t6 g0 j% f
//Put your basic server info here1 Q3 C4 r- W+ y1 m; c( j( l
$server = "localhost"; //normally localhost. c& X2 y% p; @: Q0 d( C' \. R
$db_user = "root"; //your MySQL database username: A4 \" J+ A+ Y- T' O3 S+ b" K, K
$db_pass = "password"; //your MySQL database password) Z+ _# }; e/ c* O4 w
$database = "users";
, `, _% \0 O5 r7 ~$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
6 u4 q# q! v: _// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last( l& m+ B! F; `5 Q5 s
// $timeoutseconds seconds)* l0 {$ d8 X$ m* z d: I" ]
//this is where PHP gets the time
K* y, P8 m1 z( u1 _# {$timestamp = time();
2 @* P4 w5 t9 t6 |//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed4 V( t7 j' v- T3 a) @1 S
$timeout = $timestamp-$timeoutseconds;
, b1 \ o7 D& j3 Y( b7 I//connect to database1 M2 G$ t% e; {. G1 B8 D8 E8 E
mysql_connect($server, $db_user);
/ Z; m% S, N! D# Q% {9 e% f8 D7 V//add the timestamp from the user to the online list
/ |8 f4 d E5 w$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
& e7 L. v9 U5 g' h9 Y" l('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");% a) `2 e8 u' K0 J, G" ?, a
if(!($insert)) {5 A+ f* e, j, u" }( }8 w
print "Useronline Insert Failed > ";- M9 U2 x% t0 e# r. D s4 D4 v
}* x: \% C0 U2 i3 c: I1 |# b
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.$ C }8 U4 E) m, V
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");: }/ _' r) O( ^6 h% I2 V/ u
if(!($delete)) {
5 Q# D+ E$ S: _- E5 N5 aprint "Useronline Delete Failed > ";
8 x0 U, x0 ^- o& g9 Q& M}4 i3 o& H" Q K5 p
//select the amount of people online, all uniques, which are online on THIS page$ A. l5 o, Q$ D2 Q2 \) q0 Y7 D
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");" N' z9 W7 _! J/ X0 ~6 [, ]4 L
if(!($result)) {: k2 r/ @3 k- C1 v
print "Useronline Select Error > ";
7 s' p' D( W) F* o" d}
- ]$ k8 l0 i0 \: n @. J//Count the number of rows = the number of people online; d+ C; D7 ~4 {+ v
$user = mysql_num_rows($result);
$ W1 p& F4 |6 `$ R; |; ^: k; X//spit out the results6 y% J. |! n, B, T. e0 x. p
mysql_close();7 Y" }* `8 R$ s3 S
if($user == 1) {9 _6 c' N1 d# }
print("1 user online\n");
+ ]& Y8 Z+ h$ Q7 F& c0 Q} else {
+ T+ f P% p' T2 \/ yprint("$user users online\n");7 h9 j# `* D2 k1 U1 ? t8 ^# L8 r
}( h$ m5 f2 I, m/ v
?>
* e# F; l$ M6 Y7 t/ K* [" f6 d6 ]
" K" x7 F' p$ T8 P以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
$ K: z% }0 ?7 G/ u' U+ \! }" z8 @* ?时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
. q3 t# n1 F& `6 n( g: A# |我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
, P' q8 q6 S2 N. \+ Y当然啦,这两款主机也是相当不错的。. j: c9 `( i- |6 X- d$ y
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年" U$ c9 Q- w) w& T
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
* g" c2 h* E( Q提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ ( }* ~" ?: \* l4 A
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55/ Z4 G8 z+ U ]( e9 f9 W [
自己加QQ去问吧。 |
|