返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
% r4 b% V  \' ?4 M, z0 y我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
/ J5 p9 X  T7 \  u# l' ?; H; p首先我创建MYSQL数据库表。
, z! m' `" y5 H- a6 i2 u7 @CREATE TABLE tablename (+ w8 a# P; T* E; \3 Z
field type(max_length) DEFAULT 'default_value' (NOT) NULL
- _" c% g5 }% z8 H0 U}可以使用的SQL语句。
" |5 ?0 d) l/ f) O0 |' {CREATE TABLE useronline (
. u8 g9 t1 O2 r0 a2 b, v& n/ Stimestamp int(15) DEFAULT '0' NOT NULL,6 ~4 H+ c& j) D& G. A- L' \
ip varchar(40) NOT NULL,$ z  d' o# `+ S/ l0 j8 x* Q
file varchar(100) NOT NULL,- o* x5 Z* J3 E: c
PRIMARY KEY (timestamp),
8 R$ ^& Q: f, y3 s1 M! \4 WKEY ip (ip),
$ _3 C1 }% h" f, f9 DKEY file (file)
/ X# H3 B6 i- t/ ?2 w6 V);下面我们是PHP脚本,首先我定义MYSQL的信息。0 G+ U- Q. P% z
$server = "localhost"; //你的服务器5 o; K7 P: }9 e) G( c
$db_user = "root"; //你的mysql的用户名
9 W3 R1 G! D" X& a$db_pass = "password"; //你的mysql的密码
" [6 V3 Q5 k' h$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)& C3 g, j( i# T1 E8 S, M
$timeoutseconds = 300;取当前时间。
4 h5 M1 b7 i8 h$timestamp = time();上面的完整代码:
7 N' B# C4 f: R  Z. P# i) m& i- s" [<?php" d5 _) S4 i# p' T
$server = "localhost"; //your server. W( I4 {! D, I+ \
$db_user = "root"; //your mysql database username+ u+ |% S1 u! A- Z
$db_pass = "password"; //your mysql database password if any
0 |+ W/ M: A7 }$database = "users"; //the db name
1 A. k& S8 E. N7 r* Y0 \+ Y! @$timeoutseconds = 300;//timeoutseconds limit  ]1 ]. m7 Q* j
//get the current time) U" ^" b* F- S; _
$timestamp = time();
, S- e- U( n" x8 g//calculate the lowest timestamp allowed, c8 O+ ]- i/ L0 D6 p$ q6 N+ g
$timeout = $timestamp-$timeoutseconds;
6 k) i9 \: _! w) c8 Y" Y: w?>连接mysql
+ {0 `' b" C; |: D6 d0 umysql_connect('localhost', 'username', 'password');也允许使用变量形式。* B9 Y) _- v! d) ~3 Q8 E
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接3 P+ A* F# f; ?6 z
mysql_connect($server, $db_user);查询数据库的代码:/ r' U8 a9 @  p0 W( {! T
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。) t0 h+ l4 H4 G% p8 T/ n
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES" ~; L4 q# b! D- v  S' j
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
' |7 X: X# L% V1 T- y( _; n如果用户用错误信息的话,这样处理。
3 s! D, N* N: Z4 \7 z- N# Dif(!($insert)) {; \4 k4 L0 D* ?  h* [' }
print "Useronline Insert Failed > ";
6 q9 v, r" _  A( E7 Q, }* h+ |% H}然后实现当超过设置的时间就删除该用户记录。
$ o4 u. {8 W; u1 G$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
3 j7 x9 f$ e! A0 eif(!($delete)) {
7 O$ ^! s1 h+ L, c  y7 Q; r9 {print "Useronline Delete Failed > ";
8 @" T$ j! e7 |0 Q) [}下面我们解决数据库中不同IP的问题
; w" u  b8 M+ D) C/ E5 `' O$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
8 J4 N0 d: [9 v# Gmysql_num_rows(query);来统计用户,代码如下。
- B0 d  P. l; K0 i. n, j) J5 T0 F- ~$user = mysql_num_rows($result);最后关闭数据库。
' b+ H! c; \# k! v2 i. \mysql_close();显示在线的人数。
& z4 L7 v, j) @5 rif($user == 1) {* r  X/ B: @+ [4 K8 b( a/ M
print("1 user online\n");8 B2 ?& ~, Q  S" W* @: v4 f" X
} else {
8 J6 k! z" L. ^5 t0 U. dprint("$user users online\n");
& B$ \  L% O% J* I/ O}最终把上面代码写成一个PHP文件如下。- D. u) W) x) P7 p
<?php
. o% k7 E1 c, q, s0 e5 a//Put your basic server info here5 i. L5 x* O3 g% S; o
$server = "localhost"; //normally localhost
5 H% \* X  |, t# ^" Z$db_user = "root"; //your MySQL database username; R1 E& E( u7 i% t! K! l% O$ i/ f
$db_pass = "password"; //your MySQL database password- p4 v; y3 D9 g& k! R
$database = "users";
& j/ D0 P& w2 c, \$ z* z" O0 Z$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are3 W+ k6 \% g: l! N6 \# R. I, @- F
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
1 ^6 Z  }2 |: U7 r  X5 @( X- J// $timeoutseconds seconds)- t! m" x9 h- h
//this is where PHP gets the time$ P! N) J5 c6 i. |5 i
$timestamp = time();
1 g: {8 j1 B0 d5 B3 ?9 W. n//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed0 q8 P% k1 V6 T0 u5 X0 X* U+ E* a
$timeout = $timestamp-$timeoutseconds;
, i& ?6 z# E. X0 J+ h0 n) o//connect to database9 W5 S# f2 S+ e8 ~
mysql_connect($server, $db_user);
! Q' B2 ~" o% Z/ }) q//add the timestamp from the user to the online list
$ f) w; `2 ~6 r/ n3 c* B2 Z8 \6 J$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
- f: ~1 w1 ?) g0 [/ E, `, ^('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
& p# t4 {# g( v/ ^( C, `( w% Dif(!($insert)) {
2 }# h1 k5 l' nprint "Useronline Insert Failed > ";; u0 \$ }& U- d0 y% ^5 U% q$ a
}: M: y; R: `, L5 A2 W5 ]5 r: a
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds." ?) X* `% L/ E; Q# V
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");3 y3 E, V- d/ N: C) P* o: J
if(!($delete)) {  @1 x8 f9 ]' O9 Y: [2 ]  D
print "Useronline Delete Failed > ";
; ]* S1 X  I: k# [}
: K% R6 [4 _8 |" {/ M//select the amount of people online, all uniques, which are online on THIS page
% z5 @& ^% G8 j$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
8 R; _; I9 F( r) A% {0 P/ ^. Vif(!($result)) {
. A# n3 i. e  S! A& n- n7 N! \- Q: Xprint "Useronline Select Error > ";
  s; |* s" t1 X, C# _}
7 F! @& H6 {0 p" U+ f8 ?: ^//Count the number of rows = the number of people online
% U( K2 S# K1 s/ ]$user = mysql_num_rows($result);
: H+ B! J: v! q% @" o. ^! O//spit out the results
/ _3 Z4 h* j, ^- v/ f; G- \# Umysql_close();
" @3 `4 C1 a% g( v9 x: o* s* U4 \if($user == 1) {
; b4 H/ F4 u# h3 R% S  \print("1 user online\n");
6 I0 z- ?5 @7 r/ }8 Q} else {4 H9 C* v( E2 r* H
print("$user users online\n");4 g1 q  f0 y, b( r2 P
}
. v( k7 u; w4 r9 w! c?>* n. R, S5 {9 n! p

! [- m$ r1 P" U( ^% U9 p以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
7 |# Z0 t/ r+ p时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。: g% @# R# m& m5 A8 K9 _( ^
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。) y, f% Y2 n  Y% c, R+ F% S4 J
当然啦,这两款主机也是相当不错的。
  B9 ?8 C- u7 U: }2 I( W智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
; I1 I; D; J" p3 ?标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
2 W! K: ?, s. Z) f提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 5 [  M( l& u1 G$ D) I
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
$ F. O) H! ], R3 @  v自己加QQ去问吧。

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