标题:
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
[打印本页]
作者:
lilcy88
时间:
2008-5-28 10:40
标题:
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
6 p1 @; A% }- ~
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
" Z) f" N7 `6 y" d7 Q
首先我创建MYSQL数据库表。
3 V- n* W! R9 @" i' |3 I7 s8 ^
CREATE TABLE tablename (
* _( y3 v! Z, c+ N9 ?& h; [
field type(max_length) DEFAULT 'default_value' (NOT) NULL
4 W2 ~8 Q/ i) y/ e7 G
}可以使用的SQL语句。
1 W! \8 d- s% {
CREATE TABLE useronline (
+ p, ]% B6 i4 \: |# I
timestamp int(15) DEFAULT '0' NOT NULL,
5 u5 x; `6 R& w( D
ip varchar(40) NOT NULL,
: D; A# @3 a! o7 m p: V
file varchar(100) NOT NULL,
& w9 ?! S% ]. [$ A# x+ c/ ]# K# z9 ]
PRIMARY KEY (timestamp),
7 C8 Y+ _ _. ] L3 A6 ~( f/ b9 Y# |" L
KEY ip (ip),
1 C, s) t5 y( p3 B2 C* B& J- V0 s
KEY file (file)
* ^+ V6 D5 j3 C" s6 u7 h
);下面我们是PHP脚本,首先我定义MYSQL的信息。
6 C, v; k, p, j9 t/ T
$server = "localhost"; //你的服务器
* b: M+ t- t1 m3 Q9 H
$db_user = "root"; //你的mysql的用户名
2 B) _7 D2 |+ f& \1 r
$db_pass = "password"; //你的mysql的密码
6 N$ ^: h. r; ~ B! y- S C2 ?; w: X
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
! a) c# Q e6 Z) _$ F
$timeoutseconds = 300;取当前时间。
8 b5 S. k" z: A4 K
$timestamp = time();上面的完整代码:
9 o9 a( ^8 N0 Z1 F
<?php
. b2 ~, Q. \$ n+ e2 m/ o7 |4 l6 _7 z0 @
$server = "localhost"; //your server
: ?0 |0 G; N5 O, i4 v" r5 v
$db_user = "root"; //your mysql database username
1 t7 d: f7 s6 y
$db_pass = "password"; //your mysql database password if any
& s! E2 @, q) G( S1 h
$database = "users"; //the db name
* }! Y3 a% N0 }! Z9 l9 V! y
$timeoutseconds = 300;//timeoutseconds limit
& d' d. {; c: \$ f0 G: J, d
//get the current time
) m+ i. I) [) y
$timestamp = time();
: I" a. L Z8 ^5 P
//calculate the lowest timestamp allowed
# y# f. d$ m' E
$timeout = $timestamp-$timeoutseconds;
- k4 f0 j$ W. y! G# y6 c% K& [ L+ k
?>连接mysql
' a w( |- e( ~+ [: n
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
$ ?6 z5 L. Q7 m; i
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
; b9 t# P1 N6 u% I4 `3 u; R
mysql_connect($server, $db_user);查询数据库的代码:
0 ]/ u2 l/ i1 t' N ~1 b
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
' h; }: L+ R+ ?' q: K4 b( ~2 c
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
% f# r% C* l. u# g- e
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
* `# R$ {/ W" v. d
如果用户用错误信息的话,这样处理。
9 \3 W- h5 t6 R) |1 R9 j$ e' K, H6 O
if(!($insert)) {
0 ^& d8 ^ m! i2 J
print "Useronline Insert Failed > ";
$ |+ {; Y* V3 N
}然后实现当超过设置的时间就删除该用户记录。
* L2 A- @8 {% U3 t9 U3 ] a% f1 y9 L
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
1 B; T6 L; b# {+ a) h+ ]# L
if(!($delete)) {
4 S% }, u2 ?! L+ H. \* R
print "Useronline Delete Failed > ";
: P& r. J( ?0 ?5 p8 Z
}下面我们解决数据库中不同IP的问题
. o2 Q+ O1 }0 r) U
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
8 _( b# [ `7 F# q2 e" `; g
mysql_num_rows(query);来统计用户,代码如下。
& O# L [4 }7 q* ^" ~# m# w
$user = mysql_num_rows($result);最后关闭数据库。
6 b4 L" T: v/ N- l& G9 ?" J/ T
mysql_close();显示在线的人数。
) {1 C$ v! c5 B# [
if($user == 1) {
# f/ m0 p4 b) q5 k% }6 H4 H
print("1 user online\n");
; z: p4 I0 g! v( Y4 E6 V
} else {
. Q+ v' x; m" g7 e4 ?5 D- X9 h5 g
print("$user users online\n");
& u+ G" }% j6 j0 z0 O' |
}最终把上面代码写成一个PHP文件如下。
, h* Z& A. E) k7 R
<?php
( S8 Z5 l) @8 z. Q. q
//Put your basic server info here
# x w! Y2 C, S2 k% T9 c( U0 J
$server = "localhost"; //normally localhost
( P& A6 W- {; s+ M
$db_user = "root"; //your MySQL database username
/ {# {3 v* _/ D
$db_pass = "password"; //your MySQL database password
$ c# a. p* T/ s$ {" `% [9 n
$database = "users";
$ k* b4 ~7 V: T( ^) o
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
, @3 g# Y ^& `
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
+ I0 [' w+ N0 U! q/ c0 x
// $timeoutseconds seconds)
! F: W! w% V/ A+ B: T6 q: J% \' e
//this is where PHP gets the time
' u# a7 h- m& w3 `: t1 ^% d
$timestamp = time();
% k. U/ k5 f5 k: q6 i. ]( V7 y5 d% U
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
; X" L6 E4 } S& S
$timeout = $timestamp-$timeoutseconds;
9 v5 r# k% B: C
//connect to database
5 ]9 J+ g4 `6 u* _. W# f( F" K/ j
mysql_connect($server, $db_user);
/ U" S8 \7 s4 `4 F# N; }( i
//add the timestamp from the user to the online list
2 c& b d% X4 k/ U: z
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
$ t( v* a5 k1 K
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
& b( @& X5 E% Q+ E
if(!($insert)) {
& l2 w( u8 i7 @0 ]
print "Useronline Insert Failed > ";
& w0 l% W) o9 W' G; T
}
5 O) D# f$ |. | X4 ?" `
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
& L9 b6 [) D& \, G1 h
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
7 s5 y& k: y4 W4 ]' R- b, }- w# k5 b9 G2 N A
if(!($delete)) {
6 X8 \. `' c) B9 ]) W' r3 p
print "Useronline Delete Failed > ";
! m" F m# ?. \
}
: F1 u4 ~, s8 d( m: T% g( U' R
//select the amount of people online, all uniques, which are online on THIS page
) ^8 D% q- J7 K
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
, \: _( [! j, U
if(!($result)) {
- ^" v: S7 y$ k4 |: r% t
print "Useronline Select Error > ";
6 y! }0 J/ s. H+ i# W" i' }! H
}
) p/ ?: Y3 |9 ?
//Count the number of rows = the number of people online
; D1 ~7 g2 v, x7 O) G# Z) o" ~
$user = mysql_num_rows($result);
; n; c/ H4 I% L k
//spit out the results
$ K# p& u3 ^4 c9 Q, Y7 ?
mysql_close();
2 F3 T1 M$ Q- w8 Y$ S3 Q8 @
if($user == 1) {
7 {+ S; \" v& F7 d. O e
print("1 user online\n");
3 N$ ^9 E' p. N4 s& _6 P* F6 v( M
} else {
9 S0 P8 K" R& _' @, Y
print("$user users online\n");
7 @. T( Y4 J! u# |( a
}
/ q# T$ N& U* w& d
?>
$ U9 v9 o, [$ f) q
6 L4 a/ z! J9 x0 e/ R. {# S
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
+ J; o) i' v. J& D7 ]0 n8 W
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
! N' _ i# o6 L9 b) y; A1 p" j" P& M
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
# T: v+ C, S8 ?. p' |
当然啦,这两款主机也是相当不错的。
1 h) d, i: w# E+ S' n
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
" D9 ?/ `9 v. R; h! o
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
1 P3 _/ c& m8 ]; I! o* A
提供一下这个公司的联系方式:请见:
http://www.now.cn/vhost/
5 a) F1 v/ a& g6 Q: Z( M' R0 a
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话
http://www.now.cn/callcenter/call.net?LineName=55
; T# i. u2 r; ]- F- d
自己加QQ去问吧。
欢迎光临 捌玖网络工作室 (http://www.89w.org/)
Powered by Discuz! 7.2