|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!- Y) @# q; s0 X! m/ B' C
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
& Y0 i: h! v2 o5 c首先我创建MYSQL数据库表。
! E0 M0 W; U1 HCREATE TABLE tablename (/ x5 J1 V. h4 ]- R c1 T
field type(max_length) DEFAULT 'default_value' (NOT) NULL
; G7 ]+ z4 [7 x, [. }* ~' @}可以使用的SQL语句。
0 d6 ?" z& V6 m- z5 dCREATE TABLE useronline (
0 E# K# x$ }- _6 ftimestamp int(15) DEFAULT '0' NOT NULL,5 z1 l/ W& e! l# w* @
ip varchar(40) NOT NULL,
- S$ \/ P' W/ u3 u& F( u5 @file varchar(100) NOT NULL,
% Z. ?( T2 i" sPRIMARY KEY (timestamp),
1 i! _+ J+ B: n$ T6 b& {. jKEY ip (ip),! B7 R/ B `; N9 ^
KEY file (file)6 @; k' k, c( g9 w6 _& H n
);下面我们是PHP脚本,首先我定义MYSQL的信息。
( l# o' H7 g1 p1 N+ L$server = "localhost"; //你的服务器
0 _* h8 w6 q6 P5 L0 q* R9 ~$db_user = "root"; //你的mysql的用户名4 T& @9 o9 F) e: R
$db_pass = "password"; //你的mysql的密码0 V# W% I' h |
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数); f" |! p5 [" ?( o6 t" a
$timeoutseconds = 300;取当前时间。
! ~& f* R% r* x, E# R# v$timestamp = time();上面的完整代码:$ P1 X9 f& j v4 ?) v0 E
<?php0 e+ k3 Y# k; g6 J2 P
$server = "localhost"; //your server
7 e& ~) L5 z7 y# B1 O4 T$db_user = "root"; //your mysql database username3 d) z; p+ _6 F1 [
$db_pass = "password"; //your mysql database password if any
: n" e% k/ d" N. p/ P3 ^$database = "users"; //the db name
, ]% r/ V/ B0 n' w% b1 h9 |" @" H$timeoutseconds = 300;//timeoutseconds limit E q- r0 {5 U }- {6 b4 O
//get the current time& K9 W# S- O9 E8 O3 \5 u
$timestamp = time();
6 |$ U$ g" b& C' W+ B6 i//calculate the lowest timestamp allowed
& F6 @6 K" F/ @$timeout = $timestamp-$timeoutseconds;
$ W( ~7 S! g+ x3 \: C) v?>连接mysql
4 M. w, n5 x& d1 N" Y3 Jmysql_connect('localhost', 'username', 'password');也允许使用变量形式。; ?+ k9 D2 l1 X
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接0 f' B7 T% {- o j* _
mysql_connect($server, $db_user);查询数据库的代码:
0 _* b4 U$ ^3 k, tmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。 P; o1 H# R; a6 f9 l$ ^
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES% Q/ Q' }) L8 J
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
% f' }3 M3 s1 L: }: r如果用户用错误信息的话,这样处理。& B5 Q$ W W8 L' M4 j) v3 L3 H
if(!($insert)) {
C) X: Z2 o2 y3 bprint "Useronline Insert Failed > ";1 L6 n/ ]4 D* }; v. n) a
}然后实现当超过设置的时间就删除该用户记录。
! a( Y2 E2 e( s) m$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。$ y) W+ b5 R; D# k% t4 h
if(!($delete)) {- p1 K) z( g. U: l
print "Useronline Delete Failed > ";" l0 K ^6 \+ ], D# h
}下面我们解决数据库中不同IP的问题' M7 ^8 s! F. Z9 s7 o
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
w0 G1 [5 R! N6 ^/ @! \mysql_num_rows(query);来统计用户,代码如下。
9 d: K/ p6 B& k$user = mysql_num_rows($result);最后关闭数据库。
3 u+ F" k3 [8 O% W5 X1 R" kmysql_close();显示在线的人数。
3 B, a" b2 Y- L2 J% a: E! Qif($user == 1) {
! B7 F! F" m: Rprint("1 user online\n");% o, ^4 n6 s; o& _3 M
} else {: l$ l* _5 j2 p' _8 ~+ d7 M
print("$user users online\n");1 |6 v7 Q* Y6 W, n4 d: b) A7 [
}最终把上面代码写成一个PHP文件如下。, k/ p" M0 m( y2 w: ]8 g2 \
<?php9 P* T0 f7 j7 W( w
//Put your basic server info here
8 |" q3 b' L$ A$server = "localhost"; //normally localhost) B" L1 p6 K4 G" u% |0 J7 i
$db_user = "root"; //your MySQL database username
& ^6 A" E6 q7 c/ G$db_pass = "password"; //your MySQL database password
; V6 O6 y+ ^4 R; \4 a$database = "users";
" L4 M) b5 C9 B5 N! W4 p: p" I$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
- h! \! _6 P0 C! n9 q+ j// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last3 x! g4 ]+ H0 |7 ]7 U, n( F) q! r2 r
// $timeoutseconds seconds)
- M \1 X5 g6 v! E+ V- ~//this is where PHP gets the time
5 ~4 s2 F4 F2 a$timestamp = time();
2 Y- U% a' M- W4 {% n//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
0 u+ o6 y0 ~& u+ p% t$ K$timeout = $timestamp-$timeoutseconds;/ O+ d/ H( s" Y
//connect to database
2 K9 v/ `* s% b0 i* tmysql_connect($server, $db_user);
1 B3 R( \3 w5 i/ ^0 D: k/ M6 p% `% u//add the timestamp from the user to the online list
* O* \& h& m( p, Q$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
+ g' e/ @8 j5 \ R) j- r9 L# w('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");- Y7 ~$ Q; h9 n. ^: x, H# v& B% ]
if(!($insert)) {) R4 g4 z }8 m& D* L. \2 L H
print "Useronline Insert Failed > ";
# ?1 T, f \9 F" R5 Y B o}( h1 p# g' u3 b9 I$ x
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.+ V$ Y0 h$ u: R4 N; v5 Q& o$ e
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
- N; j A/ c; e% T* lif(!($delete)) {
. T; o, W3 _9 L2 Sprint "Useronline Delete Failed > ";
- J2 r/ t$ W3 y' G% j}
+ m# K; z( S e) _0 {//select the amount of people online, all uniques, which are online on THIS page+ a3 [4 _& \) l& B4 H
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
7 c/ ^6 {( o% u0 o6 wif(!($result)) {6 p% G! G0 p: h
print "Useronline Select Error > ";
9 L- Q6 W) n. @, Y& g}
" S* l F; D3 _$ G; _8 o! y//Count the number of rows = the number of people online9 g" Y4 A0 r$ n
$user = mysql_num_rows($result);
7 O9 j) D8 ?% O2 a& M5 D1 w//spit out the results
" i# e L8 [ d8 Kmysql_close();6 d9 d% i: N! L7 q% U9 d( C
if($user == 1) {& x' @9 T6 l* w6 N
print("1 user online\n");( |/ l- k T d* B' H e4 S
} else {5 x( ]+ n" f/ [" O
print("$user users online\n");! g- o( L% A" h6 `+ N6 D" V" ~
}
1 t! u+ f0 ^+ \, q9 M) c?>
2 w7 P3 N; V; c+ [* S+ h & s; \ H- C$ D8 y
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
: P' t3 J' r# u9 L时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。* r* T+ U9 }. t& e: a% k
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
1 [0 i" |: K3 a- X2 j当然啦,这两款主机也是相当不错的。
6 W# @0 S3 _8 H, W智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年6 U _; ^( W' M2 M
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
- Y; p. w" D/ V( g提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
, \+ l0 Y ]1 x- n0 J空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55% r; w; x+ G- k" u. V
自己加QQ去问吧。 |
|