|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!6 G5 h; a" ^1 i
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
! m2 ]- |. `9 X9 R4 X首先我创建MYSQL数据库表。8 w$ W. t, {) ^8 ~. P7 d6 ^
CREATE TABLE tablename (
) r& Q7 e* x: u8 f9 n) r/ _9 Jfield type(max_length) DEFAULT 'default_value' (NOT) NULL
- t% x1 l; P- i}可以使用的SQL语句。6 r- p3 C0 R! }. q4 s- p
CREATE TABLE useronline (# @% R% l1 `+ G+ R/ d' z
timestamp int(15) DEFAULT '0' NOT NULL,
4 W7 K% i7 W- j5 Z: P6 ~ Hip varchar(40) NOT NULL,* e, U+ {& y! ~1 u4 }
file varchar(100) NOT NULL,5 U! h* f ^9 k" c6 M, _
PRIMARY KEY (timestamp),
3 m8 ?5 }, A' TKEY ip (ip)," P- S, e. M% |$ f
KEY file (file)2 Z# I1 [5 A: Z6 p
);下面我们是PHP脚本,首先我定义MYSQL的信息。
8 Z- Y0 M7 d' I7 t$server = "localhost"; //你的服务器
' R6 X( j/ s% x3 n9 X( D A8 X& `$db_user = "root"; //你的mysql的用户名% e- h& _$ \8 @; o* _7 A
$db_pass = "password"; //你的mysql的密码; c. Q* n9 ]- |, T+ f
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)& \9 m' e a9 e+ M- a
$timeoutseconds = 300;取当前时间。
- g V- c2 Q. K. v, f7 Y% z$timestamp = time();上面的完整代码:, T) t2 g2 U* a; G* Y9 s! d
<?php2 J4 g# I; ^0 X0 S; g: m
$server = "localhost"; //your server
1 S. T% e% O* i. T* }8 z- S$db_user = "root"; //your mysql database username
! W& x. y3 J0 w; k+ V; e0 m$db_pass = "password"; //your mysql database password if any
* {4 ]! }7 F4 S5 B; N# {. h$database = "users"; //the db name. ^: V8 s" }0 t( I
$timeoutseconds = 300;//timeoutseconds limit
% `4 c8 Z$ B7 I* Q//get the current time7 D6 G; y0 A' N. w' m
$timestamp = time();3 |# i# ^8 s: C: O7 s! Z4 K
//calculate the lowest timestamp allowed: r' _! `! Q! z* o
$timeout = $timestamp-$timeoutseconds;
) G9 I% j( h Y: e1 N9 ]! O: v?>连接mysql$ }% T1 h: ]$ Z! T0 Y
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
7 d6 S; p; n5 x6 qmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
' A5 G3 p3 }0 V M# A0 x: @4 V3 {mysql_connect($server, $db_user);查询数据库的代码:1 [+ P' Z5 }9 r9 h. k% p8 X! j
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
. v1 X+ m6 p8 V" Y4 M$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
" u. K# i. M, v& u0 J" e3 [: f( S('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
- V! G W3 ^$ a3 ~& N如果用户用错误信息的话,这样处理。( e' W* D1 `5 u$ `% j
if(!($insert)) {* X1 A( U! { {' @- Z: h
print "Useronline Insert Failed > ";' |1 B% U" _& n( [/ D
}然后实现当超过设置的时间就删除该用户记录。4 u% u. g2 V. F+ b6 j* D" J
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。" _1 T( h& c/ n1 c2 y; E
if(!($delete)) {
. } R" @( N; kprint "Useronline Delete Failed > ";5 B% k! x+ a; j; R5 W: K, j
}下面我们解决数据库中不同IP的问题& _" l# h. u* c7 ?
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
) k' M' M: h5 B' y3 qmysql_num_rows(query);来统计用户,代码如下。
' f$ i2 T0 O f; t" n, z$user = mysql_num_rows($result);最后关闭数据库。7 o9 h9 M; b! Q& K9 V4 h
mysql_close();显示在线的人数。1 C% w c- |+ Y" ?# d
if($user == 1) {
2 o$ D5 q; j2 k8 @) nprint("1 user online\n");
& e5 t- u( h7 Z) \& y- p} else {- F5 U# r4 Q d. [& Z
print("$user users online\n");
; D k- F, | N* O}最终把上面代码写成一个PHP文件如下。8 l. c# w0 P5 n5 U0 z
<?php
2 J$ d& E3 u4 a, f5 i//Put your basic server info here
9 Q' {0 W% ~. t4 W) T$server = "localhost"; //normally localhost
8 b2 E6 E5 k% _' y1 k$db_user = "root"; //your MySQL database username2 s0 e8 A8 N- P) T; y- _) T
$db_pass = "password"; //your MySQL database password3 ]1 Z! \4 r: a+ J8 {, i) W
$database = "users";
$ O" [/ X. _1 S, `6 J$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
. H5 U4 o0 j1 p// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last4 L" H$ P) X) ^ q# G
// $timeoutseconds seconds)
" H6 `; a$ ]8 G6 p3 J//this is where PHP gets the time* Q1 g" w* K& d: o% {& n
$timestamp = time();
) B) T. p! [* N" x, v& Z( `//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
5 ^: X# g/ X9 E7 l! @$timeout = $timestamp-$timeoutseconds;: n( y$ `% l, c0 Q8 ]
//connect to database
0 o: k- h! Q& U4 Z" gmysql_connect($server, $db_user);9 q# W' I5 g% N- w
//add the timestamp from the user to the online list
$ Y3 |6 O& H+ O" k' I0 w' z$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
6 H0 H$ u2 P' X/ l('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");0 o9 B8 {# @$ V% ^' {
if(!($insert)) {& r2 M5 u. @! X) A- X9 z0 R) \5 @* [
print "Useronline Insert Failed > ";! w: N1 z0 h/ n4 ]% U; \
}5 K9 m2 A. V9 T' G. j
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
9 K( F& k$ b$ a" V8 w5 y: Y, T4 F$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");) R" R; N" V9 N# Q& t" p$ J
if(!($delete)) {$ e# q! x2 @) `/ D; ]/ v. q
print "Useronline Delete Failed > ";
/ b& ]" G: i5 r( d4 r}
% n6 o6 U& C$ ]//select the amount of people online, all uniques, which are online on THIS page
* N; W+ g* n2 {' E B$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");& k5 |/ S2 X( y: ?$ m' @
if(!($result)) {" s4 u% G! s; ~ h1 q$ Z7 D+ `
print "Useronline Select Error > ";+ L& Q3 I/ |% u0 Y& f( ~+ S
}
& o( N, `1 w9 e: t3 N! B$ F//Count the number of rows = the number of people online7 _: L7 l( k+ j0 o* t/ s
$user = mysql_num_rows($result);
- U$ ?6 [0 ?( A) A0 N//spit out the results
# m8 r+ V! x& \3 w$ f& j. Tmysql_close();% I. M$ {9 d" c* O
if($user == 1) {
% }7 e4 b# {) ~ L2 Y# vprint("1 user online\n");3 ?7 E& z& N$ e( \9 @
} else {$ V _, c) b: s7 v
print("$user users online\n");
( Y% r1 i* l; w- U) Y}
8 r. }! d3 `5 r?>
o* E4 e* T. ?" H" ~" r
0 B0 w0 @; z. p0 m以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。! _. h8 X b; W) c; i
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
2 ]; J) u" W: _0 n+ d7 c& W我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。( {! w: K1 X) G5 y# o
当然啦,这两款主机也是相当不错的。8 X/ L" i# i4 u! y0 Z
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年. s3 l9 p# Y+ c7 |1 J+ f
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年6 k2 J4 F5 U: y% i
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
/ j, J0 @ I8 ^空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
, `! M# ]/ }+ Q2 z4 d自己加QQ去问吧。 |
|