Board logo

标题: 刚用PHP写了一个网站在线人数的程序,请大家进来指点下! [打印本页]

作者: lilcy88    时间: 2008-5-28 10:40     标题: 刚用PHP写了一个网站在线人数的程序,请大家进来指点下!

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
0 Q: h; L3 l  V4 \: Z  z我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。4 e3 b# N/ \7 r5 O- P
首先我创建MYSQL数据库表。% T" D1 T7 H! S( F% U9 j6 _
CREATE TABLE tablename (
8 z0 F! m; f1 Q: w2 I4 B" ?8 u1 jfield type(max_length) DEFAULT 'default_value' (NOT) NULL: i  i) O5 B  F( l. b, y3 }6 w
}可以使用的SQL语句。
& t( e1 G) O) Q3 E6 t1 y  I" iCREATE TABLE useronline (
0 `! C1 y! E0 y- U) r' ntimestamp int(15) DEFAULT '0' NOT NULL,. r, K; x: ^) a- L/ U% v( m
ip varchar(40) NOT NULL," H, i  J& c' X; h& s' Y
file varchar(100) NOT NULL,4 Y  g. N( z4 y! t7 E5 C3 u
PRIMARY KEY (timestamp),& N. ^6 ^+ T0 e  ], t& m; H
KEY ip (ip),
0 B7 ^% [6 O' t" C" E" sKEY file (file)
+ M$ G* _# ]% ?! @4 A);下面我们是PHP脚本,首先我定义MYSQL的信息。% V* H* V7 U( o6 T) S2 u
$server = "localhost"; //你的服务器
6 U) v! ?. G( }4 _' v/ e, a$db_user = "root"; //你的mysql的用户名6 k9 o( b  G* n6 d# T7 j  I; g
$db_pass = "password"; //你的mysql的密码
( O; F: ?& R$ l; U9 J$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)( s  t, G. M5 [2 N8 G
$timeoutseconds = 300;取当前时间。
1 L" y# Z* w+ B/ c$timestamp = time();上面的完整代码:8 O+ Q0 l5 J0 Q# }2 e' D7 C4 w
<?php% {7 n  i7 }, K+ F6 }
$server = "localhost"; //your server' J3 f. L4 {4 v! W: X. _
$db_user = "root"; //your mysql database username
9 i' ^! I4 w3 P4 z$db_pass = "password"; //your mysql database password if any: t6 w! b2 J3 q* p
$database = "users"; //the db name3 Y- P8 t, W( b4 D2 v, j2 U
$timeoutseconds = 300;//timeoutseconds limit' N4 U0 J8 g. T
//get the current time
( r5 g: H- C- x6 j% F7 u. [$timestamp = time();( u" {$ Z* z* ?" l4 E% `9 r
//calculate the lowest timestamp allowed
' }, A/ R' S7 x  w/ v# r$timeout = $timestamp-$timeoutseconds;" S& J) @5 G! Q6 f* I" |7 t, M  K
?>连接mysql8 {" j$ A- U: ?1 j
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。1 W/ Y. Y5 t; Z6 L- m* w
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接/ E7 s% R, p/ W% ?7 r
mysql_connect($server, $db_user);查询数据库的代码:
' _& _% `0 m4 Y- y9 U3 p2 tmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
* |8 K" K4 E6 o/ p% O6 b$insert = mysql_db_query($database, "INSERT INTO useronline VALUES" o9 m8 M( n; q$ ^' Z" _. E: ^' g
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");* k; p# l& m: b& f4 B: F2 _6 \$ R* [
如果用户用错误信息的话,这样处理。
* ^2 \! E6 S. e  p% Z% \4 hif(!($insert)) {$ |8 R4 E6 s; X7 [8 t: D
print "Useronline Insert Failed > ";
9 ^# N8 i& J, c}然后实现当超过设置的时间就删除该用户记录。7 l- F+ _' F% s8 i' d9 u& r
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
' Y$ I' u  p$ ^' h3 z) Zif(!($delete)) {6 a4 U& Z; ?8 J2 ]; N& k, K
print "Useronline Delete Failed > ";
9 s4 b! |6 {+ p: U: F& w}下面我们解决数据库中不同IP的问题
6 k7 u! V- o# u; H  K2 U$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
  _9 w; z& {6 _5 e6 `mysql_num_rows(query);来统计用户,代码如下。. _( }+ G7 Y; m0 c
$user = mysql_num_rows($result);最后关闭数据库。
# y" J  e2 E7 S+ W4 f- Amysql_close();显示在线的人数。) i$ V8 `7 C( i7 C/ e
if($user == 1) {8 O: t% i( y8 _) K+ Q- r
print("1 user online\n");: h8 }& P6 W5 {2 ]1 E3 z- i( J
} else {
: \( s* U( ?- m  Q8 mprint("$user users online\n");8 x+ A6 p" E8 |7 u! J( _( q
}最终把上面代码写成一个PHP文件如下。9 S" d" ]8 e: q1 a+ i" A
<?php
8 q' v* h0 P; N: f0 a3 f//Put your basic server info here
- z1 o) f5 z+ T$server = "localhost"; //normally localhost
4 p8 ]& y6 t1 M$db_user = "root"; //your MySQL database username; F  e2 o6 h9 D' C+ V) t, Z. |: P
$db_pass = "password"; //your MySQL database password
( G' P) ^2 Q# X5 n! r& F$database = "users";
5 a) M; d5 S# }: i$ a9 a$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are1 {# |  z" V, H, |% {! ~1 w
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last7 G# e9 X2 u+ }, G6 }$ m8 R. s' p" ^
// $timeoutseconds seconds)
# l" [+ ?/ w. ]  y//this is where PHP gets the time
9 U$ s3 B8 }9 D; c8 s* D. P$timestamp = time();0 ~3 U$ [$ X9 W- R3 P
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
& I. g- X+ d, U8 V$timeout = $timestamp-$timeoutseconds;
  ]! V5 m  K: D1 f//connect to database
; j8 I) m8 F) w. y+ B* Mmysql_connect($server, $db_user);6 b' U. F" n) ]0 R* i  w" v0 E
//add the timestamp from the user to the online list; }0 L" b( J: u' N( L' e. ]4 z
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
9 ?2 V) k" c4 q$ ]('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
" M- P" A$ H. Jif(!($insert)) {$ T/ L# b# f: U2 d7 U
print "Useronline Insert Failed > ";
% L9 m/ @" I  k2 a}
# D9 q5 n5 q% f//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
+ S" z5 U8 m, \! W$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
8 U- R4 P* \2 zif(!($delete)) {
: M7 a& u! V# Pprint "Useronline Delete Failed > ";
, ~8 P3 s7 j$ V9 d  k/ b}/ k% K; J$ D6 E8 Y) m
//select the amount of people online, all uniques, which are online on THIS page/ r2 w; i+ H6 V6 Y# O5 |" L
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
+ I- y' H6 q1 E4 [8 C8 h' }if(!($result)) {0 t9 y* k4 K5 Q6 j: h) n: ^
print "Useronline Select Error > ";, t  T) l. h3 X8 X3 ^: J+ V
}
; M, k6 C7 g4 y2 z//Count the number of rows = the number of people online
" {  B* g. h9 Q  v$user = mysql_num_rows($result);# i( h" a. y3 a& l# K
//spit out the results6 o( W+ t9 M# [4 M0 _: J0 m
mysql_close();! M5 g( L, A& s0 L2 Z% H! T- f
if($user == 1) {6 f9 Y. {- Z) R- i
print("1 user online\n");# M2 _5 F5 D; t8 x. A
} else {* J5 c2 ]. B6 E1 C+ [8 W# I' E! P
print("$user users online\n");1 \! x, d' }- c2 \4 r5 M/ \
}0 j( }2 C* Q1 N  x5 ?) i) ^3 f
?>
5 z- t1 b9 i8 }8 q" f& m& r' c4 n5 O. Z8 o
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
7 T- v  e6 S3 c3 U" |时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。! g, y. J1 g; e' F( d* d% p
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。3 i7 e. N" Z1 [1 R! I
当然啦,这两款主机也是相当不错的。
9 V; _1 [# n6 e智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
. L# t1 q: d" P! H6 y, K标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年2 l8 `! e- L  c! L: J+ }. i0 H
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ % f2 I8 M0 m: `5 z7 k- y7 ~/ B
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=551 E0 l1 A* o. `& ?' M
自己加QQ去问吧。




欢迎光临 捌玖网络工作室 (http://www.89w.org/) Powered by Discuz! 7.2