返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
, a+ X0 A" e6 }我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。5 k7 H6 b' n. b* K( B9 _) Q
首先我创建MYSQL数据库表。2 H. [* q; s5 B8 W7 M
CREATE TABLE tablename (1 g6 t+ t9 {/ n  r
field type(max_length) DEFAULT 'default_value' (NOT) NULL
! D; L7 X% _' x) g8 X}可以使用的SQL语句。
8 [% b- y" t8 A6 _CREATE TABLE useronline (! \5 f& ?! {0 f) z8 L2 v4 h5 |2 D
timestamp int(15) DEFAULT '0' NOT NULL,! V. m3 z! {! o+ n2 t
ip varchar(40) NOT NULL,& j. `# R/ J5 u' y6 G/ U2 E
file varchar(100) NOT NULL,
6 F! ]2 T/ |- u# r( W  HPRIMARY KEY (timestamp),
! E3 t! U: s: Z1 Q1 |/ |KEY ip (ip),
5 d0 B' n1 F% A. E* }KEY file (file): Y/ A5 k" d" g1 V4 d( o
);下面我们是PHP脚本,首先我定义MYSQL的信息。
9 e% _" s$ v7 {1 D% D. @# [3 y' w$server = "localhost"; //你的服务器
) {4 n+ H0 a6 i4 @& e# e0 M' H8 M$db_user = "root"; //你的mysql的用户名
% n+ a) o% @7 a$db_pass = "password"; //你的mysql的密码
  @1 w2 M: X/ H8 I3 D. d9 n7 v# }$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
5 Q9 ~3 P7 p9 b" y3 K$ y/ a  E$timeoutseconds = 300;取当前时间。
) x! C& s4 D( M$timestamp = time();上面的完整代码:8 ~: j# `4 S! O& M" H
<?php1 L/ N! |1 f' _3 {
$server = "localhost"; //your server
9 P( l& w7 l) l$ ~% w/ M' b6 b+ s$db_user = "root"; //your mysql database username
+ A: V& J5 F; A! T* w5 }$db_pass = "password"; //your mysql database password if any
4 z; _2 y9 X4 c! N# v* t3 P8 Z6 |$database = "users"; //the db name+ o9 }1 B- N/ I0 u  I5 h) {6 G
$timeoutseconds = 300;//timeoutseconds limit2 z+ A2 T2 q$ @; [7 Y
//get the current time
$ v+ }4 `: d0 V$timestamp = time();
+ B5 @( H. v6 w7 w' g: S//calculate the lowest timestamp allowed" ~+ ~3 @4 Y! k1 X. L" W* ]3 i
$timeout = $timestamp-$timeoutseconds;6 T- t9 D6 `7 @. y- L, S  }+ X9 q
?>连接mysql
* ?. [/ n, ^1 [mysql_connect('localhost', 'username', 'password');也允许使用变量形式。5 g% F+ E" O8 o) Q2 }  ~
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
+ F5 H# R/ E0 s  ymysql_connect($server, $db_user);查询数据库的代码:9 F- B- \( M. I) u7 a: k
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。: T5 \+ d# r7 W( c+ n2 q
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES3 |* C% H! [# G* p: [# z
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
& b( s, O7 F1 W% ^如果用户用错误信息的话,这样处理。
0 n1 C  G' {/ Z# g9 Pif(!($insert)) {
, _: }' U. h) P: u- A  D# hprint "Useronline Insert Failed > ";' w: C  H. `* [4 U3 Y3 I$ c, o
}然后实现当超过设置的时间就删除该用户记录。9 M& T0 h4 |! P( E9 u3 b
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。8 H* P: ^6 p9 h! d
if(!($delete)) {
" M+ Q& S; _' |* R1 h: c3 ~print "Useronline Delete Failed > ";
4 |. _' ~% a; h  j) E! M}下面我们解决数据库中不同IP的问题) g- g& T/ P$ D
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
4 n2 T+ ~+ W. D5 p* y, [: j6 lmysql_num_rows(query);来统计用户,代码如下。
$ R" q" z5 j2 c% B# E$user = mysql_num_rows($result);最后关闭数据库。
  d' ~* d% O) |; x" B3 }4 ]mysql_close();显示在线的人数。
' p+ J6 Q3 X1 Q8 x" l* M' lif($user == 1) {4 ^$ g9 o" J; r7 g5 q
print("1 user online\n");
! m+ ^% F4 R! N' {0 ~6 h% t1 F} else {
' z! a! h. a# _# Gprint("$user users online\n");$ E- ^/ h% L( }" m0 R  H( a
}最终把上面代码写成一个PHP文件如下。
, v" t) {4 X. ?9 N) z5 x3 {7 C- t9 u<?php% t$ S0 _! }9 U3 C1 M: h* D% G$ F
//Put your basic server info here
' q( p9 o1 t- _( {6 h+ d/ D' K$server = "localhost"; //normally localhost; V* F: p! }8 V& W" o
$db_user = "root"; //your MySQL database username0 P: S- w3 L( S  @
$db_pass = "password"; //your MySQL database password
# C" h: ^1 R, B  b7 C5 t& F- c$database = "users";' w' v1 g& q6 v) o2 U7 u
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are7 |. X4 t4 {% p, H; a# o
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last  b. z2 d3 i2 C" e8 T; W$ J
// $timeoutseconds seconds)" b8 |& y! e. |, G( k, G
//this is where PHP gets the time9 w; h' A5 F+ p9 L6 j) g' y
$timestamp = time();
! P" X$ H$ v; C//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
2 b4 _8 r; n. H1 A$timeout = $timestamp-$timeoutseconds;
+ G( Y  K6 k# t3 E. u/ Y//connect to database9 D) A" @7 Z* V, Z
mysql_connect($server, $db_user);
) X% p* d: w9 [+ D5 [3 G' P/ @//add the timestamp from the user to the online list) c& b* x/ L% u. C8 R
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
. {" [* d/ Q, X3 ?4 l! F('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");0 l' r. W, u6 ~$ \( N" ?; O4 Y" ~; R
if(!($insert)) {% U$ A3 d6 \8 K
print "Useronline Insert Failed > ";
3 z( q4 ^6 ]4 B" Z/ u$ {8 o}4 c$ x9 {2 [3 r9 n' _0 `
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
; E" U/ b2 h1 U$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");- n6 }4 q' ^* Q- @& \6 m
if(!($delete)) {1 s) L$ V' X4 K7 ^6 J- E; z
print "Useronline Delete Failed > ";
$ y% `( @' m  T2 m: {5 [, O}
! T3 W. b* b- E+ I: d//select the amount of people online, all uniques, which are online on THIS page
4 [, g8 R- h) t$ s8 s$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");1 m- @2 g3 V- Y. b- R. r* m$ S
if(!($result)) {; [/ b6 Z, ^- z( Y
print "Useronline Select Error > ";, ?0 p7 _. P6 A# K! U3 e- i2 c9 f& O
}
: x/ v' U! ~* W+ P" N//Count the number of rows = the number of people online
: w" \/ i- t' R% I2 e# q$user = mysql_num_rows($result);
7 C0 G5 Z# [& d" G//spit out the results2 B2 w" a* K8 r' u( e3 z3 a
mysql_close();
. ]0 }: g2 s! l3 Z2 j& @" jif($user == 1) {
& B$ {/ t! b8 _; H# @- Tprint("1 user online\n");# R( c4 }# n. s
} else {
) Q0 a  B: Q* q6 T2 Z0 O8 Lprint("$user users online\n");7 O5 R1 T% y5 q7 _( X  S7 S% f
}
. T9 `3 v4 |# ^( C! S?>
4 ?2 I- t0 d: f& C6 Z7 l1 M5 F& x+ F+ ^' q( U
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。4 Y, x# w6 X1 p% i( c5 W, v
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
: x6 o2 \& x0 i- X% Z3 t8 e我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
6 p2 y6 J5 a3 S当然啦,这两款主机也是相当不错的。
3 C! b6 e9 k( y9 W/ r智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年( Q$ x% p8 M: R0 r# S
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年$ r2 P6 V- _' ~8 w) z" a
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ " X& u2 J* d7 ?, i8 D6 H4 }
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
  X* p4 ]$ [% X0 x3 i2 o- r: V自己加QQ去问吧。

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