
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!, j! H8 `. i$ C/ O+ P
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
/ t; ~3 w5 I2 z& o7 w( C首先我创建MYSQL数据库表。
. A0 Q M) ~( A- q7 X+ h3 OCREATE TABLE tablename (2 P! ~. N# {: }
field type(max_length) DEFAULT 'default_value' (NOT) NULL
( a [% ]% B: {8 y}可以使用的SQL语句。& H, a1 t" ~4 x1 Y# P5 Y
CREATE TABLE useronline (; p0 ^# {4 x+ d4 |( J
timestamp int(15) DEFAULT '0' NOT NULL,
9 M g9 K- p: }, @8 T$ Z9 L8 s- oip varchar(40) NOT NULL,
. I' j% T% v9 o" |8 ufile varchar(100) NOT NULL,* h2 q; t l- {- ^8 a3 U& M
PRIMARY KEY (timestamp),& w9 K4 a# o9 i- \, g7 k) e
KEY ip (ip),6 U% `! z3 _1 X& Y0 y
KEY file (file)4 ^- F1 c8 R5 O0 O
);下面我们是PHP脚本,首先我定义MYSQL的信息。1 \# m3 k/ D8 K# q
$server = "localhost"; //你的服务器, }' Q# v1 v! R+ m* Y" e5 L1 ]
$db_user = "root"; //你的mysql的用户名% H9 o [; T# G. d ?4 |. {
$db_pass = "password"; //你的mysql的密码
' I! }/ F7 P! Z+ z$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)2 O" R- I. n: m/ T. U
$timeoutseconds = 300;取当前时间。
, ]% p6 a' E4 j) u$timestamp = time();上面的完整代码:
1 H" c$ Z3 p( M/ O<?php
- l! y/ u: p3 A4 S5 E; I$server = "localhost"; //your server& N7 K; I9 C4 ~+ |2 V8 F9 D
$db_user = "root"; //your mysql database username
# t* r. C1 g/ k6 ? A$db_pass = "password"; //your mysql database password if any
) s, I( d1 c* q! N* w7 d2 n: f$database = "users"; //the db name3 K7 T( i7 A- {, H. l. S) L. w3 K
$timeoutseconds = 300;//timeoutseconds limit
* e+ z' P6 |6 ^% M R//get the current time9 J3 w1 e9 t6 Q; H- P/ b
$timestamp = time();
- Q# f1 } n% m# y2 p, ?( i//calculate the lowest timestamp allowed
O* o; W: c! J6 W! @$timeout = $timestamp-$timeoutseconds;
4 q U/ b( Q8 R4 }" b% _0 n?>连接mysql8 o9 r! W6 L- E2 t4 p2 D
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
4 } w9 J: o z4 }mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
4 s4 w* D: S+ u' ]2 Amysql_connect($server, $db_user);查询数据库的代码:+ i4 l; _% I: Q" N
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
% Z$ _. B9 |3 Q4 b6 X$insert = mysql_db_query($database, "INSERT INTO useronline VALUES& m( x! |$ s7 v: A$ z
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
6 ~9 X6 d; }9 M! L: F, R/ ~如果用户用错误信息的话,这样处理。
( A( W$ Y) g8 o+ tif(!($insert)) {
3 M4 N& \+ I; D2 {& ?8 Dprint "Useronline Insert Failed > ";, K6 k6 w( B8 {6 A4 j: g5 W
}然后实现当超过设置的时间就删除该用户记录。
5 n! M3 A C9 s$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
& I! P9 j! D+ x6 ~if(!($delete)) {
% r4 u" {) x# b& iprint "Useronline Delete Failed > ";4 _4 }9 f# Z( U$ {5 J
}下面我们解决数据库中不同IP的问题3 }& c D# J1 P3 N8 }2 X
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用. ~ p1 B! V1 f3 m7 A" z& x
mysql_num_rows(query);来统计用户,代码如下。
' t& G v0 G& C& }( u$user = mysql_num_rows($result);最后关闭数据库。& C5 c i" s$ y
mysql_close();显示在线的人数。6 Z1 l2 d; T; z# {* z% z, X
if($user == 1) {3 w. s7 E, N& q! x
print("1 user online\n");$ _9 d9 O/ i) h ^, C
} else {& m8 N+ h1 r& C$ d$ _: r4 X2 b
print("$user users online\n");* M# z1 I3 t7 E" g& O1 k
}最终把上面代码写成一个PHP文件如下。9 i @3 R, e+ r* @: N0 H; d
<?php4 Y, x) c- i; Z5 h7 i7 G
//Put your basic server info here
0 \8 Z2 o$ B, @. D; o, m$server = "localhost"; //normally localhost( [5 O* \5 K/ a$ G& X0 n% Z
$db_user = "root"; //your MySQL database username: d ? {: s9 o" M6 N I
$db_pass = "password"; //your MySQL database password
8 n6 r/ {4 [) c c$ U7 p$database = "users";3 v, q) t' P& c
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are* q0 V4 f5 l' D M+ b
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last3 i. M' U9 a" i1 ?
// $timeoutseconds seconds)' f3 W P& g8 X# y9 N2 m
//this is where PHP gets the time
6 G: _; G) w. ?! s$timestamp = time();* p6 W- X! T; z2 U
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed9 h' \0 S; c5 H9 G, x, @9 o
$timeout = $timestamp-$timeoutseconds;
# f: G2 q+ E( r8 k; u H8 J//connect to database ?/ a' H x3 Z7 Z6 k
mysql_connect($server, $db_user);% Q# ~! i9 |, |& t* Y
//add the timestamp from the user to the online list
# t9 P/ _. _( @; ^$insert = mysql_db_query($database, "INSERT INTO useronline VALUES* _ ?: @4 l3 ]* f2 b
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
+ ^; ]! u' _ F2 b1 Vif(!($insert)) {% ]0 _8 Q" {# P5 x
print "Useronline Insert Failed > ";
E/ Y& }5 A2 U}
. [0 [' m/ h9 H# J* q% l5 u//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.9 }2 V0 G! B/ p6 x0 @' P
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
( x2 U& V: D0 ~' w8 u" V" oif(!($delete)) {$ _9 O8 C( H" ^
print "Useronline Delete Failed > "; E* X1 @# k1 Q7 [$ _9 O
}
/ U6 e2 ~% y" j; m3 R* o//select the amount of people online, all uniques, which are online on THIS page
% ~& }% Z) Q0 M% K$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");; I3 u5 _$ B a( B/ E& \& b$ a
if(!($result)) {+ d* o! \7 e& ?0 w8 w
print "Useronline Select Error > ";
+ p& x2 s) y+ A. V% R7 C} F; Y- D7 {, A1 {) }; G% }
//Count the number of rows = the number of people online
7 Y* \% j W2 z- L$user = mysql_num_rows($result);
/ V3 P {8 o% H. ~, d//spit out the results, k5 O; ^8 q1 s* V& _/ m& K& Z
mysql_close();6 H8 W8 ?4 N- `
if($user == 1) {
% u: s, X4 p8 l/ D6 m2 ~+ oprint("1 user online\n");- y8 j5 T6 T) v U4 G
} else {+ m' a0 E. g$ _( u: _
print("$user users online\n");! {9 S2 x6 f; W4 v2 n2 i7 y t
}
% n4 |! n( d* y?>
: p7 _- R1 W9 ?* F @! Q0 c- p " n V) f" B: n1 P
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。" o6 W2 F) |2 [+ F4 j# e0 t
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。1 A* M ?' A- }3 B2 A# B
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。; t0 j' a2 ~5 S! ] n) ^/ W
当然啦,这两款主机也是相当不错的。2 D$ g' U0 i0 o: u7 D: N) ]7 F* O
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年- A: g0 v( a% Z4 p8 F9 q
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年4 O$ C) n6 k+ Z) C) [4 I' a
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
: T5 f3 z {7 X( I. a0 b8 p. E空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55; y2 O! g0 S; K/ W3 O7 ~
自己加QQ去问吧。 |
|