返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!: }% d3 [5 K' t. Y! W  v
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。8 y" v. s- l1 |
首先我创建MYSQL数据库表。
% j1 U0 n) {6 B8 [$ mCREATE TABLE tablename ($ L  R+ z6 O8 ]4 X7 Q0 b! F
field type(max_length) DEFAULT 'default_value' (NOT) NULL0 E% A! }& o- E
}可以使用的SQL语句。
8 T- Y: \( q/ N7 Y  Q( ^  n0 s$ V# OCREATE TABLE useronline (5 F( x8 B, r' K- L
timestamp int(15) DEFAULT '0' NOT NULL,
4 \" `7 [, c. V  }, s  l2 H! v- n% `* bip varchar(40) NOT NULL,; }5 I$ ?# G4 H) s7 s) `% `! s
file varchar(100) NOT NULL,8 b  k( U. ?# X/ b8 t3 d' o" d0 V
PRIMARY KEY (timestamp),
) j: }$ f* r' i; |9 oKEY ip (ip),
; b: u. J/ I4 ?0 n& [/ t, ^KEY file (file)
* f8 \. O8 d" Y5 w  W. z5 O/ H);下面我们是PHP脚本,首先我定义MYSQL的信息。
& C/ j- P7 M4 l/ I3 Y$server = "localhost"; //你的服务器
' ~9 J& S( y$ Z( h2 g% M9 h1 w$db_user = "root"; //你的mysql的用户名
0 p  |9 p" b8 f% b; h+ R' d$db_pass = "password"; //你的mysql的密码
+ x1 Y1 a" ^  }$ e% U$ O+ a$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)) Y9 b; X; V2 B, h4 C
$timeoutseconds = 300;取当前时间。  j" x. A5 g2 a2 [* D9 f9 N
$timestamp = time();上面的完整代码:
# Z1 r6 y/ h. r  f: r* X<?php/ q! h% e: j5 }& w, i
$server = "localhost"; //your server; k% m* _! l  M1 A: O' ?! V
$db_user = "root"; //your mysql database username7 x. l+ v  k% q  t3 x
$db_pass = "password"; //your mysql database password if any
* E6 @4 A* Y. g$database = "users"; //the db name
! u$ D1 _( b8 S$timeoutseconds = 300;//timeoutseconds limit, w+ M! L" Y8 s- v; O- O$ j6 p& B
//get the current time, y. `/ @( a9 A0 c4 R3 d0 [
$timestamp = time();
+ ]& W9 S0 V2 K. ~, L: t7 |! u& X9 {6 E//calculate the lowest timestamp allowed
* R( l0 e. r! q  N/ {5 m; ]( R" U$timeout = $timestamp-$timeoutseconds;
' F* R& G, U, y1 S* J$ o?>连接mysql
. j0 y+ K+ S) omysql_connect('localhost', 'username', 'password');也允许使用变量形式。
4 Q2 ]9 I  A: l3 a# jmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
+ x$ O) G1 a, k1 @mysql_connect($server, $db_user);查询数据库的代码:
: A' _# O4 x5 Q2 Hmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。) _) q! F7 P' x, L" R2 O! }
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES; D* q; T8 i% R, s
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
& @3 G! q; n; ^  z8 u; f如果用户用错误信息的话,这样处理。# d# @" V, k0 q2 b
if(!($insert)) {+ A4 K( i4 g; z: e! W5 x6 b
print "Useronline Insert Failed > ";6 e7 v/ r! \, c% R
}然后实现当超过设置的时间就删除该用户记录。
7 Z/ O7 s( [1 p  G0 l$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。, B3 _8 p  ^) y* F
if(!($delete)) {& T! q9 X- I% z5 b# Y  v# ]8 g
print "Useronline Delete Failed > ";0 j3 h( K1 i/ T1 _7 R
}下面我们解决数据库中不同IP的问题
9 J  V4 |8 H9 j% ~$ q8 t; T8 Z$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
. |# ~; t3 ~5 }# h% W4 Fmysql_num_rows(query);来统计用户,代码如下。
! W/ V$ @; X9 D% ~, j+ ?8 A$user = mysql_num_rows($result);最后关闭数据库。9 h6 B, ~. q* `4 ^* [. q7 a* P
mysql_close();显示在线的人数。( [# u( d3 m& O- d& a" I( g# q( G6 S0 \
if($user == 1) {1 h; c0 h1 B6 j) r0 Z
print("1 user online\n");
! G' q; ~  H- d2 N6 b- N$ d} else {& g: m" c$ h( e1 B
print("$user users online\n");
9 {5 s: R5 b; x/ p" j  G}最终把上面代码写成一个PHP文件如下。' [; k$ Y/ ~. L  |( P
<?php
; O% p; l2 S: t1 s//Put your basic server info here4 m; B) A  v, q1 f+ S0 Y/ A  R% ]
$server = "localhost"; //normally localhost
  }8 p- L  B  K7 X: w$db_user = "root"; //your MySQL database username
8 n. O$ @, s3 F, o  |6 G$db_pass = "password"; //your MySQL database password6 {7 z0 H& f4 p# }
$database = "users";( q7 J3 w; i0 _% K. _/ }2 [+ }' B
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are/ v* y( y) i0 y8 z9 i7 ~" s0 k8 E9 y
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
: M. i% n5 J* q2 e, J// $timeoutseconds seconds)" V" b) ^1 V* v) B$ }! F& {9 @# T- ?
//this is where PHP gets the time
6 m8 r4 m: w5 I+ h0 |+ ^- x$timestamp = time();
0 \# g8 T- N+ a" M//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed6 Y& u( d4 y: c% ?  a; T: L; j5 ]
$timeout = $timestamp-$timeoutseconds;
3 I4 g: i' U( D  \# R; F% d//connect to database
1 N- q9 A5 E& ^5 Z1 ?/ Smysql_connect($server, $db_user);
& U2 }# Y& A  {2 L) N* }! Z+ t//add the timestamp from the user to the online list8 J6 Z5 S. y: }* ?1 E# S. @# a
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES8 j) Y3 w, G* V4 \2 A5 ^4 _
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
' ]* m7 d) R7 O, R; z9 b) Oif(!($insert)) {7 y, _/ H( i# m; G/ M# q) u$ ~' Z
print "Useronline Insert Failed > ";
% Y- h( m' X& b" L}: ~- ]8 y' G! ]8 n% c& C- u3 D
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.4 e. o6 l8 l. [2 x2 h
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
# L6 d0 A  n7 ~& n4 [5 pif(!($delete)) {5 Q/ n% R# I0 R" ]
print "Useronline Delete Failed > ";
, U' y  d) |; g}4 d! H. ?% p" c
//select the amount of people online, all uniques, which are online on THIS page
0 n4 j8 l4 F5 O* x9 s6 l  B5 C! ^$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
. l# u+ N- `7 S1 U2 Qif(!($result)) {# |$ c, A4 K" }) [5 @+ {
print "Useronline Select Error > ";
% _; c7 g3 v* G" j$ M2 _" p}
! u5 r. j  G' p//Count the number of rows = the number of people online
2 q' z& N+ C) }! i5 m$user = mysql_num_rows($result);" [( `3 E8 ^. u
//spit out the results; M' n; Z; y. j. ^! Z8 x1 h$ x
mysql_close();: L0 q! C9 s# y8 o5 A1 u  i
if($user == 1) {) r' c% B0 ~4 @1 d7 I9 a& _
print("1 user online\n");. ^( P- Y5 C) F, x) z  G
} else {
" I& R: [" V9 f% Oprint("$user users online\n");) g0 }) I# M5 L! q+ `! Y# R/ X2 A
}& a1 T4 b4 `- G; J
?>
& @7 Q" J1 U1 k- r( `6 [' x* w0 C
- r) A" G+ _% n! B( y) x以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
6 p( k9 _3 W# `3 G2 b' C时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。4 |' N' v/ C1 A* g. A: O5 Y7 A6 W
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。# T9 l/ [5 R+ D( w8 @! K
当然啦,这两款主机也是相当不错的。. D) O/ }' B. P% j, d
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年! e' j/ i$ i* g) O. [8 e
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
6 b$ m" I7 d7 l+ |5 S: z# u* W提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ # x3 K2 A9 G3 W! U( h$ [8 s* \# f
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55. ?8 s: z5 z- Y- q8 F, ]% b5 |
自己加QQ去问吧。

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