获得本站免费赞助空间请点这里
返回列表 发帖

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
2 G: e" Q* t+ T9 T$ T7 i2 h. \我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。6 R. F  T. W8 [2 K* ?& s% P% Q7 T
首先我创建MYSQL数据库表。8 @2 _% I1 A6 B9 V7 w
CREATE TABLE tablename (
8 W, o5 u, @! M9 C5 ufield type(max_length) DEFAULT 'default_value' (NOT) NULL6 P$ c7 R' B# x6 F$ {
}可以使用的SQL语句。
1 i7 n& }( b' K! TCREATE TABLE useronline (
4 A0 U) f0 ]: n1 W- y; ^/ b; s- q4 Ztimestamp int(15) DEFAULT '0' NOT NULL,
# {+ e# A# C$ {; X4 K( P+ w7 k2 Wip varchar(40) NOT NULL,9 c8 Y6 Z. e, r
file varchar(100) NOT NULL,/ m4 F- T% O7 j& O
PRIMARY KEY (timestamp),% a. B' i3 l# v  ^
KEY ip (ip),
% _3 P+ \0 m, h( A: \% gKEY file (file)
! R6 n! y0 A! p) J);下面我们是PHP脚本,首先我定义MYSQL的信息。9 t# i% i. |6 t! c- i
$server = "localhost"; //你的服务器
. Q* h9 @( d! g$db_user = "root"; //你的mysql的用户名
$ }: m0 d" ]% @$ j5 {/ O$db_pass = "password"; //你的mysql的密码
; U( @2 h6 u0 }, x$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)* U0 }7 b' W' K& j8 M
$timeoutseconds = 300;取当前时间。
* A% H8 s$ m! a" C/ D, v4 J' d$timestamp = time();上面的完整代码:" @2 R, ]+ O1 H8 ?# v$ K
<?php
. x) y, v* ]& d- b' z6 n9 X$server = "localhost"; //your server
4 w/ m- p, y8 o) J$db_user = "root"; //your mysql database username
! j3 N% P$ R. b! S$db_pass = "password"; //your mysql database password if any
2 Q# c0 v2 c" d2 ]$database = "users"; //the db name
/ ?4 X- P3 f1 S$timeoutseconds = 300;//timeoutseconds limit
8 z/ D9 J2 E* {% g, Q; L3 V//get the current time7 M3 _" r' C( G2 |3 g& w
$timestamp = time();; L+ {. `4 k0 W) Z
//calculate the lowest timestamp allowed1 A9 D- ]' k% G8 ]  U: v
$timeout = $timestamp-$timeoutseconds;6 M/ L& [" C" P7 V4 r$ U& v
?>连接mysql
9 J+ ~3 U& U' p- T; x9 {. Kmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
; o4 c1 T$ q6 S" omysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
" @* T3 `' h! ^mysql_connect($server, $db_user);查询数据库的代码:
4 X! @' L" h) B" x: V) zmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。3 A' b, l& J* o4 @; X7 }2 [, w$ R
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
/ b, _; Z, o, B' r7 c('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
' e$ Q/ N+ @" }' h如果用户用错误信息的话,这样处理。# E$ t+ O- B, J7 V
if(!($insert)) {
2 x$ n  G% w$ ~% `! Bprint "Useronline Insert Failed > ";
% M' I8 t! n$ T, A& _$ s; v, X, T}然后实现当超过设置的时间就删除该用户记录。+ l" t, a; l/ l+ J
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。, k- s. Z/ ]/ M6 @
if(!($delete)) {
3 e+ w8 t' z$ ]( y% h! k( dprint "Useronline Delete Failed > ";! W* I* O- O. ?' |- f" q
}下面我们解决数据库中不同IP的问题! I- @! e, w5 `, K$ p
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用$ c/ ^7 q, b& r; F) I9 [2 s
mysql_num_rows(query);来统计用户,代码如下。
) A; `8 _8 Y, D2 N3 _& b3 h. V$user = mysql_num_rows($result);最后关闭数据库。
, L+ L  I9 Y. v# X8 [1 m  Omysql_close();显示在线的人数。, \/ n4 R1 y- t! m# [' T* u6 z2 g
if($user == 1) {6 _4 O) |- \# t7 [1 l
print("1 user online\n");6 G8 j4 b* f4 B" a
} else {  X3 f! B. H/ u. Q* ]
print("$user users online\n");! H- S' @7 c% g1 i+ b( `
}最终把上面代码写成一个PHP文件如下。+ D- _5 B" G3 D/ ?, ?- q$ A, Y
<?php
, a& ~4 u: C+ S2 S0 G//Put your basic server info here. F. @/ x4 \, P
$server = "localhost"; //normally localhost
, s2 u* k9 K3 x1 w* j; l$db_user = "root"; //your MySQL database username
7 G% ^7 i1 ~2 r% K+ P$db_pass = "password"; //your MySQL database password
1 {% R/ q, q8 o/ b* L, a: {5 t8 k7 S$database = "users";! |7 S/ w( r6 `
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are4 ~1 g5 v+ ?" d$ u7 U9 @7 S5 H
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
6 n8 n5 C; f1 R/ n& O// $timeoutseconds seconds)
" t, j0 B- J9 O8 ?" w* z- ?/ t//this is where PHP gets the time* m' O8 f' }" ]2 Q
$timestamp = time();8 m+ h4 Q' j/ i% y$ J/ ~9 P
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed0 U8 J4 A$ q' h! c( r+ c
$timeout = $timestamp-$timeoutseconds;3 R- j3 Q3 K& N. A! v3 Z- a8 e! d
//connect to database
, K* f. L+ E+ i% Xmysql_connect($server, $db_user);
" U" @) [+ B" I) n; v! b3 t//add the timestamp from the user to the online list1 R5 z5 S5 G- \' V1 w
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES9 U  H5 r: }' i3 j0 q
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
% O. `# h$ f* X! p4 ^' {  U& oif(!($insert)) {- E7 b2 p! H" P
print "Useronline Insert Failed > ";- R, w$ u9 Z+ h" J% G/ z$ E
}( D0 j! J) H$ G* W. n
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
+ \& K  A" a2 Q( b+ {- `$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");, X( _# {/ R7 @8 \- j
if(!($delete)) {3 C" X% o1 o7 @% v; l3 T6 E+ T- y. b
print "Useronline Delete Failed > ";
. ]; q( k' o7 }8 ]: ~" q' _}
0 d# ^' p4 b0 P& U/ D//select the amount of people online, all uniques, which are online on THIS page+ x# i6 d7 U" T  ?) m- Z
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
4 Y" n# k% m+ a4 {& aif(!($result)) {* S2 t# W2 n1 l( R) `3 s7 y4 H
print "Useronline Select Error > ";1 }/ {8 q( L1 n, [
}! b( _$ D; ]* B$ P
//Count the number of rows = the number of people online1 r. ~. z8 N/ R4 H8 q+ @# R
$user = mysql_num_rows($result);7 I& l$ C" N2 Y0 N+ v& S
//spit out the results
, {" r$ i+ r) d( smysql_close();* [! h! S: O  B; n% q
if($user == 1) {
) Y9 I' x' X+ u- I) iprint("1 user online\n");6 E8 y5 ?& \+ l0 J
} else {% `; V  u. o" t0 ]% A: l6 [/ }
print("$user users online\n");9 U6 h4 q, Q* j2 s  n0 Z! o
}3 [9 D* O8 Y4 l) J, q5 s# ]2 `- h
?>6 S* \- Q  Y+ g* J, \- h' s/ v: Y# q

/ B4 a& P# A: l% J& q7 D/ P, l以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
$ `! H& H/ \% C( C时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
" h+ O7 |9 R+ C7 o我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。' a! |# }" v1 C/ b0 D
当然啦,这两款主机也是相当不错的。
* }) D4 ~" C) Q智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
- r" f$ s! c6 e, T( s6 o: a标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年0 g( o& \# N; i7 ?. e: ~
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ ; J! J2 W' D/ Y+ q+ K$ p
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
4 w6 e* P* V! W" a自己加QQ去问吧。

返回列表
【捌玖网络】已经运行: