|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!8 u* y) N6 m5 c+ A
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
$ m# i* \$ w& i% d0 K. G' B7 v: j首先我创建MYSQL数据库表。
+ U- U; [0 U8 h7 {" U2 C3 ?) J, ]CREATE TABLE tablename (
T. `) F: ^: Y* g* ~. gfield type(max_length) DEFAULT 'default_value' (NOT) NULL
4 D7 A' K0 P; j) Y! t}可以使用的SQL语句。
( n- i3 F2 G) {% U( \) S0 E; ^0 }CREATE TABLE useronline (
/ Q2 Y. s, A* Atimestamp int(15) DEFAULT '0' NOT NULL,
& y x/ f# Z$ I6 b! eip varchar(40) NOT NULL,# R* j! s; b5 Z3 [/ r3 [$ P
file varchar(100) NOT NULL,
* X! M; ~0 P0 }/ Z( u- ePRIMARY KEY (timestamp),) K1 B" n2 J. ` K7 K4 v$ Y1 t
KEY ip (ip),
. Z' A, O" P1 D. X& sKEY file (file)
8 p. B0 k+ ~5 h2 `+ f- G);下面我们是PHP脚本,首先我定义MYSQL的信息。7 O2 H" b6 I2 V( T6 Z
$server = "localhost"; //你的服务器$ ^9 _3 F0 G* J5 {
$db_user = "root"; //你的mysql的用户名
4 y! I- V2 s: s$ E- B/ M! L4 r7 e$db_pass = "password"; //你的mysql的密码7 O6 o% h; e$ T" f x
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
0 `4 W/ J/ T/ a$ E7 b. g$timeoutseconds = 300;取当前时间。9 I1 t0 M: q2 s7 d
$timestamp = time();上面的完整代码:
+ j4 ]. W- v5 C: t<?php
& R3 } J' H7 \9 u0 p1 P$server = "localhost"; //your server& B% m; V" d+ V# V1 C2 f
$db_user = "root"; //your mysql database username
. I6 q1 k/ k: Y1 O& O* ^$db_pass = "password"; //your mysql database password if any) O4 p* {1 q4 I; X5 o% J' j
$database = "users"; //the db name; K d: [% d& |1 T/ R2 o+ J; n5 P
$timeoutseconds = 300;//timeoutseconds limit
8 y2 o; \ j+ G p( S/ R+ p//get the current time
1 L- Q7 m5 ^; G( c( R$timestamp = time();0 S& g" ?2 U; X1 I
//calculate the lowest timestamp allowed
7 H3 l2 D; W) k# R& B, E$timeout = $timestamp-$timeoutseconds;
& ^* F) o, @% L, g( \: M# N?>连接mysql
: G8 f. ]( t/ w- `mysql_connect('localhost', 'username', 'password');也允许使用变量形式。0 Y1 A7 v$ D$ u) T8 g& O* M: [% i% X
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接1 O+ {9 ?0 ]2 o* g7 w' n4 T. _
mysql_connect($server, $db_user);查询数据库的代码:1 s; G0 P6 X6 F7 ?0 j, y
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
$ M0 T) T$ Y- h; ~' a/ h$ @* J$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
3 h# b! z6 m6 p: U x('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
Z0 f4 L0 b+ w( e. q如果用户用错误信息的话,这样处理。1 e( n+ o( q9 S2 c& m2 K
if(!($insert)) {
- Q0 S& p4 }$ Kprint "Useronline Insert Failed > ";
- q! \" S" ^& c" ]9 T5 C. X4 ^}然后实现当超过设置的时间就删除该用户记录。
( B3 U. `3 ?2 e7 z+ r G9 K$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
, Q0 Z* X+ }: ~ T4 Y1 m: nif(!($delete)) {
7 H- Z1 K: {! O3 x: p0 U3 nprint "Useronline Delete Failed > ";
9 S4 U& e; v+ z, u) X3 l+ V}下面我们解决数据库中不同IP的问题
7 O/ y+ W9 \% g/ C0 p# S p" [/ y: |! S$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
6 {, C9 y7 [$ ^$ u* I( U& t6 Rmysql_num_rows(query);来统计用户,代码如下。3 Q( v5 v+ L2 ]5 O+ Y- Y
$user = mysql_num_rows($result);最后关闭数据库。
2 M; `" n; u: p$ f* x6 ~* i; |5 `' @9 p- C' jmysql_close();显示在线的人数。 B7 V5 ^& }3 e
if($user == 1) {% _& ?2 N5 b8 }- X1 u1 Y o. Q' b
print("1 user online\n");7 Q7 s O$ W g& D: C y9 A
} else {
- Q8 R7 ~& P- m1 |6 Jprint("$user users online\n");% k& n& f' Q1 ]8 Q! T1 j7 d2 w0 h" Z
}最终把上面代码写成一个PHP文件如下。 d! @6 P$ s% [! s$ J I
<?php4 X1 a& o+ U2 I
//Put your basic server info here
( |! e6 G7 e. J* M* v; |0 ?$server = "localhost"; //normally localhost N9 n" Y( @5 N" {# u6 ^; c2 Z+ d+ n
$db_user = "root"; //your MySQL database username$ L6 M2 p6 \# [9 p2 f- B1 O
$db_pass = "password"; //your MySQL database password6 C+ m- ]6 X2 t9 n% n
$database = "users";
' [: T8 D% J/ ^$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are% o" [9 }, u ~
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last5 p2 M, v6 h1 N6 t4 |1 j |
// $timeoutseconds seconds) I4 S; L: w" ]& B/ r7 y4 N& Q
//this is where PHP gets the time
% d! ~+ k3 \; a2 h$timestamp = time();5 q! Q4 J, u1 t* T5 d; `7 s! a5 J
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed# T, T# L3 g$ V
$timeout = $timestamp-$timeoutseconds;
+ A7 ]2 z: t" F1 X4 U1 x( b" |6 q//connect to database
1 l# ^: {- I( ^" emysql_connect($server, $db_user);
. J6 M9 \' k% z, h0 K$ B//add the timestamp from the user to the online list& z3 J, q1 y" l. H7 Y9 A6 N. E; L
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
. W6 z, [: }3 n. t3 z3 E! t ~6 ?('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
3 h% z2 I- M/ e; j0 X. O1 A r) W$ Kif(!($insert)) {
1 ?1 q6 v1 ^8 Wprint "Useronline Insert Failed > ";
/ r4 C q7 @: A! w- v}
+ _6 r/ J7 z) h5 }//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
0 ~2 U& A2 Y( f6 l. G$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
! H' l1 N; [0 Wif(!($delete)) {0 f4 U, {: _3 [8 \$ O, z; l
print "Useronline Delete Failed > ";
- a5 o3 \( p) o}
0 G; R' q" `/ [: o8 P- E. b& l* U# s3 @//select the amount of people online, all uniques, which are online on THIS page5 K2 K" E1 ~; x4 ^" }1 b7 I7 y$ K
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
/ Z$ B# w7 o/ y" n2 F8 mif(!($result)) {: C$ E9 w1 [5 h1 o$ `
print "Useronline Select Error > ";
0 r9 t) o! \" T! {7 G( G}: G2 o" I6 ]5 P& |; w) T
//Count the number of rows = the number of people online0 O& w' P' V8 y2 g- b; H& _& ?
$user = mysql_num_rows($result);
: H* [/ D5 N* c; |' O* H. @ Z+ ]//spit out the results- J) a9 P- G P, \9 _
mysql_close();" ]) u* J& P% B3 F. }
if($user == 1) {
$ K* v/ S% F* C- |9 Y. x3 g- wprint("1 user online\n");. `( r+ R: _1 z7 G
} else {& V4 ^9 b2 d# \4 u# j1 L- K
print("$user users online\n");
{: ^ s3 g% X" w, t; R}
; x6 n! F' U8 V- J?>
' d/ |2 z; [2 ~4 N7 A7 |$ ~9 G 1 m( c6 e+ q7 J9 l
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。# k" J( p K: i+ o' z7 D
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。2 [$ o7 a4 v/ d- }- ?0 I
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
' H Y9 p, X1 M" H- J当然啦,这两款主机也是相当不错的。
) X B$ Y7 \8 p' @# y* M智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
$ Y0 _; \" y8 ^" H/ E M标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
4 F) G e# b& a3 l; e提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ - K! C( ?! W9 \% ~ w
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=556 B, y+ \+ ~7 r) G- i! W: d
自己加QQ去问吧。 |
|