标题:
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
[打印本页]
作者:
lilcy88
时间:
2008-5-28 10:40
标题:
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
" P1 i4 x, c, V3 K( k( n0 @9 ?3 w. x: ]" g
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
& o& B& z" ]: `0 ^* \, i3 y, u
首先我创建MYSQL数据库表。
8 p7 b: ?3 U2 A. F# S! X* v. ~
CREATE TABLE tablename (
]; ?0 O8 j+ z& x
field type(max_length) DEFAULT 'default_value' (NOT) NULL
) g3 m& f! ]; J. P$ H @7 W9 o; B# l
}可以使用的SQL语句。
$ W2 n, i# f0 ? J, J
CREATE TABLE useronline (
* w& Q5 ~9 S, v7 f
timestamp int(15) DEFAULT '0' NOT NULL,
6 R( u8 ]( ^+ O) b6 L3 c- I4 p& I3 [
ip varchar(40) NOT NULL,
- L9 ]# a3 `1 y3 \; G
file varchar(100) NOT NULL,
* F% W. ?1 n5 i; [. | c
PRIMARY KEY (timestamp),
K1 n- {4 l) W) A
KEY ip (ip),
- k4 E& L& ?4 O% g) r
KEY file (file)
8 ~0 {" w7 W: {7 P: g2 @
);下面我们是PHP脚本,首先我定义MYSQL的信息。
. B; c' v. K) o- p P$ ?& G6 m
$server = "localhost"; //你的服务器
( ?- M8 H+ i# p6 q# B- z* z
$db_user = "root"; //你的mysql的用户名
: x1 R% V1 @* l+ ~% w
$db_pass = "password"; //你的mysql的密码
' k! {/ `8 l1 I3 K
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
7 \# W: O4 ?4 [1 K- f: |/ R" m
$timeoutseconds = 300;取当前时间。
4 t2 x" L; I! Q5 m3 l; L
$timestamp = time();上面的完整代码:
1 r4 J P/ b- T$ D9 b
<?php
6 k9 ~% o5 V- u9 O, d: o; j
$server = "localhost"; //your server
, l, T* F/ y1 ~& M5 f" b
$db_user = "root"; //your mysql database username
, F2 g: b5 u9 S/ z6 Q; ^/ e* p
$db_pass = "password"; //your mysql database password if any
: F$ [3 G3 F$ d& _) ^6 I; i0 y7 ]
$database = "users"; //the db name
" N5 ^) I, o O% S! y
$timeoutseconds = 300;//timeoutseconds limit
, Q: k4 h9 \5 b7 n; Z
//get the current time
9 v( a' H3 a( T& B6 |" s
$timestamp = time();
* c& y' @ l; F$ C9 c! Y( M- O6 _
//calculate the lowest timestamp allowed
3 ~# s% A. Z/ ?6 p' `: e% s
$timeout = $timestamp-$timeoutseconds;
$ p; v0 l& b/ G# j. i
?>连接mysql
9 e6 \! q8 I+ w
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
7 t3 P9 z. }/ s& Z5 Q
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
, e0 }/ Q) _9 ~
mysql_connect($server, $db_user);查询数据库的代码:
# U9 ^8 c% T8 J) H8 j
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
4 ]' X2 B1 h- @* f$ w" I% Y
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
/ E( B3 d$ F+ b$ y/ }
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
4 D' a2 m# G, ]1 C+ e9 S3 U2 y
如果用户用错误信息的话,这样处理。
; W1 w/ K) s' R* P, q& u( T
if(!($insert)) {
- ]* L, z; H7 U2 i1 U
print "Useronline Insert Failed > ";
3 b$ |9 H$ Y$ n
}然后实现当超过设置的时间就删除该用户记录。
- t) a1 w' G0 y0 C
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
" ` Z+ [4 x; g+ D$ |
if(!($delete)) {
% h2 P4 R: I6 O
print "Useronline Delete Failed > ";
5 }: ~$ U+ s1 I' M3 B5 D
}下面我们解决数据库中不同IP的问题
; ` d4 e1 p' l) m
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
4 W) {: w' R0 g
mysql_num_rows(query);来统计用户,代码如下。
; T5 \* g0 P ?: H2 ^& ^
$user = mysql_num_rows($result);最后关闭数据库。
Z1 |; j% L2 B& C$ F. W7 D
mysql_close();显示在线的人数。
% T. a$ [/ V ?
if($user == 1) {
/ E1 q9 v/ g, T( P( z) z
print("1 user online\n");
* b* l8 C0 q" O |- \$ p- h
} else {
* B0 Y; ~( h4 z+ V# J7 z9 O7 F. I
print("$user users online\n");
( J0 ^7 y# a: C, C
}最终把上面代码写成一个PHP文件如下。
& L0 {8 O/ v9 J& a5 n- Z; w
<?php
8 Y; F; c" P* E4 e
//Put your basic server info here
+ l' K+ k% j3 w$ W! K f% R
$server = "localhost"; //normally localhost
) T" ^/ i2 z2 I9 X$ G& g, D
$db_user = "root"; //your MySQL database username
% z, m2 A7 \/ T& j' n; b1 Z7 ?. V0 Q
$db_pass = "password"; //your MySQL database password
$ u- m- v" {. {" z
$database = "users";
" k* b: o5 r1 s3 U6 }) [4 O: i. Y
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
3 X0 a$ d$ L/ a: [3 q, ?
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
# o1 \- I: j3 j" B$ {" ?
// $timeoutseconds seconds)
$ X' L: b( C7 ~5 z
//this is where PHP gets the time
+ R, l( c( T3 m: O( F! [
$timestamp = time();
4 q& z+ z1 }- Q; Y
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
+ |( U0 N5 j( G2 q' Z9 o# @
$timeout = $timestamp-$timeoutseconds;
, s0 M" ]1 V, y M: x/ r8 K- Z
//connect to database
9 L4 z8 t; b7 ?# E' M0 f; g
mysql_connect($server, $db_user);
/ G( N% X7 G, R# [' J
//add the timestamp from the user to the online list
) u' H, f, ?! }2 `# o& p8 R
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
% n2 K, s, I5 m. X3 s
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
9 W1 F$ ?/ B7 _& F
if(!($insert)) {
+ U+ N6 q# I" ^1 l- \1 H) s& C
print "Useronline Insert Failed > ";
6 F$ n) Y, @) V4 O
}
: j5 V5 p7 u4 M+ L6 C; _
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
3 s$ j- ~2 Q" E
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
U9 j% R: Y$ ~# ]" N
if(!($delete)) {
( B: C. M0 j9 |' x5 y& j! z+ f
print "Useronline Delete Failed > ";
) K# f4 K3 u2 R6 o2 u+ l3 `* Y( z
}
" W- \ A! Z7 ~+ v+ y' V; Z* A3 l
//select the amount of people online, all uniques, which are online on THIS page
- \' Z7 I- `8 J, ]/ A1 s6 p
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
. z. ^ n2 s3 ~5 q2 I: j' T7 v
if(!($result)) {
1 ^# z* L/ g2 L/ K2 S
print "Useronline Select Error > ";
. N3 K6 p" M. P
}
' ], P `" v) ]$ a M- @
//Count the number of rows = the number of people online
3 b$ w; ^; ^( V. S- w
$user = mysql_num_rows($result);
1 M9 R7 E( }$ Y' _7 D7 y5 ~6 G# a
//spit out the results
$ f0 s9 i& Q/ U1 v* J' e# a
mysql_close();
' G2 W! d/ u% c7 x- ^& d7 e
if($user == 1) {
3 P6 I7 P& u% f! D; n6 T" K
print("1 user online\n");
5 N3 G; d6 l: w# Q
} else {
3 K4 f. ?0 e6 r* r5 q3 O2 K1 t
print("$user users online\n");
. R/ X& e2 y3 c: t2 |
}
" i- z5 O, ~( s7 ~4 T/ Q# t
?>
6 J' R7 B5 V4 u
# h/ B, J- L4 I" r6 R
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
! R, a8 W5 u; G" j( n
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
# w3 z0 @. c, |: A7 m/ `7 {2 i
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
# y8 I2 x7 N, x3 Q: T' g2 n7 z' t
当然啦,这两款主机也是相当不错的。
& e6 L. T' u7 |# A( x
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
9 q" |( g$ N. M2 z" J3 e! p& s
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
& U H" r" b6 ]4 `8 t
提供一下这个公司的联系方式:请见:
http://www.now.cn/vhost/
) |; T, b' p: k; g, M' a5 Z q
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话
http://www.now.cn/callcenter/call.net?LineName=55
, @ j8 f, x* ~* v
自己加QQ去问吧。
欢迎光临 捌玖网络工作室 (http://89w.org/)
Powered by Discuz! 7.2