
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
0 T' O: d8 Q" U/ c, Z我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。( C: L$ q' [" I7 Q0 v- h. q* A2 X
首先我创建MYSQL数据库表。8 ?* N: \- l2 g' P6 b
CREATE TABLE tablename (, ~+ N$ @4 a5 m2 J0 W
field type(max_length) DEFAULT 'default_value' (NOT) NULL3 c4 F2 X$ s( L, @. d
}可以使用的SQL语句。5 X* T1 @7 u4 V3 z
CREATE TABLE useronline (6 B+ d' g( M9 V8 H" \% I
timestamp int(15) DEFAULT '0' NOT NULL,) j! `* ]! e" W) @9 ? P1 U% [$ j
ip varchar(40) NOT NULL,# J4 L/ |8 Z$ D8 v4 R
file varchar(100) NOT NULL,0 Q# _- N- G; f( x, _/ k
PRIMARY KEY (timestamp),
9 P Y. w# x& sKEY ip (ip),8 a6 [+ I5 R+ x8 w
KEY file (file)+ Y- ?0 d2 \. ?* H4 G2 ~. b! y
);下面我们是PHP脚本,首先我定义MYSQL的信息。
" a; Q2 `7 n: j' E" g$server = "localhost"; //你的服务器3 V: ^3 O1 M# V( C8 S
$db_user = "root"; //你的mysql的用户名) S" u+ x/ D# e; T% z
$db_pass = "password"; //你的mysql的密码
! }; @8 {3 B$ u9 p# L$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
/ X8 o; `2 i5 G# C! A, @$timeoutseconds = 300;取当前时间。
: r' L" U% n0 r+ s. j* f: I# c$ F$timestamp = time();上面的完整代码:# h9 d: X' B0 i1 E
<?php
* ^: a* d8 S+ _. g* I: z: ]* Y3 f- l# r$ V$server = "localhost"; //your server2 h' \- S, ^' B/ ^6 _
$db_user = "root"; //your mysql database username: n& s" Y, p0 [2 X5 O9 Z( Q% m, S; N
$db_pass = "password"; //your mysql database password if any
0 b" u/ ~& w. ]$database = "users"; //the db name) d" N' w+ u$ I$ @( R8 E5 T4 P0 o
$timeoutseconds = 300;//timeoutseconds limit5 n, C$ X, C0 @% q
//get the current time) L X2 o2 e4 f
$timestamp = time();
" t- ~5 w) G: q* J2 s$ z//calculate the lowest timestamp allowed
- b+ o5 t, Q* o0 I/ h3 D$timeout = $timestamp-$timeoutseconds;
0 {% l P" Z | E, w! @) A+ `?>连接mysql
' x& {8 S. l Z+ m* i; O/ cmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
$ f6 u2 p3 {& ]8 ?0 z/ [8 Pmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
. p6 G: V8 m$ Z3 z/ R) C5 I, Xmysql_connect($server, $db_user);查询数据库的代码:
% ]' R( ?; V' k, ~mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
4 Z! A: B- J6 B, q3 a) Q$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
8 X6 U2 G# {' f8 ]('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
. u! h6 p$ |+ c' e如果用户用错误信息的话,这样处理。9 O5 H3 b9 X H5 [- C4 l, ]
if(!($insert)) {
3 v# v! h9 y5 ? h% H6 ]7 b5 v& S; kprint "Useronline Insert Failed > ";
, ?% Y" X7 D: Q3 s& ~}然后实现当超过设置的时间就删除该用户记录。( H7 W, s$ @( o$ V$ d) P
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。& o* E# L0 J7 K8 b3 w8 N# N
if(!($delete)) {
; q( P* s% i( Z: Gprint "Useronline Delete Failed > ";; L0 \8 P. D( d& H5 r- n
}下面我们解决数据库中不同IP的问题; p9 E8 M& {4 l0 V/ A( ^
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用8 _( e- {7 ]; Y/ o X$ q
mysql_num_rows(query);来统计用户,代码如下。
; R3 Y; c s7 p+ |$user = mysql_num_rows($result);最后关闭数据库。9 y' a0 m4 |6 {1 ~6 A( ^8 D+ s
mysql_close();显示在线的人数。7 y/ _* j5 e) |8 ]2 {0 L
if($user == 1) {+ @3 J9 `- b6 v0 _/ x
print("1 user online\n");* K) S4 k' `2 p
} else {
3 @2 L* @3 q( S) tprint("$user users online\n");
% E% r$ u' q% Z6 `" N- s}最终把上面代码写成一个PHP文件如下。
4 p, }8 R9 t7 T) ~<?php
8 L ^; B: x5 i//Put your basic server info here0 P5 ^9 h& ^0 t0 R* P0 ^0 V( \) e
$server = "localhost"; //normally localhost
9 f2 ~7 N3 ?" N2 E& X$db_user = "root"; //your MySQL database username
2 n& |# F/ i* X, B$db_pass = "password"; //your MySQL database password; t# G6 [* I5 x1 p8 ] U$ o
$database = "users";& x |6 P" {: Q5 y2 c$ r% E* t9 K
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
: q' o4 x- b5 G& w2 t; R. [9 T; O9 h// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
6 W1 R; [2 w/ l5 }0 X7 b// $timeoutseconds seconds)/ k( e* y3 ]( O, ?- {# B
//this is where PHP gets the time
3 D, k$ @. A+ m$timestamp = time();4 u; }/ ^# v2 T5 e( r1 ~
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
* V9 |4 c2 [5 K5 {! N0 _ D$timeout = $timestamp-$timeoutseconds;9 C/ q* w7 c4 ?5 Z4 r
//connect to database
( Y7 h `8 e! p6 R% ymysql_connect($server, $db_user);
+ F6 M# |; H: ]) k5 \4 l5 e//add the timestamp from the user to the online list
6 R% X! K' ^6 c9 A6 T$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
9 E2 ~/ x. j. e8 |0 g! _+ y('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
" v! s9 K/ F$ _1 X7 |. c Y! Rif(!($insert)) {
0 H. }" `1 u3 Vprint "Useronline Insert Failed > ";; b$ b: \% C5 J# }% L3 n/ i
}
9 ?' R5 p9 p8 t6 J. U. \//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.( P8 r# s' a; f9 h4 M
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");% ?" z) s, A# |
if(!($delete)) {
* c; E( `; Z3 b6 kprint "Useronline Delete Failed > ";
]4 `; _' ^' D' k& S) E) Q( `}
* E& K+ y5 q$ m& {$ h//select the amount of people online, all uniques, which are online on THIS page2 }* r& o: q/ r+ w# H
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");" x. p. U8 h7 D6 V7 z5 _
if(!($result)) {2 b7 `$ {0 g' x$ O- s5 m
print "Useronline Select Error > ";0 b1 y; ?1 V) T' E4 r( q- v4 e
}
7 i/ @4 v. n4 f0 I( b3 `7 a+ n- b//Count the number of rows = the number of people online: y& Z% n- B2 A, t5 e3 e
$user = mysql_num_rows($result); ^2 _* l# o/ ^( w6 g
//spit out the results3 A2 ]; p/ A( J
mysql_close();; v6 ]/ \/ W# _9 ~& m) ?
if($user == 1) {" j" ]# h3 `5 I; {
print("1 user online\n");- M7 H# J$ T# U
} else {7 @$ [ h0 L5 \( n( _
print("$user users online\n");/ Y5 C1 Y" |# Y, M# h$ m
}
0 e: _) v$ a. U?>1 E9 F/ ^- g* o1 E) |( E7 X! I! A

; R& c/ U9 j# A q以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。& }& v0 G w7 c4 Z) e
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
+ a3 Z7 ~; T% |0 W& X4 S* ?我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。$ T/ ~+ f, F) w/ q
当然啦,这两款主机也是相当不错的。
% Q5 z0 ^2 D( Y智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
/ Y6 u& o. o7 w2 }' q* \- s+ X- ]标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年% T' s$ q1 r( T+ R4 [3 a5 g2 z
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
# W+ c, H- R7 ], H; {' Y空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
: u: d$ k/ _ C, x0 G' r自己加QQ去问吧。 |
|