|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
4 Y, R! {$ z, q. W, e3 N我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。- a0 W/ b+ b( @% m+ y; E
首先我创建MYSQL数据库表。
5 g! `8 g @: [' a. T- qCREATE TABLE tablename (; E8 } E" ~( x/ }
field type(max_length) DEFAULT 'default_value' (NOT) NULL1 y0 l: y0 k& p4 m" A# X
}可以使用的SQL语句。& V4 P9 s$ O+ `
CREATE TABLE useronline (
- x2 {# X- z8 x8 T7 _" ntimestamp int(15) DEFAULT '0' NOT NULL,
& L5 C) ~5 h3 U' v! Cip varchar(40) NOT NULL,. T7 d" A; Z" w/ T2 l
file varchar(100) NOT NULL,
( C. a" Y8 G' @- i# ^& ]PRIMARY KEY (timestamp),
/ u' T" v0 C) ]. I- NKEY ip (ip),
: q& F# Q1 y ~ d( K7 [KEY file (file)
! X( c8 i4 M# f$ s);下面我们是PHP脚本,首先我定义MYSQL的信息。
- ^+ Q9 b$ r9 W; O) ~. t* ^$server = "localhost"; //你的服务器/ i* }: Y+ g" N& G4 Y/ r
$db_user = "root"; //你的mysql的用户名& H$ ~6 Q; m$ [7 `5 Y) R
$db_pass = "password"; //你的mysql的密码
, I# \3 `! ^: Y$ w& L5 W$database = "users"; //表的名字设置统计的时间(多少秒内在线人数) l/ n. P2 b# s
$timeoutseconds = 300;取当前时间。' s" x- b) F1 j" w: D9 M- m
$timestamp = time();上面的完整代码:) e) |8 i2 A3 W$ j! J" d4 ~$ R
<?php/ m, u! C; i) ?3 f/ G: l% u9 e) j
$server = "localhost"; //your server. U. ^, T, ^) G- ]
$db_user = "root"; //your mysql database username/ z. e" Y- I6 {. D" e+ b/ D. n
$db_pass = "password"; //your mysql database password if any: D7 E9 D: C( z5 {
$database = "users"; //the db name
7 v8 p0 b" q0 g- E* ]6 M$timeoutseconds = 300;//timeoutseconds limit! f8 d6 Y/ h9 r* f, W* [
//get the current time! m" @, ?( e( i8 W# w0 u! |9 l3 \
$timestamp = time();
: V+ {! X- c* d" _, v//calculate the lowest timestamp allowed- i6 @+ {' L" _, `0 b7 e6 P* f- n
$timeout = $timestamp-$timeoutseconds;
3 m, S1 A5 `7 A! @?>连接mysql
2 x2 u& ~" _# p0 r8 o* {# x& {mysql_connect('localhost', 'username', 'password');也允许使用变量形式。, |) T I$ A# c4 M
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
" s+ \ {) S4 _! F# T* u3 Emysql_connect($server, $db_user);查询数据库的代码:. {+ P2 ?) N# A, p9 ]7 E2 f5 v/ ~" \
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
4 c! v0 T* n) v/ |- ~$insert = mysql_db_query($database, "INSERT INTO useronline VALUES# `$ Z, u) `3 S( t
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");+ _- M) X6 k/ q6 }* e: f0 d- p
如果用户用错误信息的话,这样处理。
3 R8 y% j5 q6 B& H9 I/ ^! \if(!($insert)) {. c v( d9 y, K- O
print "Useronline Insert Failed > ";
0 P2 {! W8 k% q W: W8 J V; C4 B! I}然后实现当超过设置的时间就删除该用户记录。
9 p. l( a1 l! V: Y' b, ^: x' e9 i) r$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。, Y4 b4 \" U9 I" L! h9 [8 ~
if(!($delete)) {
8 r+ b' i: U& T2 }# D5 A0 d# Lprint "Useronline Delete Failed > ";. m2 W0 }+ T A8 p* F/ q
}下面我们解决数据库中不同IP的问题( ^: a4 L0 l+ A8 t. }- n) M% u
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
- b2 z$ X. q9 n& E, imysql_num_rows(query);来统计用户,代码如下。, U9 q2 \' u& T. p
$user = mysql_num_rows($result);最后关闭数据库。
& t) w8 E& R1 i: P) Q5 Qmysql_close();显示在线的人数。7 G! _8 @& b0 c, f( E& d" w
if($user == 1) {' K6 U4 w$ X; u4 a( V& D% i& k
print("1 user online\n");
0 p! A3 y5 \4 S" q5 V% a} else {
- ^! u1 {% R2 y- tprint("$user users online\n");
% k. J% f2 M& z! a$ f) L}最终把上面代码写成一个PHP文件如下。
& ?3 a$ c9 D( Z. B# H<?php
3 p$ b" E* g5 K0 d8 }8 G/ K//Put your basic server info here* O4 @: [# X) x: u- C I. d
$server = "localhost"; //normally localhost
% T3 L9 Q3 U9 V$db_user = "root"; //your MySQL database username
" B" p4 Y; U) ]- R- I, _" B* L$db_pass = "password"; //your MySQL database password
4 U" P& y0 O. \( F5 G7 f$database = "users";7 c# r9 {( S' m T7 I& O& o1 ]
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are9 c$ L5 x+ Q8 O( b4 l
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last! J1 _) ^4 y: l ?. g& j
// $timeoutseconds seconds)
+ ^8 q/ J! |* o% c//this is where PHP gets the time; |+ t; n5 X0 C g+ f
$timestamp = time();4 z( C. r: e( |
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed6 A; }3 h0 X8 w" m$ P. R
$timeout = $timestamp-$timeoutseconds;0 U; l9 A# s1 Z4 V) A. a
//connect to database
& R4 P, ]+ @5 X5 F0 Pmysql_connect($server, $db_user);
3 ?# c- ]( Z+ O//add the timestamp from the user to the online list/ P$ A7 x( c- u! K; m( c4 x
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES% i3 t; j2 h7 ?1 T1 L
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
+ ^+ D) c# x1 aif(!($insert)) {" V& d2 Q; g3 f! B
print "Useronline Insert Failed > ";* d: Y R; k* c
}* m; t3 n! x. F) W
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.5 |( L/ ^. W( z5 Z, K$ p
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");* B7 X) b/ [7 l( m/ ]* n. M$ f
if(!($delete)) {" p1 n- P8 T+ V3 l3 R% \- o
print "Useronline Delete Failed > ";
/ I+ U. z7 y( o3 J! O4 C: ^$ \}# V/ _( q- K& x0 r4 x8 v, M0 S
//select the amount of people online, all uniques, which are online on THIS page
8 Z$ ?9 M$ j4 U3 J/ \ l3 u$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
' o2 h; U( Z/ ]; Nif(!($result)) {
; o9 h! p/ F* w" F9 Zprint "Useronline Select Error > ";
8 K# H2 C0 \: B0 C2 P2 u}( c; U/ q& {+ |$ E
//Count the number of rows = the number of people online- r a7 e( a F0 d9 C
$user = mysql_num_rows($result); g! A) P$ V" b$ \4 [
//spit out the results
5 P( C- W+ K$ H" M$ }mysql_close();
9 m' V/ x5 B% X1 W% r/ eif($user == 1) {' [, M6 s f% @
print("1 user online\n");
' T& o1 r3 t3 Z, p} else {( b! m* ^* K6 p- z! O
print("$user users online\n");$ Z9 q, Y9 Q/ H3 k
}5 |, p0 b r+ T2 X! F- `1 x. L. } o$ d
?>
2 ]# S* | a& h- r1 Q0 J
+ S) S6 e# Q3 {以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
8 k9 ~5 ?% i& v: n' ]4 O: ]时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
- _1 s) L- q2 f2 ]我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。, D3 c5 @# C! e0 v
当然啦,这两款主机也是相当不错的。- W u5 Q2 F5 l
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
+ Q2 q# h# a/ {, L标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年5 I! I+ s. k4 g* j' Z
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
6 L$ Z/ ^9 o8 d* D1 @0 S' }空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
& ~' }+ ^' D* ^ h' W& Z自己加QQ去问吧。 |
|