返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
9 w% `7 L5 h$ K! ^4 J我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。; p# j1 B: @# }5 X+ |: ^: ?! f
首先我创建MYSQL数据库表。- S7 M: `" a5 n  z5 q1 Z1 d
CREATE TABLE tablename (
9 q" G/ ?( e3 L5 _# Tfield type(max_length) DEFAULT 'default_value' (NOT) NULL0 z% h6 T+ z& s
}可以使用的SQL语句。+ k) l* Y1 l4 A, S; R7 g
CREATE TABLE useronline (1 C% m) [/ Z4 |5 K. n% A9 _$ x, P" d8 H
timestamp int(15) DEFAULT '0' NOT NULL,2 z# E! c) `* m" P; L/ d2 V+ H) E$ x
ip varchar(40) NOT NULL,9 h5 Y2 s+ ?6 M' h
file varchar(100) NOT NULL,
. E/ f5 G$ c6 F2 UPRIMARY KEY (timestamp),
2 W1 J5 M3 g% |: zKEY ip (ip),4 z1 t! L% A7 {7 n
KEY file (file)) I. }: X7 ]& {+ v  j
);下面我们是PHP脚本,首先我定义MYSQL的信息。
; A- J4 K0 i% j" T  q' H4 ~$server = "localhost"; //你的服务器
" P2 S& }6 S: T* v$db_user = "root"; //你的mysql的用户名
" [: h" \; k5 D9 f) h) k$db_pass = "password"; //你的mysql的密码( k& W1 D9 N1 v7 U: F6 J7 X8 z" F
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)$ ~) C6 Y1 W3 Z$ _( |
$timeoutseconds = 300;取当前时间。, E6 O7 h, ]8 ]5 i* P  K9 J, T
$timestamp = time();上面的完整代码:- T( p9 T. O- U
<?php! R) x9 W) B, M" ?% L! D" Y$ k" t: V
$server = "localhost"; //your server* N) e* G( x2 d  X& B6 v% j  s
$db_user = "root"; //your mysql database username" p/ L+ ^) k: q* G& n0 u
$db_pass = "password"; //your mysql database password if any2 X- l7 f. j6 Y, g% j5 Z
$database = "users"; //the db name
$ C: q5 X" g" o$ Z0 k; N$timeoutseconds = 300;//timeoutseconds limit
1 d" a" U3 U/ W3 k/ N- [2 E- |//get the current time
. g  w  {3 z8 E* P' O3 u# U* q$timestamp = time();
) V5 R' a8 R- \8 R. K2 A//calculate the lowest timestamp allowed
7 o; C4 K4 b/ |" a$timeout = $timestamp-$timeoutseconds;
% S% l; g% i) x9 Z; `# |?>连接mysql" o* m+ C" b1 f" g: S
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。- W" \6 _* h' r
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接; ]* J0 K8 P8 I1 ^9 G/ s
mysql_connect($server, $db_user);查询数据库的代码:; V# V9 @& t' d) w  ?: v
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
. E$ R6 g" B. S4 |* Z$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
, \) h% n9 ]+ J" K# q('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
, {0 n+ H& W$ m( j1 C如果用户用错误信息的话,这样处理。3 i, |0 W6 p5 o/ Q( n
if(!($insert)) {
' T  J9 ?- z8 u4 l2 |+ }9 Gprint "Useronline Insert Failed > ";! q# K7 \- d, o2 G) F( P
}然后实现当超过设置的时间就删除该用户记录。3 \+ |4 z1 A2 f& K" r
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。, o4 o$ P( }) [+ r  A$ {$ r, _
if(!($delete)) {
8 m  o# K+ k2 \9 e! s) f& P' u% kprint "Useronline Delete Failed > ";' [! d  ?; r$ f" @
}下面我们解决数据库中不同IP的问题/ f- B' a7 q2 A9 k5 u# O
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用/ _2 P( q# R; v9 `# u+ W5 m9 O: t+ X
mysql_num_rows(query);来统计用户,代码如下。1 P+ ^1 ], @+ T6 o! W8 u. b
$user = mysql_num_rows($result);最后关闭数据库。& S' }- }/ S; v& a% j
mysql_close();显示在线的人数。
/ Y! V2 J/ a% \if($user == 1) {  G# E' q& A" r
print("1 user online\n");
' J/ w! p6 I& `* T* q. l' R} else {' T1 d# O+ b1 y/ t* ]- s; g) c
print("$user users online\n");
$ S" M3 h$ m. [}最终把上面代码写成一个PHP文件如下。( K; Y- ~( Q1 y2 s& i
<?php
" V8 V1 H7 n( ~0 q2 @//Put your basic server info here! a* L& f4 C9 A0 ~/ s
$server = "localhost"; //normally localhost9 O' `, Q! _$ D! ]; `, E2 {9 V! Z+ D/ l
$db_user = "root"; //your MySQL database username
" l: s& L* a& e% g. S) Z0 u# F( M0 u$db_pass = "password"; //your MySQL database password/ a9 c: k+ Y- e  s6 E. k2 U
$database = "users";  N0 F. s& }7 l& F8 F1 Y2 J
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
; g1 t6 B$ q# `( I  f& F# b. t, u2 \// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
) D& u: P' k' d* z/ ?- X// $timeoutseconds seconds)
$ H6 X; {8 m& _, X" X' f4 b) M//this is where PHP gets the time- \+ o* R4 _5 P
$timestamp = time();# X- z* {* p+ q( v5 C8 v3 e2 R
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed) o" x/ P( E' c0 g1 x
$timeout = $timestamp-$timeoutseconds;
0 T; I/ A, g8 J, S//connect to database. ]2 Q) N  k; ^: T# c
mysql_connect($server, $db_user);
% m8 M  K/ E1 k. N: i7 ?% l//add the timestamp from the user to the online list
% f) o# V6 m  y! _  b9 m$insert = mysql_db_query($database, "INSERT INTO useronline VALUES( v+ a- T: A0 v* L2 v# Z- D# ?
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");; Z/ [5 O+ y9 E/ g. `  v
if(!($insert)) {
  G- a" s. q3 i/ p% W& o  O. Iprint "Useronline Insert Failed > ";. o0 j; L* a5 D' d( S8 `
}6 d7 n3 a7 Z, O; q
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.# \$ R* l" Q' L0 U  `0 |3 \
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
$ k5 N7 j3 @+ z' K7 o, o: `if(!($delete)) {2 \9 H8 A+ W# m' Y7 z1 r1 T
print "Useronline Delete Failed > ";
9 ]: E- e, |/ T- h0 |2 I5 x& w+ T}) M2 g4 @  _! t' K
//select the amount of people online, all uniques, which are online on THIS page
: c2 p" B! H: \( d: H) p. J. ~6 E& D$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");: C. j) m: E" d4 N/ q. s
if(!($result)) {+ j: N4 O; \" h/ ^
print "Useronline Select Error > ";
" v7 ]# o6 Q3 `& i: t1 D" _! O; ?: B0 d}
, x, U# c0 g2 o& q8 {# m//Count the number of rows = the number of people online
, F; S$ X, e) Q2 t3 m$user = mysql_num_rows($result);
- {9 c+ V0 l, X8 n/ V* H//spit out the results
0 R8 D/ `  M3 b( p0 ?0 hmysql_close();3 }; r. X. w% E7 M+ X
if($user == 1) {
4 G4 f7 _  S( `( _! bprint("1 user online\n");
, p) T- p- _5 M$ \} else {
) ]0 d9 U& F1 W5 gprint("$user users online\n");
( q0 ]9 D; G- i& u5 W+ d  d$ {}
8 R5 I9 |) x; h4 S?># a7 X4 e7 m" @$ o

* f( m2 G6 R% n  o+ B& R0 V以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
/ ~( m  W; H. ?$ n% z7 p9 E时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
$ T' C. y: Q4 B: R: u我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。$ c* ?) x- O' i; F* y8 H
当然啦,这两款主机也是相当不错的。
, u. m  N8 y; U7 x! b5 e1 W! R9 E# x智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
: Z3 p  n" p6 M( v7 E标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
: I2 S2 a6 W, T2 S提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
( k4 H" X* w! L; U空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
- k7 j, a( q9 h, R$ B8 j0 S自己加QQ去问吧。

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