返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!6 L2 f2 I- x+ o* h, i, `
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。3 C' _& U1 n0 e9 o: }. r5 `- }" V
首先我创建MYSQL数据库表。
# @6 _8 O  U! {& `( c0 o! @CREATE TABLE tablename (
4 V  o  J; b2 i: C7 |field type(max_length) DEFAULT 'default_value' (NOT) NULL$ S+ P) I: B  `: F
}可以使用的SQL语句。
2 t+ |! A8 K  f  gCREATE TABLE useronline (
. i. {2 p' Y2 j- Ltimestamp int(15) DEFAULT '0' NOT NULL,$ e6 ]1 U  D7 q/ f2 x
ip varchar(40) NOT NULL,1 P7 t6 x1 G7 V0 @) w/ ?
file varchar(100) NOT NULL,6 O2 h/ B: T8 F6 g' i% g4 ]; T
PRIMARY KEY (timestamp),
  S0 j0 I/ r5 e6 aKEY ip (ip),* L3 L4 L7 I3 S1 z3 q
KEY file (file)
' |# o$ S0 Z. S0 [" x) L$ B);下面我们是PHP脚本,首先我定义MYSQL的信息。' ?, R8 j/ M) C0 T
$server = "localhost"; //你的服务器" N6 F  z1 V' Y5 v  a" G  c
$db_user = "root"; //你的mysql的用户名  g$ d0 a3 I' W2 E1 O
$db_pass = "password"; //你的mysql的密码6 t9 L8 a3 K& D( a# `; y* ~
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)0 p% \6 Q" E5 ]0 v
$timeoutseconds = 300;取当前时间。
; s5 d( r" n9 p1 S; i$timestamp = time();上面的完整代码:
8 h) A4 q' h( A% r<?php9 J5 \( M" j2 p: @# _. k! ?( _
$server = "localhost"; //your server
5 b' @- o4 s- X6 i: R$db_user = "root"; //your mysql database username& v' A" o) P; b0 ]. z8 v
$db_pass = "password"; //your mysql database password if any7 B. _' X5 Z" c
$database = "users"; //the db name
  f% y6 R- }! x1 i% q$timeoutseconds = 300;//timeoutseconds limit$ U7 r& @2 l: w1 K
