获得本站免费赞助空间请点这里
返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
. |, ?  r. z' g. d0 c我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。0 ?' N+ B- k0 ]0 D) }% `0 ?
首先我创建MYSQL数据库表。
8 J" z0 b9 S' f9 LCREATE TABLE tablename (
( [& O- ]6 G: i( xfield type(max_length) DEFAULT 'default_value' (NOT) NULL; y: u7 E  x( A4 C
}可以使用的SQL语句。
9 E8 I- B8 V) K( a: j8 KCREATE TABLE useronline (
; \" L0 C" q' S) Z2 Z: u1 Ftimestamp int(15) DEFAULT '0' NOT NULL,( y( A  E( N9 x; M+ k) [1 S+ ?9 _
ip varchar(40) NOT NULL,/ ?( O& }. [* n
file varchar(100) NOT NULL," j1 Q& @2 u2 L6 Y3 U4 a3 Q
PRIMARY KEY (timestamp),
* n8 {# g: y% a, j  m% }5 AKEY ip (ip),2 X2 v1 A/ N0 c  H, r- t5 E( r
KEY file (file): Z) {8 |" R- D
);下面我们是PHP脚本,首先我定义MYSQL的信息。
: E# E, L9 ]) {, c  X: @$server = "localhost"; //你的服务器
# q% d3 `- K3 T* r. v  T$db_user = "root"; //你的mysql的用户名; A4 X6 M3 c2 y0 A. U- x6 j) t
$db_pass = "password"; //你的mysql的密码
6 y3 z3 S4 s9 {0 }; x$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)( P' S3 D2 E0 M$ `& g6 v
$timeoutseconds = 300;取当前时间。
- G" l; [8 H) P: z& j$ g+ _4 [$timestamp = time();上面的完整代码:
/ l+ I' g. @9 x# t5 ?<?php
5 E5 J3 B4 y5 y8 D$server = "localhost"; //your server
  c9 }+ z+ t1 A( P) K$db_user = "root"; //your mysql database username
