|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
) _( I1 @' _" R; L3 ?- t我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
" R+ F# m- L5 A; B首先我创建MYSQL数据库表。0 p ]$ M( \# ~& J: H7 \
CREATE TABLE tablename (
1 h' C( ~5 _% b2 @field type(max_length) DEFAULT 'default_value' (NOT) NULL
( X& S9 l# ]& G}可以使用的SQL语句。
) d |; z3 D% n( J, p( }% ICREATE TABLE useronline (
?, M, H1 c! G$ v, V7 y# Ftimestamp int(15) DEFAULT '0' NOT NULL,! x6 T) n! m& t
ip varchar(40) NOT NULL,3 a0 |+ W v: h5 Y
file varchar(100) NOT NULL,
3 ^" J2 |1 e% r1 D, WPRIMARY KEY (timestamp),6 K- N3 N f! } T x
KEY ip (ip),( m" r, |* J" Y8 C2 S5 H
KEY file (file)
# N! r! O% r5 p) {);下面我们是PHP脚本,首先我定义MYSQL的信息。$ C F7 y% f% I8 y* T
$server = "localhost"; //你的服务器
% W/ f0 Y+ F- V {( D$db_user = "root"; //你的mysql的用户名# n1 p0 Q5 d4 y& r! L: ^9 r9 O
$db_pass = "password"; //你的mysql的密码2 y6 \: H# B0 a) h
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
, V+ \/ l, k$ }) F9 m' W# U: Z$timeoutseconds = 300;取当前时间。4 U" }+ y5 D' r" o9 i' A
$timestamp = time();上面的完整代码:
0 \; u. Q8 \% g<?php: m% h& M3 `1 F6 B9 j
$server = "localhost"; //your server& S3 a& e2 t9 t4 s* k5 L, m
$db_user = "root"; //your mysql database username
/ R7 @+ k8 Q& p: w( N* a( e$db_pass = "password"; //your mysql database password if any2 _" ~$ k, Y; I3 N2 o5 H$ U
$database = "users"; //the db name6 T1 f% b' @- E1 `8 t* m& r
$timeoutseconds = 300;//timeoutseconds limit( ~! r: M: `9 ?& f5 x! x
//get the current time& h5 P" V" c: q: J! m+ W9 v
$timestamp = time();8 l8 O! i y9 c$ |
//calculate the lowest timestamp allowed
) z; |/ \: [' p% o- `$timeout = $timestamp-$timeoutseconds;9 F3 G7 x/ u% q: `
?>连接mysql
! o! J; N. z% S' R) O/ `mysql_connect('localhost', 'username', 'password');也允许使用变量形式。9 X f0 T7 M' X, E7 M9 c
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
; P! K/ q- Z4 l) v0 C) cmysql_connect($server, $db_user);查询数据库的代码:1 ?) S O8 Q: R9 M( ?' k
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
3 C' u& s! o% _# w1 T- l$insert = mysql_db_query($database, "INSERT INTO useronline VALUES- B1 b* i0 ?8 d
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
* q& f I% c, c6 u" y; z如果用户用错误信息的话,这样处理。
3 d+ N) @: A lif(!($insert)) {3 b1 b4 H) c$ d. t+ m
print "Useronline Insert Failed > ";% j( U" b) r9 m4 C) o
}然后实现当超过设置的时间就删除该用户记录。
5 D5 Z6 E: F* w$ W5 ]$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
* `: l# b8 y4 i* e3 u2 ~if(!($delete)) {
6 F( j/ {5 D8 Oprint "Useronline Delete Failed > ";
) B. b; E( T$ V}下面我们解决数据库中不同IP的问题
2 {% E0 u+ I" M( D7 E7 U$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
! }7 o9 g' N7 {/ Vmysql_num_rows(query);来统计用户,代码如下。4 m1 b$ o9 ] R# o, J; t2 Z
$user = mysql_num_rows($result);最后关闭数据库。 J ?& T) D' q; U# ~
mysql_close();显示在线的人数。
6 y. V# \7 E' a6 vif($user == 1) {
3 p1 M. h% P8 _print("1 user online\n");
: L% m& |( A) Y7 b; k* X} else {
! x- L& Z0 L/ c$ m4 {print("$user users online\n");) p% T9 N5 }2 n6 C( D- p, I# j ~$ w
}最终把上面代码写成一个PHP文件如下。+ S) G* D7 {7 A L6 X9 L9 v+ e
<?php t: y! |% b7 h9 P' J" ^
//Put your basic server info here$ g6 J9 o: ^1 G4 Z0 s v) r
$server = "localhost"; //normally localhost! y1 H" R4 W" F u* d5 U ~
$db_user = "root"; //your MySQL database username
! @( d8 G' n0 m7 Y3 h8 _$db_pass = "password"; //your MySQL database password
1 b5 a4 a5 A; y$database = "users";" r* z- J! g8 W; S& Y! \; r1 l& r
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
" x2 `+ Z# j/ p# A4 O// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last5 z X% w- T" n Z
// $timeoutseconds seconds)& N5 B0 v* [- f: R$ ], I$ }( A2 [9 a
//this is where PHP gets the time& Y. }( v& B% A1 z# `' E
$timestamp = time();
4 Z. `( X' j+ P$ \$ X! E7 G" b//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
! {( {4 T7 [# ^/ K$timeout = $timestamp-$timeoutseconds;* M/ ^* w1 O: @6 I' ^% c4 x
//connect to database) k9 F" u( Z) n6 }+ V" G
mysql_connect($server, $db_user);
! s4 C4 \- F* h) B//add the timestamp from the user to the online list* ^7 a5 R2 \; U- j9 W p
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES# G" D9 H& y( O, [
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");4 R! N) l6 g! f0 L* \3 ^5 f
if(!($insert)) {3 o6 X* Y( l! d( u
print "Useronline Insert Failed > ";/ f9 o' P( B ~: w( `% ^
}. B1 o+ ^3 [ C3 f) `
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds./ A" C! o# Y V. K% s. `+ \
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
1 M2 C |# J: C' ?/ U& Aif(!($delete)) {
; m5 B" a/ o X& lprint "Useronline Delete Failed > ";$ c0 G0 R$ j4 l4 U3 v( h
}
! C# }+ }) i2 a* Z4 F! X//select the amount of people online, all uniques, which are online on THIS page
1 ?' p& F; e2 W$ P$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
' A0 n B/ a, L6 X4 W( }# n" B, z) Wif(!($result)) {1 F3 t6 k8 [2 f# Y; M
print "Useronline Select Error > ";
4 C2 ~) k7 a; ?+ p3 X}. Z) t+ }6 I( m' Q
//Count the number of rows = the number of people online5 \: [4 C5 J0 i% B, h
$user = mysql_num_rows($result);
$ F1 v- C: F* l# ]) r//spit out the results+ h1 d6 j1 e/ _
mysql_close();# A# X, t z' Q
if($user == 1) {6 W5 @8 m4 P1 T8 C) D8 b# i+ I
print("1 user online\n");
; P: O6 B$ t8 V# O; G} else {" }3 V$ H% ^- r2 k n9 H$ l7 S& d& }
print("$user users online\n");# Z' b- p* U" A* ?% j0 M/ u; Y' J& R2 g
}9 i0 E" A3 t# f
?>
3 I( A, R9 e5 q) [2 h
. C2 g; l, f. U, Y9 |/ d6 A以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
# l5 X) y" J0 M3 N ~$ J) \0 L时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
: E( I6 t* r* k) r, V我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
& K: v8 U( x: p( f( f当然啦,这两款主机也是相当不错的。
2 S& ~4 B9 d2 C' P$ k( H智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
7 {% J+ B ^2 d' }& g e标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年! Y6 {8 a6 k# ^1 s4 t" \
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ : X, q( n+ a+ u
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55$ d# t+ \- b, v9 F
自己加QQ去问吧。 |
|