//get the current time2 O/ z% Q5 }, T7 [8 W2 G( i; h( E. ]
$timestamp = time();
6 R$ h. I  {  D. s" `) v//calculate the lowest timestamp allowed
$ l5 Q; J7 v: J2 j4 ^$timeout = $timestamp-$timeoutseconds;
0 x! ?. }+ p% k" n# Q2 ^: G# X?>连接mysql% i6 L+ Q* D! m/ D, u
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
. k% u4 Y0 K7 P9 d* Xmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接) {' B$ j/ k$ r
mysql_connect($server, $db_user);查询数据库的代码:
6 K2 S0 i  b2 }+ P& ^( W9 O' Y: umysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
4 T/ u$ _1 m0 f) J( X$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
$ d. O( Z# ]* u  e6 O! }3 `9 Q('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");9 ^. Y4 v' ]2 U; o  y' O
如果用户用错误信息的话,这样处理。1 b% Q; t+ O# [/ J! K% b
if(!($insert)) {
% ]- v7 b- o+ E: k5 y6 _4 Q1 _print "Useronline Insert Failed > ";; ~& ^" M, n9 `2 }) X6 Q9 ?
}然后实现当超过设置的时间就删除该用户记录。+ y/ a9 b3 `- D4 \
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
( ]2 E: U; k) n& P0 v! u+ D8 _8 Wif(!($delete)) {: }0 ^) O- h7 D5 }2 M& T
print "Useronline Delete Failed > ";
2 d( i& I$ i. j+ |: Z# s8 ^4 h1 J5 ~}下面我们解决数据库中不同IP的问题: c  K, y3 d7 L- P
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
  u5 R% e) `' L8 s6 jmysql_num_rows(query);来统计用户,代码如下。2 ~9 d5 V. p- K& C
$user = mysql_num_rows($result);最后关闭数据库。2 T! a$ t- ~! T3 Q7 T  {
mysql_close();显示在线的人数。
% e2 j8 O8 M6 A7 h" c! Qif($user == 1) {: w* C  R+ Q5 s" b
print("1 user online\n");3 x* {7 L5 i4 z) T8 P, N. s
} else {
& ^0 L- Z3 S9 L. ?5 H9 oprint("$user users online\n");: {4 `+ L; j/ e2 F8 Z3 v% n9 c
}最终把上面代码写成一个PHP文件如下。" T9 t+ w- C1 n# o' o
<?php9 ?+ C- i1 a/ X* c. f  }
//Put your basic server info here4 z" u$ u& E+ @8 x$ }! \( X" P
$server = "localhost"; //normally localhost
" H" P/ A4 {- n2 V! L$db_user = "root"; //your MySQL database username0 ~& K) `1 Y5 _/ ]& x+ u/ e6 M, p
$db_pass = "password"; //your MySQL database password) C4 K" K. I, r9 H6 |0 H6 k
$database = "users";" Y' ?+ w! U+ A! h
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
9 Z4 f: ]7 w$ c0 {; {* w// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
9 h0 ?% E  H1 Z( n7 X+ f7 D* F// $timeoutseconds seconds)1 h0 y3 E9 m! N/ W' d+ I& ~0 J
//this is where PHP gets the time
% u8 j# ]  C1 i6 ^2 w4 ^" V; q$timestamp = time();: Y1 v2 ~& h. U' V8 E+ t- b
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
" |. M- t* y7 n) h6 o" }+ G, h$timeout = $timestamp-$timeoutseconds;& M+ b: p" O; L' v
//connect to database
6 c7 B  m+ V2 W6 g2 _6 l# [mysql_connect($server, $db_user);
5 T; s. R9 x6 h//add the timestamp from the user to the online list
" k  U, B9 X) r( y# U$insert = mysql_db_query($database, "INSERT INTO useronline VALUES' n6 E& _9 i# b1 b4 I( o
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");" q( G% ^4 R* l* Q5 L$ U# h, `
if(!($insert)) {
. C. V# Q/ w0 G/ K; K9 zprint "Useronline Insert Failed > ";4 R3 l7 t: X- a- F  z2 f
}# s9 t$ y1 }% o
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
2 V. S1 U6 m  W: A1 G+ C* }7 Q1 ^) n$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
5 w2 h5 A# {9 Q* J8 }; Jif(!($delete)) {
8 [, @4 g  Y: ?% O7 iprint "Useronline Delete Failed > ";
. R! u5 @5 {( ]% _9 T- j: k! J}
2 R, L, B* K6 G# p0 U* c//select the amount of people online, all uniques, which are online on THIS page
2 |( p/ a. u* U$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");+ ^' M$ _  V* v! J
if(!($result)) {: D. n& D2 V# E" f
print "Useronline Select Error > ";
. K, i) k$ B' c}, z# C9 A3 e6 x+ [" I! ^1 B
//Count the number of rows = the number of people online4 F0 `' O- @/ |2 x2 G, G3 Y2 q; {
$user = mysql_num_rows($result);
$ H! J& H) d( r7 N. }//spit out the results7 b3 W& J. x- {+ {. i+ r* ^) I! g
mysql_close();
% _4 d* c3 n- e- a& l; [if($user == 1) {9 z" t: h5 \8 k7 Q+ b
print("1 user online\n");
: s, {2 C5 M$ m- ~# M* ?} else {
4 }5 @, S- D9 p5 G' {print("$user users online\n");
+ Z! E6 F6 c" p3 t1 u+ |$ O}% ]( S2 e- [; ]4 e+ v# N
?>
* q2 ~! R+ i- }% X" g" w
8 ~1 P( p5 a# a9 \& ~8 E. b% Q! Y以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。1 a1 @! D2 s, d4 o2 d
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
4 Y3 K. L  n! w我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
; I2 e6 @% i- M  B当然啦,这两款主机也是相当不错的。
5 |3 ]% j6 |& S% s  B, i智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
, {& j8 s2 l1 \  j1 E标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年( E$ C- e5 u' s' f5 K
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
+ G6 @7 P& K$ z3 C7 l5 O# i空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
& x) Q# V/ X) `2 x" p& F6 Q自己加QQ去问吧。

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