|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!/ X/ G; d& w7 K0 L0 e T% u2 f
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
* X7 D* I2 _. ]) P. M4 y8 g4 W首先我创建MYSQL数据库表。
! z5 ]- t6 `. i6 G5 z# ZCREATE TABLE tablename (! F) Y" ~$ M+ P5 ]' ^
field type(max_length) DEFAULT 'default_value' (NOT) NULL! l9 \# q. r0 N9 X) ]7 s1 f* m
}可以使用的SQL语句。
( ]; ? @: Z8 e5 b7 bCREATE TABLE useronline (& g, R& r, | X; K2 {
timestamp int(15) DEFAULT '0' NOT NULL,5 k) |# s1 r$ e: ^ p5 Z
ip varchar(40) NOT NULL,% A0 ?- M3 j" }; ~7 n
file varchar(100) NOT NULL,( B, W! R2 Q5 f [$ }( c" W
PRIMARY KEY (timestamp),
. b( P) k. i" ^/ N% w2 xKEY ip (ip),
/ ?% J7 K. E2 ~: A# y0 MKEY file (file)
6 k! c" K" a0 z' |);下面我们是PHP脚本,首先我定义MYSQL的信息。
6 j! V6 |; e1 }# w& O$server = "localhost"; //你的服务器; k! A# S; _% e1 O7 j
$db_user = "root"; //你的mysql的用户名
! }3 \( X. K A" Y$db_pass = "password"; //你的mysql的密码0 T- H: W& C4 v4 a
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)! ?( \" t, s: p3 g+ @+ i3 v
$timeoutseconds = 300;取当前时间。
. v3 A# Q0 K5 P% p$timestamp = time();上面的完整代码:* s5 P7 |! b; L0 p
<?php; W- O+ R. x0 ]
$server = "localhost"; //your server9 K4 s3 w1 C$ {9 A( |8 j5 b
$db_user = "root"; //your mysql database username; w- P, |& M( l4 G- h
$db_pass = "password"; //your mysql database password if any
$ J: v' R4 C* ?( g$database = "users"; //the db name
0 ?" e9 F% t& M( q; z. d. [$timeoutseconds = 300;//timeoutseconds limit
1 s& N7 j; j* {! g//get the current time/ V' C& D6 a6 j' z
$timestamp = time();
1 s* `& T$ z: f9 I. v% s//calculate the lowest timestamp allowed
/ y/ v X, w% r7 D$ K) d7 ^$timeout = $timestamp-$timeoutseconds;5 I& W4 |! d6 x* g* v% e/ C
?>连接mysql# z) {9 x6 G1 a2 [ Z7 b5 E/ ?
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。* }2 V2 g" p' u h
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
8 [6 I1 c2 b* i5 y' t7 hmysql_connect($server, $db_user);查询数据库的代码:: k$ p4 M) D& J8 u: b- f
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。0 V V' r2 I9 x$ q
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES7 t; Y0 a' v$ w2 s
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
9 }' ^2 p. n" K如果用户用错误信息的话,这样处理。
P$ E0 W, A8 Dif(!($insert)) {" E2 r6 m. M* h9 \( H- X0 j& X
print "Useronline Insert Failed > ";
/ n7 l! k$ Q* ?$ K% \}然后实现当超过设置的时间就删除该用户记录。3 |: B) o) H# J& b% E
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。/ k8 }6 W6 }. t; w% D
if(!($delete)) {: O8 H3 j, H7 j9 A, ~. }. M, L
print "Useronline Delete Failed > ";
' e! }; R# o3 {; @' r9 F+ s9 S}下面我们解决数据库中不同IP的问题0 |9 B; Q$ ` V8 |1 q* D
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
8 b8 E' r" Y* E, g& Nmysql_num_rows(query);来统计用户,代码如下。
. e- ]( a" Y1 G. J4 f D- f$user = mysql_num_rows($result);最后关闭数据库。
1 N- v! G9 {/ f" t1 ?1 p5 q4 ^mysql_close();显示在线的人数。6 `* ]8 Z, D9 ^9 |* Z( X
if($user == 1) {
! F& Y, f! v$ C5 _4 {+ w, Q% S |print("1 user online\n");
% y' v& H2 `; X5 C} else {( t+ j- r% u. U4 X( M. p
print("$user users online\n");* q0 {3 b! ?' o% Q1 |, b" U
}最终把上面代码写成一个PHP文件如下。
/ @9 G0 N; ]: F' ~/ P/ |<?php$ m6 c& a; @* V5 I8 j, f" a
//Put your basic server info here) e/ a1 b; ?' t* Y7 O) i2 \
$server = "localhost"; //normally localhost
" E, T5 D; B6 R3 d$db_user = "root"; //your MySQL database username
9 l* @$ N2 _7 a l: k$db_pass = "password"; //your MySQL database password" c: \# U- A& Q* K
$database = "users";8 ]" r K% m k9 v
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
- C/ G- b( P5 W8 r// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last( T) D" [% U# n) r' T7 n1 ^
// $timeoutseconds seconds)
O/ }1 I, T3 }0 N) p ~: P+ B//this is where PHP gets the time
, ? L1 l8 y/ J: q6 H9 C: k7 A7 p9 K$timestamp = time();
7 x1 a+ a3 Z" R0 J//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
$ O0 T- ~3 Y; ]; C$timeout = $timestamp-$timeoutseconds;
' N- W/ i$ z% i9 F& B6 m, E7 R, a//connect to database
' z0 ^7 l6 O1 r/ Z: _1 f+ T4 ?. Q5 Q, Qmysql_connect($server, $db_user);; k% f7 e7 V# v9 I( \8 w. j
//add the timestamp from the user to the online list8 G4 u8 _& K+ z* w% p
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES3 O# x# M, X& m$ C, ]- [8 o- V
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
1 I: l8 r. l5 u) ~if(!($insert)) {
+ v5 B% C9 e2 g- j& @* n$ Sprint "Useronline Insert Failed > ";
7 S( G& O1 K/ x6 l) u; }}
B0 a7 ^. z" X+ Y7 b//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.2 h3 J1 @2 o; @/ [" }
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");1 Y6 p# D9 ^4 U' V1 c5 m
if(!($delete)) {8 r3 {& Z9 o7 ]' o% U& u) f
print "Useronline Delete Failed > ";0 c* I# I- w5 ?$ p# f( m
}
2 e: Z6 H/ |% e( G. c//select the amount of people online, all uniques, which are online on THIS page! W9 D% R! g7 z1 \& |% \$ P
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");6 L8 }' x% k6 J; [
if(!($result)) {
/ _$ b2 r$ Z! x) j: O3 b- S& oprint "Useronline Select Error > ";
$ ^ W7 V: o7 S! v. R& Q}
) q3 L0 k# x: x6 k& `$ r9 w# x2 I//Count the number of rows = the number of people online. G7 v4 n4 x! A2 L
$user = mysql_num_rows($result);* D% E: m8 X ^+ D( [& U
//spit out the results
& a+ B' W8 k# n/ K0 \: D+ r lmysql_close();2 w1 z! ?5 Y6 X9 m: Q8 R
if($user == 1) {
- w" |1 D3 M$ x; k/ s! M& [print("1 user online\n");6 D5 f3 u( M3 S
} else {
7 O9 D! q1 G% b9 F/ _ r6 @print("$user users online\n");. F% Y! g( V, ^/ F
}
' }3 ]: O: D# w# _3 V* \0 \9 B?>4 {- k2 `* H+ |! N+ `) }2 u2 F H

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