Board logo

标题: 刚用PHP写了一个网站在线人数的程序,请大家进来指点下! [打印本页]

作者: lilcy88    时间: 2008-5-28 10:40     标题: 刚用PHP写了一个网站在线人数的程序,请大家进来指点下!

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
- w+ |% v* E9 d我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
0 P- s1 l$ B( N! _. M% }首先我创建MYSQL数据库表。$ @+ a' {5 p5 T! O9 b. j- q
CREATE TABLE tablename (
5 P0 B/ F( H4 i8 q' H5 J0 E2 Xfield type(max_length) DEFAULT 'default_value' (NOT) NULL" W/ L" @* o, H- Y
}可以使用的SQL语句。
1 J5 g) f. {3 p& V" V7 ]" xCREATE TABLE useronline (
( N8 ^9 }1 S: ~" |" atimestamp int(15) DEFAULT '0' NOT NULL,
; f0 ~5 h- E; @$ @0 ]ip varchar(40) NOT NULL,4 `0 n" N, I1 m& m
file varchar(100) NOT NULL,
. f' u, i! I1 ]  }4 y8 x$ E/ ePRIMARY KEY (timestamp),
* z; a) W" r- q- l& Z" EKEY ip (ip),1 F. [/ G7 r) F  o" E( M; Q! E
KEY file (file)
. N+ P  I2 _1 @) Q);下面我们是PHP脚本,首先我定义MYSQL的信息。. h, Z- A6 x5 l$ {# r
$server = "localhost"; //你的服务器5 @2 v3 u. \- s- x
$db_user = "root"; //你的mysql的用户名6 P7 x& w, O  ]6 c. `# {. v) V
$db_pass = "password"; //你的mysql的密码5 s  L& N3 `7 s
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
7 G0 P) n% F/ H  ~4 R9 A, U9 k$timeoutseconds = 300;取当前时间。5 e; @( ~* Q9 \1 m% c$ m( ?
$timestamp = time();上面的完整代码:
/ ~/ v- t) L+ u* q# M7 r<?php
/ F0 R4 S- Z$ t$server = "localhost"; //your server  U4 R0 @; p, T- B- f
$db_user = "root"; //your mysql database username
3 X7 @) L2 M. d( X! H' @$db_pass = "password"; //your mysql database password if any# J/ P" z* G! k' ]' `- X4 G% i" U
$database = "users"; //the db name
7 t& w* ?& O/ ]: t5 y2 l* G3 v5 Y2 j$timeoutseconds = 300;//timeoutseconds limit' \- l+ w4 [" w3 e- A
//get the current time
; y  P" U' l; _8 u( O$timestamp = time();7 y( |: |# j# X) H) ^3 u' B$ |% j
//calculate the lowest timestamp allowed, J) T/ _1 k0 l0 f+ v
$timeout = $timestamp-$timeoutseconds;
' \4 a& J; K+ q) W8 o/ z?>连接mysql
$ ^" Z4 [' H( A2 {& `: t1 umysql_connect('localhost', 'username', 'password');也允许使用变量形式。
# y6 b! K- _, i9 Q# Wmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接( r. P' J7 [% z; i5 h# n
mysql_connect($server, $db_user);查询数据库的代码:7 s4 `/ t! p7 q9 U
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
+ q; x( q1 z) Q9 I$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
0 p0 k$ ?: V& ?) r('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
/ ^3 W* A/ |3 I9 m5 \如果用户用错误信息的话,这样处理。
4 l. h6 P; Q1 M. Tif(!($insert)) {- I, D1 j4 }1 ~5 M/ M  b5 Q
print "Useronline Insert Failed > ";! S. z! v" ]/ w6 R9 H& S+ g8 g
}然后实现当超过设置的时间就删除该用户记录。
+ c9 f, u, f. r1 z2 K2 _$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。% s7 _& X' y2 Z8 Z
if(!($delete)) {
- ?/ _+ \2 l9 f" t! ~* ~print "Useronline Delete Failed > ";( l2 q5 m# L% I8 A( J7 @
}下面我们解决数据库中不同IP的问题
+ L3 O) t7 _- w! B2 H, h6 H$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
' P" }0 F" n- C* L/ Amysql_num_rows(query);来统计用户,代码如下。
, `( x' H' K1 Q3 d/ O) U; |/ G$user = mysql_num_rows($result);最后关闭数据库。
! J2 d4 s8 \; P: Pmysql_close();显示在线的人数。6 ^8 z8 a8 {& ?* ?- }  O0 t
if($user == 1) {
8 h. D( C. H" A4 tprint("1 user online\n");
6 D% I- A/ u1 `' L+ B6 |4 z} else {
$ l" a, j  t+ b* N/ m1 L. tprint("$user users online\n");9 K; ^* ]- v% n  z
}最终把上面代码写成一个PHP文件如下。" G/ j8 n. h" C7 f8 t6 H1 M5 Y
<?php
" v3 i) _) O9 H) |: c- p' W//Put your basic server info here: n4 ^- U# ]. b* l" `/ @5 P
$server = "localhost"; //normally localhost6 R/ @! W! @3 S8 o2 K- R% s
$db_user = "root"; //your MySQL database username" |+ R. B9 r2 \/ {+ R
$db_pass = "password"; //your MySQL database password4 s1 q! c) {# j9 R
$database = "users";# W& ^0 @# Q0 K  e
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
! ~" q, @: ~" J2 g9 y// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
. Z2 ~! ?+ d7 M" Y7 X1 k// $timeoutseconds seconds)# M1 T. q8 A- Q1 f' f; Z
//this is where PHP gets the time
8 B$ A) P- O9 Y1 y* |% U6 w, q$timestamp = time();" O' }3 o; ?6 f
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed6 g& r5 L1 }3 Y0 P; d5 P7 ^  `
$timeout = $timestamp-$timeoutseconds;
2 }. ~. r( y0 Y" z3 ^2 d2 u$ I$ b//connect to database% V! P# \( V5 u! C7 z2 n0 H! }
mysql_connect($server, $db_user);4 W1 N, j2 ?2 Z* f  T& X5 V" P4 j
//add the timestamp from the user to the online list
( Q5 f4 a- v  L0 n5 H/ W  X2 Q3 N$insert = mysql_db_query($database, "INSERT INTO useronline VALUES$ ~$ d% s4 X' ]# L- g8 K7 a
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");: T' s6 L9 |# q+ C$ B; J
if(!($insert)) {
* j" R. k) m6 L7 [print "Useronline Insert Failed > ";, Z$ n/ Y" n% Z$ t
}! T. ]# _; }" V# Q. g: j8 }! p
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.  K& J+ P' k8 {. G8 M" W/ Z' H
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");& N$ ~) M2 [" [& `- q& x, I
if(!($delete)) {7 A( [4 g+ ]. `
print "Useronline Delete Failed > ";5 A9 o% i5 @% d/ X" ?( o
}
9 r* c8 G, @3 O+ i6 `) z, ?9 \  ^//select the amount of people online, all uniques, which are online on THIS page
) }& z5 F0 `/ I0 X6 ~$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
( p5 k5 \% g3 }, O/ s' yif(!($result)) {
6 W: v: C( n$ m! P" B  ?print "Useronline Select Error > ";  u2 o6 X. J& a
}
3 p2 M& o+ C  [% h//Count the number of rows = the number of people online
* t6 T6 i2 {$ ^% h; u& m, O9 Q$user = mysql_num_rows($result);
! y( A2 _7 X  b0 V//spit out the results
3 j) E5 O+ Q! b+ D) Z% Qmysql_close();
& `% ]8 P7 q! R3 j, ]* R+ gif($user == 1) {
  T# y* F! W/ S4 H! @: \! }print("1 user online\n");, c2 v9 M5 r# [2 t& ~
} else {
, s9 }' o6 ]0 Pprint("$user users online\n");
$ c3 m2 T8 s* m}  Z# p7 \6 N2 D2 w: h
?>2 }+ K3 W0 G* [7 s
7 z- l1 l0 V" k1 A1 c
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。+ `  l. o$ f* Q% ]
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。% H% Y+ Q0 q/ p( m
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。4 w" h: {) S, z' m1 E3 ?! l/ x+ R) |
当然啦,这两款主机也是相当不错的。: \9 S; m2 |' E& i& l
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
. R% ]$ J' N# m% W标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年8 Q0 _& G& \# V- c. ]8 c7 H
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/   r7 ^! t  x" @/ j
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=551 R0 c3 L! F& d7 P% G7 x# B" j
自己加QQ去问吧。




欢迎光临 捌玖网络工作室 (http://89w.org/) Powered by Discuz! 7.2