
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!. `, ]6 @5 V. a, X& Q# k' W% l
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。( o. U8 m# ]1 M1 I8 j
首先我创建MYSQL数据库表。+ q& |0 A7 p! ?6 j: v V
CREATE TABLE tablename (
' @- B# ?# A3 R9 B: k. gfield type(max_length) DEFAULT 'default_value' (NOT) NULL( D2 H) s: {; f% W2 _
}可以使用的SQL语句。# Q8 o# j. a0 R5 q1 V
CREATE TABLE useronline (' H7 q% k4 a' y1 E& X3 I
timestamp int(15) DEFAULT '0' NOT NULL,
+ k: J6 _: r" M; }ip varchar(40) NOT NULL,, I) F! @. O6 `1 S
file varchar(100) NOT NULL,
' d% H: l7 r7 @! w0 [PRIMARY KEY (timestamp),
V" ~2 {5 V% }8 OKEY ip (ip),: E9 A5 p6 ^ S8 Y
KEY file (file)
1 Z8 K1 n1 {6 b7 M);下面我们是PHP脚本,首先我定义MYSQL的信息。
% k c8 k4 w- }+ i- {5 W' e$ d$server = "localhost"; //你的服务器
/ b0 I# m% J2 }' Q. g; b$db_user = "root"; //你的mysql的用户名5 }: Y, F- C: B% D: p0 U5 e* D
$db_pass = "password"; //你的mysql的密码
. t+ Z L2 J: C( B+ ^4 _2 F$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
. _% c/ V+ w: H/ n# h! n$timeoutseconds = 300;取当前时间。
7 I V, V% Q7 K$timestamp = time();上面的完整代码:
1 L. H3 Q6 M. b9 [2 D<?php
! m, E7 W" u5 a, J( S: U$server = "localhost"; //your server" \6 {; w: u3 P
$db_user = "root"; //your mysql database username& c$ S6 j8 s0 {4 q
$db_pass = "password"; //your mysql database password if any
: W( F. a6 _; O1 q1 |6 H$database = "users"; //the db name; P: x3 u$ q# e0 A* Y: V( o
$timeoutseconds = 300;//timeoutseconds limit1 D8 r; c* ~1 A# B5 t
//get the current time
8 _! T; }4 L; a! H$timestamp = time();# g* d1 @" W/ t/ L
//calculate the lowest timestamp allowed
, Z2 b. T# w J! c" a+ G: }% J+ ?$timeout = $timestamp-$timeoutseconds;
! x; T r7 `5 ~?>连接mysql
$ u$ `) V9 v5 \4 |# dmysql_connect('localhost', 'username', 'password');也允许使用变量形式。7 V/ p7 C* t v
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接( l! y. L$ H. o0 h, N1 P& D- g8 M
mysql_connect($server, $db_user);查询数据库的代码:
/ R% F- a( A2 `mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。1 @7 Z) t1 \# l5 V
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES$ b; }9 G/ \, ^' y0 a8 T6 T4 J3 J3 `( \( j
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");" j- x" f& K" G; n" H: {. G+ ^1 n
如果用户用错误信息的话,这样处理。
K) h. P# l* t) iif(!($insert)) { m$ o- L2 g& E( `& ~( A) e- g
print "Useronline Insert Failed > ";
: [3 X+ ~) z& D}然后实现当超过设置的时间就删除该用户记录。
0 d; E; o0 |& t, a$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。( ^" a* `; ^1 J4 k) B
if(!($delete)) {$ I8 q8 G, g4 U, X) o! l
print "Useronline Delete Failed > ";
! P! B3 [, } ~) f}下面我们解决数据库中不同IP的问题- Z/ D1 C. H. c0 c: g3 o
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用; ?7 v/ U0 N8 C* ]0 d2 A
mysql_num_rows(query);来统计用户,代码如下。2 w: D8 a' y) ~8 }: b
$user = mysql_num_rows($result);最后关闭数据库。& L4 S7 k7 V# ]" z: T5 L2 z$ Q9 X
mysql_close();显示在线的人数。2 Q5 m: z0 S6 n0 x2 Z8 _
if($user == 1) {
4 B. H F7 D- H+ m! {; hprint("1 user online\n");
) j' C/ ^9 E8 z8 W} else {
7 E5 H7 z( `& n# \3 U2 ]print("$user users online\n");
2 q4 \( X/ O6 Q x# m. i, u}最终把上面代码写成一个PHP文件如下。; G( y& n7 \, n. L# n9 D+ X$ m
<?php' Y% z3 \+ t1 T2 p! Q4 y
//Put your basic server info here- `, { w7 s6 r
$server = "localhost"; //normally localhost$ F7 b' L/ g# I; X' T G1 E
$db_user = "root"; //your MySQL database username
K1 f7 D! X3 R2 s8 W$db_pass = "password"; //your MySQL database password
7 F2 \ v' H" I* I/ j$database = "users";. ~; @. [) k g; n
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
9 @+ h0 E( j( M2 `// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
* u: F4 @& _0 K// $timeoutseconds seconds)- W: s. ^; f" f+ `* k
//this is where PHP gets the time: h1 X) `' P w; J2 Z7 h7 c
$timestamp = time();8 p& X3 \/ x2 |7 u, [% p n% b
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed* Q1 k5 S% w+ O$ S4 V: u
$timeout = $timestamp-$timeoutseconds;# C8 @" A7 ^3 ~0 y
//connect to database" k8 I# k* }) y2 `7 v6 T9 Y4 p5 G; v
mysql_connect($server, $db_user);# T& w$ a' p( R! S# c: |* O
//add the timestamp from the user to the online list
$ l5 n1 h* B4 N" A; Y$insert = mysql_db_query($database, "INSERT INTO useronline VALUES6 L- m% D* I. H o z! m! _1 m
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");1 v& i2 Y1 ~8 q% P, o# O% q3 c* T
if(!($insert)) {/ F4 |7 X9 u: w, R0 u# S( Y
print "Useronline Insert Failed > ";
W" L5 r$ _* P8 ^8 p, b/ b}( A D7 e+ s# B9 h
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.# F8 M" t3 o3 H" U, A
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
' E" H4 C" x" n7 |if(!($delete)) {
' H, j J6 }1 [/ h E+ Vprint "Useronline Delete Failed > ";& n% c# X; `+ f# x5 {9 a7 {
}
+ S2 ^0 T9 T' ]0 `; F: A//select the amount of people online, all uniques, which are online on THIS page Z$ R! E/ g# ?+ D$ a
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
# h- o/ J! }3 o. P& A0 Eif(!($result)) {
! v# z J6 t4 W6 x) F/ G2 C- S, vprint "Useronline Select Error > ";& D! B, c5 e" E2 R0 n* D7 [, x
}2 r: r9 T' e9 G3 P
//Count the number of rows = the number of people online/ R! h/ N4 \0 I, S- C& P# g8 M) f
$user = mysql_num_rows($result);
7 X' T, f5 Z' n" _& Q8 U//spit out the results8 }, V+ S# _- F( U/ d8 O" v
mysql_close();: @) \3 @# q$ S5 Z) A; V0 F. g/ K1 ?
if($user == 1) {* S' \( y# _+ r. B+ v
print("1 user online\n");' z4 S- }3 @% ~ A5 Y
} else {! }2 {9 `6 c& {+ ]
print("$user users online\n");2 A4 N' h/ c: S) r! ?
}) ^+ z8 h% @( Z- r0 v8 T9 p
?>
* E# b6 H6 j4 I7 c+ i/ v2 A 7 H! y9 o* @- d# a" L
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
9 \3 h( A1 D, |% B- l9 b时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。6 a0 N! a- T0 w0 Z/ M. N9 i$ g- K; p
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
5 M' Y% B% _3 a+ Z) [2 r/ ?( `7 D当然啦,这两款主机也是相当不错的。
, y6 r$ d2 z- L {6 _7 c智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
: y9 [- I/ m6 n' q( t标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年, W! F4 m( y/ K- m2 `: d: r
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ , l; h0 [5 Q" L6 F9 G+ |
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55* P$ e' V0 `4 g: D; I- {+ ^
自己加QQ去问吧。 |
|