标题:
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
[打印本页]
作者:
lilcy88
时间:
2008-5-28 10:40
标题:
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
0 Q: h; L3 l V4 \: Z z
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
4 e3 b# N/ \7 r5 O- P
首先我创建MYSQL数据库表。
% T" D1 T7 H! S( F% U9 j6 _
CREATE TABLE tablename (
8 z0 F! m; f1 Q: w2 I4 B" ?8 u1 j
field type(max_length) DEFAULT 'default_value' (NOT) NULL
: i i) O5 B F( l. b, y3 }6 w
}可以使用的SQL语句。
& t( e1 G) O) Q3 E6 t1 y I" i
CREATE TABLE useronline (
0 `! C1 y! E0 y- U) r' n
timestamp int(15) DEFAULT '0' NOT NULL,
. r, K; x: ^) a- L/ U% v( m
ip varchar(40) NOT NULL,
" H, i J& c' X; h& s' Y
file varchar(100) NOT NULL,
4 Y g. N( z4 y! t7 E5 C3 u
PRIMARY KEY (timestamp),
& N. ^6 ^+ T0 e ], t& m; H
KEY ip (ip),
0 B7 ^% [6 O' t" C" E" s
KEY file (file)
+ M$ G* _# ]% ?! @4 A
);下面我们是PHP脚本,首先我定义MYSQL的信息。
% V* H* V7 U( o6 T) S2 u
$server = "localhost"; //你的服务器
6 U) v! ?. G( }4 _' v/ e, a
$db_user = "root"; //你的mysql的用户名
6 k9 o( b G* n6 d# T7 j I; g
$db_pass = "password"; //你的mysql的密码
( O; F: ?& R$ l; U9 J
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
( s t, G. M5 [2 N8 G
$timeoutseconds = 300;取当前时间。
1 L" y# Z* w+ B/ c
$timestamp = time();上面的完整代码:
8 O+ Q0 l5 J0 Q# }2 e' D7 C4 w
<?php
% {7 n i7 }, K+ F6 }
$server = "localhost"; //your server
' J3 f. L4 {4 v! W: X. _
$db_user = "root"; //your mysql database username
9 i' ^! I4 w3 P4 z
$db_pass = "password"; //your mysql database password if any
: t6 w! b2 J3 q* p
$database = "users"; //the db name
3 Y- P8 t, W( b4 D2 v, j2 U
$timeoutseconds = 300;//timeoutseconds limit
' N4 U0 J8 g. T
//get the current time
( r5 g: H- C- x6 j% F7 u. [
$timestamp = time();
( u" {$ Z* z* ?" l4 E% `9 r
//calculate the lowest timestamp allowed
' }, A/ R' S7 x w/ v# r
$timeout = $timestamp-$timeoutseconds;
" S& J) @5 G! Q6 f* I" |7 t, M K
?>连接mysql
8 {" j$ A- U: ?1 j
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
1 W/ Y. Y5 t; Z6 L- m* w
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
/ E7 s% R, p/ W% ?7 r
mysql_connect($server, $db_user);查询数据库的代码:
' _& _% `0 m4 Y- y9 U3 p2 t
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
* |8 K" K4 E6 o/ p% O6 b
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
" o9 m8 M( n; q$ ^' Z" _. E: ^' g
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
* k; p# l& m: b& f4 B: F2 _6 \$ R* [
如果用户用错误信息的话,这样处理。
* ^2 \! E6 S. e p% Z% \4 h
if(!($insert)) {
$ |8 R4 E6 s; X7 [8 t: D
print "Useronline Insert Failed > ";
9 ^# N8 i& J, c
}然后实现当超过设置的时间就删除该用户记录。
7 l- F+ _' F% s8 i' d9 u& r
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
' Y$ I' u p$ ^' h3 z) Z
if(!($delete)) {
6 a4 U& Z; ?8 J2 ]; N& k, K
print "Useronline Delete Failed > ";
9 s4 b! |6 {+ p: U: F& w
}下面我们解决数据库中不同IP的问题
6 k7 u! V- o# u; H K2 U
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
_9 w; z& {6 _5 e6 `
mysql_num_rows(query);来统计用户,代码如下。
. _( }+ G7 Y; m0 c
$user = mysql_num_rows($result);最后关闭数据库。
# y" J e2 E7 S+ W4 f- A
mysql_close();显示在线的人数。
) i$ V8 `7 C( i7 C/ e
if($user == 1) {
8 O: t% i( y8 _) K+ Q- r
print("1 user online\n");
: h8 }& P6 W5 {2 ]1 E3 z- i( J
} else {
: \( s* U( ?- m Q8 m
print("$user users online\n");
8 x+ A6 p" E8 |7 u! J( _( q
}最终把上面代码写成一个PHP文件如下。
9 S" d" ]8 e: q1 a+ i" A
<?php
8 q' v* h0 P; N: f0 a3 f
//Put your basic server info here
- z1 o) f5 z+ T
$server = "localhost"; //normally localhost
4 p8 ]& y6 t1 M
$db_user = "root"; //your MySQL database username
; F e2 o6 h9 D' C+ V) t, Z. |: P
$db_pass = "password"; //your MySQL database password
( G' P) ^2 Q# X5 n! r& F
$database = "users";
5 a) M; d5 S# }: i$ a9 a
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
1 {# | z" V, H, |% {! ~1 w
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
7 G# e9 X2 u+ }, G6 }$ m8 R. s' p" ^
// $timeoutseconds seconds)
# l" [+ ?/ w. ] y
//this is where PHP gets the time
9 U$ s3 B8 }9 D; c8 s* D. P
$timestamp = time();
0 ~3 U$ [$ X9 W- R3 P
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
& I. g- X+ d, U8 V
$timeout = $timestamp-$timeoutseconds;
]! V5 m K: D1 f
//connect to database
; j8 I) m8 F) w. y+ B* M
mysql_connect($server, $db_user);
6 b' U. F" n) ]0 R* i w" v0 E
//add the timestamp from the user to the online list
; }0 L" b( J: u' N( L' e. ]4 z
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
9 ?2 V) k" c4 q$ ]
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
" M- P" A$ H. J
if(!($insert)) {
$ T/ L# b# f: U2 d7 U
print "Useronline Insert Failed > ";
% L9 m/ @" I k2 a
}
# D9 q5 n5 q% f
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
+ S" z5 U8 m, \! W
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
8 U- R4 P* \2 z
if(!($delete)) {
: M7 a& u! V# P
print "Useronline Delete Failed > ";
, ~8 P3 s7 j$ V9 d k/ b
}
/ k% K; J$ D6 E8 Y) m
//select the amount of people online, all uniques, which are online on THIS page
/ r2 w; i+ H6 V6 Y# O5 |" L
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
+ I- y' H6 q1 E4 [8 C8 h' }
if(!($result)) {
0 t9 y* k4 K5 Q6 j: h) n: ^
print "Useronline Select Error > ";
, t T) l. h3 X8 X3 ^: J+ V
}
; M, k6 C7 g4 y2 z
//Count the number of rows = the number of people online
" { B* g. h9 Q v
$user = mysql_num_rows($result);
# i( h" a. y3 a& l# K
//spit out the results
6 o( W+ t9 M# [4 M0 _: J0 m
mysql_close();
! M5 g( L, A& s0 L2 Z% H! T- f
if($user == 1) {
6 f9 Y. {- Z) R- i
print("1 user online\n");
# M2 _5 F5 D; t8 x. A
} else {
* J5 c2 ]. B6 E1 C+ [8 W# I' E! P
print("$user users online\n");
1 \! x, d' }- c2 \4 r5 M/ \
}
0 j( }2 C* Q1 N x5 ?) i) ^3 f
?>
5 z- t1 b9 i8 }8 q" f
& m& r' c4 n5 O. Z8 o
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
7 T- v e6 S3 c3 U" |
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
! g, y. J1 g; e' F( d* d% p
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
3 i7 e. N" Z1 [1 R! I
当然啦,这两款主机也是相当不错的。
9 V; _1 [# n6 e
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
. L# t1 q: d" P! H6 y, K
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
2 l8 `! e- L c! L: J+ }. i0 H
提供一下这个公司的联系方式:请见:
http://www.now.cn/vhost/
% f2 I8 M0 m: `5 z7 k- y7 ~/ B
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话
http://www.now.cn/callcenter/call.net?LineName=55
1 E0 l1 A* o. `& ?' M
自己加QQ去问吧。
欢迎光临 捌玖网络工作室 (http://www.89w.org/)
Powered by Discuz! 7.2