返回列表 发帖

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
# d  T/ ~% p1 Y4 [) f) m( [8 _  S我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
0 W/ O& K) [# b; R% U首先我创建MYSQL数据库表。5 E# a" ?9 O; {/ r% W% A+ s( ~2 k
CREATE TABLE tablename (; K- ]9 M0 w! `+ |' j
field type(max_length) DEFAULT 'default_value' (NOT) NULL
$ |& `8 L% g! h7 q/ C  p}可以使用的SQL语句。1 m8 f  U8 |: M  g% q: S
CREATE TABLE useronline (
0 p) r" a) @/ G  }/ D- v! R: B% d+ ?1 itimestamp int(15) DEFAULT '0' NOT NULL,% W/ d( m+ U; g" \+ c; ?
ip varchar(40) NOT NULL,- C/ K/ \/ P; d0 D& `; }7 n# j
file varchar(100) NOT NULL,
" L; I4 R5 r6 [& I- g0 XPRIMARY KEY (timestamp),
- s8 t7 i1 y" [. y+ Z# DKEY ip (ip),
8 {5 E1 E1 q& t1 g$ I( Z  z  vKEY file (file)
7 G% {1 n  b) s0 s6 g);下面我们是PHP脚本,首先我定义MYSQL的信息。/ p, Y9 u* i! h4 E) x; l
$server = "localhost"; //你的服务器
8 O- I+ Y; r% x4 V8 L$ j) V4 z$db_user = "root"; //你的mysql的用户名7 r# H- A4 A* z3 f
$db_pass = "password"; //你的mysql的密码$ j- h1 ]9 q5 m9 X1 _) G' G
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
1 V' w' m' W% ~6 ]$timeoutseconds = 300;取当前时间。" u, _  V! D8 N2 s' v4 \# M
$timestamp = time();上面的完整代码:2 b$ p2 x" G/ U" @
<?php
* u) d5 U& R/ u* H' o7 t1 {$server = "localhost"; //your server
+ n: N; O7 I  |9 ^9 K0 `$ U8 w, J$db_user = "root"; //your mysql database username
+ k. q0 X; c' c( a( y  t$db_pass = "password"; //your mysql database password if any
$ R: ]( o; |! E- l) F- |5 y. Y$database = "users"; //the db name
* N# j5 n; a2 J" K  r5 b* P$timeoutseconds = 300;//timeoutseconds limit: ^% b. O1 @3 Y8 N
//get the current time1 R* }$ Q: Z4 b. y0 ]6 v
$timestamp = time();2 ~4 H2 T' W  S( g
//calculate the lowest timestamp allowed* E. j) |/ F" ~' v
$timeout = $timestamp-$timeoutseconds;
# A6 c8 t$ Y' `) E! E7 w?>连接mysql
( `* M& u% T$ D9 emysql_connect('localhost', 'username', 'password');也允许使用变量形式。
+ A' i" Y3 Y" {5 H3 Zmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接4 T, v$ z' X9 V2 z3 J+ n
mysql_connect($server, $db_user);查询数据库的代码:9 E' r. }" |9 v8 Y$ e  A$ R
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。, {3 g7 H0 z0 e3 L1 ~; w% j
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES1 w  K: C/ Q" `1 ^9 \# i  ]( ~
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");+ w! n  {7 i1 @0 J7 A% }/ B
如果用户用错误信息的话,这样处理。7 g2 Q& _$ X4 Y% g
if(!($insert)) {
/ I4 Z# [4 P7 r- o0 q( p, Pprint "Useronline Insert Failed > ";% Y; I0 u, Z6 O# f2 E. p
}然后实现当超过设置的时间就删除该用户记录。3 ~% g# I' M3 c, h- H6 Y1 l$ U
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
6 T/ Q! T7 L( t! ]* P# `if(!($delete)) {. e. _+ |2 O) P- S7 t1 v. D- k/ S
print "Useronline Delete Failed > ";% h* y4 w% L0 `: Z% w5 N
}下面我们解决数据库中不同IP的问题
2 ~+ M3 }# f+ F( |) I7 m  t. F$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用8 l9 s; q5 d# i2 o& Y
mysql_num_rows(query);来统计用户,代码如下。
4 W- X$ B4 m/ ~, |$user = mysql_num_rows($result);最后关闭数据库。
+ ?/ y! Z& C# y1 R6 dmysql_close();显示在线的人数。
0 @# }+ X" m7 o0 J0 t; X8 Rif($user == 1) {
" Y4 x% k0 |. o/ ?print("1 user online\n");1 X7 F" H% I: ^, N8 o9 Z7 [; Z
} else {4 q" p) _6 J0 L: J8 m
print("$user users online\n");1 x. Y5 ?9 {( A, y2 _/ d8 S2 i# t
}最终把上面代码写成一个PHP文件如下。
7 n" T' M" n# y8 q1 T- j- C<?php+ v9 b" U- b# B3 h, A* u; P
//Put your basic server info here
, l4 K7 u: P5 O+ a6 u& @$server = "localhost"; //normally localhost
' ]7 N" Y, J8 f  c- R, @+ b6 k$db_user = "root"; //your MySQL database username
% H; K3 ], @3 V$db_pass = "password"; //your MySQL database password
; y2 n" }& m: M6 A  |. m$database = "users";0 X+ ?' i  K: y! n5 U! l
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are& ?- r, `1 {# F
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last6 w- Q  @/ ^- M- m* ]" y+ {+ U) h
// $timeoutseconds seconds)
% N! ~; e0 e3 I- O  C8 X0 H9 r//this is where PHP gets the time# S8 L2 S. X) J; Y
$timestamp = time();% H2 J) @+ U% C5 K; o
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed1 s7 V. F+ K, K7 e
$timeout = $timestamp-$timeoutseconds;
# z: ~5 K5 r( f+ m' [//connect to database0 W  k' r- X1 L( F8 g
mysql_connect($server, $db_user);
2 U8 {; U" K$ [9 w" T& p2 T//add the timestamp from the user to the online list
! b0 k3 |0 ~0 r) l( j2 Y8 p$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
3 |( Q/ a4 M- z& |: m; ^('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");+ a! }6 B2 C% \6 }
if(!($insert)) {
- ^: l+ j1 Y; {$ X3 Dprint "Useronline Insert Failed > ";
8 ~* P: |# r! \% Y}
4 F& {5 _# R6 a1 F4 V//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.. Y8 @) H' I; h6 R2 P6 O) b
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
! h8 B# O5 I. T1 pif(!($delete)) {
0 r+ a4 U& A" t( |print "Useronline Delete Failed > ";/ M& R( Q. Y7 B) C8 h. j- |
}
1 P" v& V/ m6 T. X//select the amount of people online, all uniques, which are online on THIS page
; V$ D) o" [. T; |  D9 X) J! E$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
6 k1 k* G& z! ^6 Aif(!($result)) {
+ w! a3 H4 g0 l+ l+ k, N6 @print "Useronline Select Error > ";: G$ C: U8 {7 ]) F
}1 v+ F1 C- e3 I  ]/ w
//Count the number of rows = the number of people online6 h6 x, j9 _9 V" }: b5 R
$user = mysql_num_rows($result);
; `8 d+ j- f. ]//spit out the results
& t  }4 l3 y; X/ N6 J+ Z3 gmysql_close();9 Z; r0 J; }& o5 _3 n
if($user == 1) {
# c* M9 C7 E+ d; y' b- f3 Zprint("1 user online\n");9 J$ S8 G0 X( S) W6 c1 `
} else {- o8 p/ u: V/ ^0 ^
print("$user users online\n");% U8 A# V* c, B* I: q! ?* w
}: Q! {! |. z: J; ?9 k% |$ z) ]6 p
?>: {  F2 B% d9 U8 ~

4 o5 q2 t: @# T以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。5 w, \! a! [& T3 `3 H3 D
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。* W1 N9 i/ e& w6 V# z
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
# z/ ~! I" l- F& t当然啦,这两款主机也是相当不错的。
2 a0 w$ t8 L7 Q2 a智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
8 V+ b8 m$ W3 Z3 z3 F标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年( \: h- K; a- b5 Y+ k$ u8 D9 z
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
$ H4 m1 [2 r9 V, W" P* l; @空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
% h6 y* _- ^% H5 o1 D) h" U自己加QQ去问吧。

返回列表
【捌玖网络】已经运行: