返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!; z! {1 c7 g- `* ~0 j# e. {+ c
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
, s% z3 J1 m% G3 Y8 C0 N5 ^9 a7 p首先我创建MYSQL数据库表。
  `: b6 h0 m) F5 |5 y: q- y& G) R6 TCREATE TABLE tablename (
/ a& z. u- w! zfield type(max_length) DEFAULT 'default_value' (NOT) NULL
/ g7 A# C' x& x% z$ J5 K$ ]8 l}可以使用的SQL语句。: i5 [0 `$ N/ ?. f# {
CREATE TABLE useronline (, w% w+ X/ R4 h$ a
timestamp int(15) DEFAULT '0' NOT NULL,8 `, A2 P, s) s7 Q. y3 {6 Q8 u$ }
ip varchar(40) NOT NULL,# Z, p* V% I# s& c) o) _
file varchar(100) NOT NULL,
7 |9 O, Y, s. Y7 ^4 MPRIMARY KEY (timestamp),
2 O9 l' |1 U' v1 S5 d% m+ P: MKEY ip (ip),$ y5 s" {9 J+ H) E) ]
KEY file (file)" i1 y0 `; B& D/ M$ |: C. b: |
);下面我们是PHP脚本,首先我定义MYSQL的信息。
5 @$ b: \- E8 p, D$server = "localhost"; //你的服务器
5 m! n, O" x% Z6 ]% O$db_user = "root"; //你的mysql的用户名  i# ~/ v' F- w1 q$ V" g% J: T; n
$db_pass = "password"; //你的mysql的密码
! G4 j7 L+ I- v) ]/ t$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
. ^2 o; I9 B  c+ a$timeoutseconds = 300;取当前时间。
/ \$ `! c$ |+ M, n6 \9 s- f$timestamp = time();上面的完整代码:
# U$ O0 `: S2 u<?php
7 z2 w% k* i0 n, M$server = "localhost"; //your server
/ x' \  S. u" C1 G6 C3 X! L$db_user = "root"; //your mysql database username
  C2 M, ]# W# e8 l( e  c( x$db_pass = "password"; //your mysql database password if any
/ A2 F6 e6 X) E$database = "users"; //the db name8 B% j7 }! [6 f
$timeoutseconds = 300;//timeoutseconds limit
3 [* J1 ?# ?; T) T+ \//get the current time6 {% N, Z6 B/ O0 P7 G
$timestamp = time();# B  L% p* j! {, B# U; P( B
//calculate the lowest timestamp allowed
" h, W- ^4 I, k, o: z$timeout = $timestamp-$timeoutseconds;+ J5 j4 A  N2 T
?>连接mysql
1 n3 o5 Q3 I- R" J* ]9 `: y9 Fmysql_connect('localhost', 'username', 'password');也允许使用变量形式。2 l7 @& [3 d5 [4 ~
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接$ H0 w/ M# V* n% ~3 r" U
mysql_connect($server, $db_user);查询数据库的代码:3 e; E0 a  C, X1 E+ H* u
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。5 ?+ r/ q; Y/ M) u( L* M9 ^: l
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES0 o8 W7 Z! k6 N
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");  t6 ]1 ]8 [- v1 X9 M
如果用户用错误信息的话,这样处理。
* U  `  m  a. [0 @4 `if(!($insert)) {4 d+ s1 R4 y( x& u( E
print "Useronline Insert Failed > ";2 g; s/ G( O; ]2 i9 A  c  R( {
}然后实现当超过设置的时间就删除该用户记录。4 j# D) z& L6 v* Q" n
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。" s, X6 m/ ], H* F- M: [% M
if(!($delete)) {
+ k, Y0 T4 E, H: r( |print "Useronline Delete Failed > ";9 D( U) u$ f6 a' U! n3 p
}下面我们解决数据库中不同IP的问题9 Y4 E: @" r$ i9 G( y
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
( ^5 D3 e# }! ~6 k! y- Pmysql_num_rows(query);来统计用户,代码如下。
: `8 b/ H; H4 X) E* N0 ], A& S$user = mysql_num_rows($result);最后关闭数据库。/ n0 {; o! g& B5 R
mysql_close();显示在线的人数。  j1 X% u4 U3 _' y. ^  d- h
if($user == 1) {
  R9 z; q9 R% ^: n: b) Nprint("1 user online\n");9 i3 A1 C8 j6 R, W# t
} else {" c  o3 E- K  k7 h! y1 j2 U" z
print("$user users online\n");' _( p. u1 ?% X( j
}最终把上面代码写成一个PHP文件如下。  q2 M7 V3 H$ i3 E4 C' Y
<?php
  a' z4 q" c8 L5 m" _//Put your basic server info here' O: _6 r+ o7 Q% f. v0 }
$server = "localhost"; //normally localhost6 s0 d5 `/ h5 y
$db_user = "root"; //your MySQL database username% g$ q  q5 Q+ O6 R
$db_pass = "password"; //your MySQL database password
6 `5 ^& J7 H2 v# x6 P$database = "users";; [! H+ m+ @9 `! T  Q& L+ P
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are) C. M; H! _  s0 D; i2 P" v
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
8 }7 H4 g0 T7 v. }. W' K// $timeoutseconds seconds)7 x$ M6 Z& B' ^) E# l( S
//this is where PHP gets the time0 m. g4 ]0 b& v6 K
$timestamp = time();( N, \8 Z& G$ Q6 N! H! k
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
8 {$ O4 `* G1 N/ X% D( S$timeout = $timestamp-$timeoutseconds;! s" P" m6 `! J# L* n
//connect to database/ V( G% ~# D" {* v' y: u3 K
mysql_connect($server, $db_user);
4 ?  S& k- w/ s; F. ]6 s1 L//add the timestamp from the user to the online list  y- n- `6 v3 p% a; N1 `3 H
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
! J, K. e1 M  \! G, |5 i('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
; n% W5 W7 Z+ N- u0 {7 Nif(!($insert)) {+ R9 t% [$ F  c+ T1 l2 l. h9 U
print "Useronline Insert Failed > ";7 Q1 J% ]6 ?8 L3 }
}
) ~0 |' s* x. L) j//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
) b' u' A+ p4 [- \" D& r& Q2 r$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");( E9 k; z8 f8 |
if(!($delete)) {
2 ^& g; @+ x: _8 j# z2 Iprint "Useronline Delete Failed > ";1 J- j! H! w+ F* f+ I7 q
}+ l- f9 d' |& K! e
//select the amount of people online, all uniques, which are online on THIS page
+ J0 e* y+ K/ s# l" G$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");3 |8 i- U# w& Q* N: h# N
if(!($result)) {
$ o& M9 R" H. C' Eprint "Useronline Select Error > ";0 w0 L4 r6 }: q' k
}6 U- `1 F5 i. j! ^& o3 R/ S/ n* d
//Count the number of rows = the number of people online
  x/ x4 }/ K0 X3 P% C. I6 V$user = mysql_num_rows($result);
8 v' H4 u$ V: L1 M2 e( ]//spit out the results  C1 @1 i& t0 a( G
mysql_close();/ m6 A# D! c( q3 |. W& ^
if($user == 1) {
: j: d- Q/ W2 r: Eprint("1 user online\n");
9 |! v( g* W4 `$ X& a} else {0 k, _. h5 m/ @. X' e
print("$user users online\n");
8 ~5 j, \8 A$ H' i}- j' O2 e- V: r
?>
) W. c5 v! d( U2 v0 K. p0 s
- n; b4 M3 `! y2 W( ~3 b) l" ^以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。* I$ T, F  b9 K" q! Q7 B6 P3 J$ c( T
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
$ k( A! i' c: p我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
% X, w" q, z& G: i3 J当然啦,这两款主机也是相当不错的。3 ~& F5 Q) k) _
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
6 `  _' Z( ]& k5 _标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
0 ^/ t) [7 d5 K! v5 t& P  e$ h- p提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ ) C0 T, O: U5 @& i
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55) D9 V8 Q) i* z# \1 J, ~9 H
自己加QQ去问吧。

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