
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
# E9 g' }+ V& c7 Q我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
0 ^) _; T2 m- i+ H o首先我创建MYSQL数据库表。/ B4 z6 A: P0 C% Y# {0 e) ~
CREATE TABLE tablename (
. n W7 C7 J9 d+ gfield type(max_length) DEFAULT 'default_value' (NOT) NULL
8 W% C+ n1 _7 \}可以使用的SQL语句。' h/ v% p+ l+ U: {/ W1 S) _. c
CREATE TABLE useronline (
3 o+ X: b+ Q" O) L" N" ?- H/ Jtimestamp int(15) DEFAULT '0' NOT NULL,* I; g2 h4 i: G! t% [
ip varchar(40) NOT NULL,. Z, [: f6 N% t4 E: v# b/ [
file varchar(100) NOT NULL,& S& t8 x" I4 _2 m4 l
PRIMARY KEY (timestamp),
" U( x" o% F p4 f) @' GKEY ip (ip),: m7 |5 D7 r, ?; z( Z* `2 o
KEY file (file)
" J5 W& A9 T! x; z' t( x);下面我们是PHP脚本,首先我定义MYSQL的信息。+ ~' c( r( q' Q5 \
$server = "localhost"; //你的服务器
/ ~, h- x, [: k, Z; s; ~3 m$db_user = "root"; //你的mysql的用户名
. V$ N* W2 b, \; e" O$db_pass = "password"; //你的mysql的密码
! O$ r6 u' |3 Q( T* f" k$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)2 X, D0 B% `9 ~' s$ J) w
$timeoutseconds = 300;取当前时间。
$ @* G- k/ u+ H2 t# F$timestamp = time();上面的完整代码:
+ G1 }' O* h6 Y: I<?php
. X8 V+ E5 z' q: Z$server = "localhost"; //your server t! w- f% `" X2 r+ O' M
$db_user = "root"; //your mysql database username
3 B4 W. F9 x8 y$ _$ a$db_pass = "password"; //your mysql database password if any
6 W/ F" R N; s/ @" h) r( f$database = "users"; //the db name* L6 T% g! ]- H) i
$timeoutseconds = 300;//timeoutseconds limit
, d0 }! T' I( p$ u" i# N2 J2 `//get the current time
! Z+ e+ J/ S8 i5 @4 s' m0 B' y- E+ X$timestamp = time();
* e' Y9 w8 l4 }, Y& t//calculate the lowest timestamp allowed4 Z% I& c- x5 A
$timeout = $timestamp-$timeoutseconds;0 D2 w6 w4 O% n+ @( h
?>连接mysql$ v. ~' a3 p. c$ c& q
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
& h. i$ a$ K5 k& V2 G5 Nmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接$ c% B' n& q1 F, g
mysql_connect($server, $db_user);查询数据库的代码:
% g* Q2 J( z H; d# p8 D) w9 N7 Amysql_db_query('database', 'query');我们只要有访客就要增加一条记录。" b2 L3 ?; O5 i, g: d6 I; k
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES. Z9 y& [$ a' y( ~8 e: E0 ^8 b
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");9 l+ W' n* E: h, K- q, S. S5 {
如果用户用错误信息的话,这样处理。* _- c( K- _, c2 q7 V4 ~
if(!($insert)) {
5 L r/ ~7 D6 K) E, c+ R) rprint "Useronline Insert Failed > ";: p% E. r: p, d4 c- |7 Y
}然后实现当超过设置的时间就删除该用户记录。
# c( K5 [' Z4 \+ e+ Z$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。+ ?: S. M8 z# J* P2 a7 X1 q
if(!($delete)) {
5 K! D. b. K) X5 c, dprint "Useronline Delete Failed > ";% j0 Z$ N. w" O$ u' M
}下面我们解决数据库中不同IP的问题; e3 U3 X5 n6 v1 B4 Z" F
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用2 u6 ]" Z- v! w7 ~
mysql_num_rows(query);来统计用户,代码如下。
6 d u8 S( m' A' c# ?* _$user = mysql_num_rows($result);最后关闭数据库。
8 f1 C. y/ x$ ^ i2 Gmysql_close();显示在线的人数。+ | [5 U$ s3 W
if($user == 1) {0 y w5 ]; ^' a7 x; [
print("1 user online\n");$ l, S& v: o' g$ t6 a
} else {
0 |' e7 Q) A" Mprint("$user users online\n");
8 v. _6 c( m( S: B8 x# M$ A}最终把上面代码写成一个PHP文件如下。8 ]( }( F! ~; }6 H j
<?php R' {2 u1 [. n. j1 J
//Put your basic server info here8 p7 O5 w5 g) q
$server = "localhost"; //normally localhost3 Z. h+ D8 ]9 b! F
$db_user = "root"; //your MySQL database username
2 o) t) K) u% ^3 E0 e4 z$db_pass = "password"; //your MySQL database password% ~7 H' n7 o5 k ^$ Y1 y- c
$database = "users";4 P/ d1 ]1 d$ k3 o3 u
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are" x) h$ |/ C d9 J- K* [' L4 \
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last0 F: C3 O: ^' k* O4 O; k; ~. z+ i5 f
// $timeoutseconds seconds)* o8 b8 u `4 W3 i% h) K% z$ }
//this is where PHP gets the time( z( M0 G. Z+ K" k0 l( u% |
$timestamp = time();$ f2 \, ^2 T+ ]' M( {
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed: Y: g* M' D- T9 `6 Q7 v3 `
$timeout = $timestamp-$timeoutseconds;. `( H4 ^7 `5 _) c3 p; {& f4 b( V
//connect to database, y4 V- c3 ]; h& W4 ^2 M+ ~) T
mysql_connect($server, $db_user);/ ?1 S' e" r& G% u
//add the timestamp from the user to the online list( P9 [- p. z" y6 }+ D) [
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
. Q v) T, X2 n( x: X: Z('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
! X" d6 o* |5 m. U9 k3 C2 N. Qif(!($insert)) {8 d2 q9 R4 k7 m
print "Useronline Insert Failed > ";/ I) b$ @ U7 i% y
}
7 Q0 ?6 I6 W1 @7 ~) T* {//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.5 Z9 H" K: {1 f! c
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
! {" |. o* y7 w; R, tif(!($delete)) {: g3 J' \% E$ G5 |. K
print "Useronline Delete Failed > ";( Y2 P" m7 a% t7 ]* |$ B% m3 l
}9 e& K) `2 w# x
//select the amount of people online, all uniques, which are online on THIS page2 B4 v8 I3 ~" ^3 P! f
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
* J6 p& c/ F2 G5 |3 o2 {if(!($result)) {
/ g6 o4 y" ?+ fprint "Useronline Select Error > ";
% r2 l: I! k' a& `}5 M7 D, t( w2 ^
//Count the number of rows = the number of people online. v+ m0 d, R; Q5 B9 w
$user = mysql_num_rows($result);) u$ d! F. r! ^4 \- h6 }9 E
//spit out the results
1 {" n+ E& ^) g. pmysql_close();) W; l$ o0 ?4 e, y
if($user == 1) {& D6 J! f5 L1 F2 l& W
print("1 user online\n");1 a3 r4 n8 a( G }4 k" [2 D
} else {: m( S% y+ r3 E
print("$user users online\n");3 O7 |/ C8 E! d( Z- l7 N% C
}
/ P6 m. w0 c ~( M# H% E?># Z( ?1 w1 ~3 M! Z$ H* ~

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