( U: y9 d$ b% m$ `' h5 r$db_pass = "password"; //your mysql database password if any* z9 u( v- @/ S( I% Y
$database = "users"; //the db name
, w: K4 G  B# A5 D/ o1 B( w- p$timeoutseconds = 300;//timeoutseconds limit/ Q* G; x+ V( y( h/ y
//get the current time) ^. {( F: {$ k
$timestamp = time();
8 @3 |" J6 j' B' x( D; s- n//calculate the lowest timestamp allowed) c+ h* N0 S5 x0 y# F
$timeout = $timestamp-$timeoutseconds;
7 w( |. }# X: G- n  j# T?>连接mysql
3 ]$ J, c& Y& T" t4 \; v; nmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
# o! o6 a: @0 ]' gmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接+ z# s6 t% E$ o
mysql_connect($server, $db_user);查询数据库的代码:$ X6 ?4 @8 P: T: {
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
2 D4 n# W+ }7 T5 y0 j6 h$ J6 e; S2 [9 h  R$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
8 @$ p! D) w4 o% Q" d7 Q('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");6 h- ~9 b$ e+ Y' x
如果用户用错误信息的话,这样处理。9 V$ ^6 k$ {) L9 E' |9 t
if(!($insert)) {1 M" y# Y' e+ g2 s8 Z5 d, k
print "Useronline Insert Failed > ";4 n: t1 V6 Y' `0 v& P( h8 a
}然后实现当超过设置的时间就删除该用户记录。( X6 P- J% S$ f3 Z1 a
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。" u' s/ n& t# x9 C
if(!($delete)) {
3 n* C3 u4 {, |2 r  Gprint "Useronline Delete Failed > ";" s6 G# o, a; m' u# z
}下面我们解决数据库中不同IP的问题
( [3 D$ Q' C9 E% e  Y4 \; U$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
( n) Y0 N; z; I! _) y) Z, b7 ?mysql_num_rows(query);来统计用户,代码如下。
0 F2 r0 c- a+ a1 X$user = mysql_num_rows($result);最后关闭数据库。$ b& S- g0 z7 Y0 V; z
mysql_close();显示在线的人数。
+ H# {. B/ c- @& T5 K# Aif($user == 1) {9 Z0 x2 K) ^; T1 Z. y9 d# [
print("1 user online\n");
4 W, Q1 e/ f- i# Z: y" l$ |: B} else {( ?8 g' k# g/ _
print("$user users online\n");1 T' @5 w) o5 P6 E: K  `
}最终把上面代码写成一个PHP文件如下。
2 d; j" _3 r7 C! I+ e<?php
6 z9 v. g( W: ~, z( z" ~4 t% H//Put your basic server info here+ _$ j6 e4 Z5 p+ _
$server = "localhost"; //normally localhost
; H  u+ U/ v  f! U8 W  [$db_user = "root"; //your MySQL database username
( e2 b' o* Z+ Z* z$db_pass = "password"; //your MySQL database password' T7 t$ I* s8 a& _7 m  ?. X
$database = "users";; d2 g: C4 k3 X, r
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are& @' Y2 f; i: t! \
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
8 W. g# o9 x; ]" N- K// $timeoutseconds seconds)
) x- P/ [2 B" e) ?5 y# Q//this is where PHP gets the time
) k5 \* s. K( g$ U& B  r$timestamp = time();  l/ P: s# g( [5 R) v
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed* c! N$ l' H2 ]
$timeout = $timestamp-$timeoutseconds;
+ m( L9 \$ @. }, o) P2 p* }//connect to database
' m, H9 c! ~! m, }8 jmysql_connect($server, $db_user);
* T; J; e! D; D//add the timestamp from the user to the online list" U- L  k$ H" p3 Z- i6 t$ y
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
' o5 U# M2 c7 X' d3 I('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");$ {% `4 z# i3 L* h( m: A
if(!($insert)) {
0 T* w8 f6 ]0 O, q: Hprint "Useronline Insert Failed > ";1 C, R' _8 X! w6 v- ~: j) y
}5 W& x/ I4 q6 ?) ]4 p" V  _
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.; b+ ]# f, {* Q" H1 w( M  G/ K
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");: f1 ^) J; G. R3 Q  P  K* `& ?
if(!($delete)) {3 w- ~+ p5 v/ Y( D4 k  r% X
print "Useronline Delete Failed > ";8 l/ s' i7 W4 M, b( p3 m. V
}% Z+ @+ y% H, j& K( e" m, q7 i3 O
//select the amount of people online, all uniques, which are online on THIS page1 q: @5 R+ @. I! i8 g9 I
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");3 I% r7 y# k4 R/ k
if(!($result)) {2 G8 ^; l- {( K8 Q2 S% ?0 t3 |* j
print "Useronline Select Error > ";2 z( a+ ]5 a0 q# I9 I
}
6 B" q  T1 g# ?+ r& O( u//Count the number of rows = the number of people online$ t) A$ C! q. k6 s
$user = mysql_num_rows($result);& r! b4 A9 S& a- z# n
//spit out the results- R: N) H! ~) X
mysql_close();
2 [' [( ?8 K) L2 Z# ~if($user == 1) {
! t, |8 D& `3 Iprint("1 user online\n");( v9 a+ G/ O1 B8 _
} else {5 f. w0 \8 v; h* }, U6 F
print("$user users online\n");
( S$ Z5 u, d+ _}
$ B) ?; ]5 |0 n?>
$ k7 _8 R: j; J8 a$ U3 _3 j$ x! d3 _- n2 u
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
6 |4 A" d/ Z+ }" O  |" o3 P时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
) i" b. a- Q' X& F8 M, }我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。$ Q& m" J  H6 w7 l$ P
当然啦,这两款主机也是相当不错的。
, g* X: j3 c4 }8 H2 s智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
- k- U& g; ]; Z% y5 U* z2 l标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
5 M: n* M$ T5 ?# }; Z  R( N& B提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 0 S1 X0 w/ a" n1 E
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
& ~/ }- j: c; U7 v自己加QQ去问吧。

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