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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!, K* t* H: i' G# L
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
: U0 X- T! u' q, g" ^首先我创建MYSQL数据库表。
% q! ?' F' u6 ~) n1 n, X+ {CREATE TABLE tablename (% M1 X' W# ~2 F) g" V) N
field type(max_length) DEFAULT 'default_value' (NOT) NULL
8 Z; Q+ Z$ U* D9 M. {}可以使用的SQL语句。
  v3 s" J1 w; D5 m0 mCREATE TABLE useronline (
2 s" Y  H- Y" Z! h# f! z/ ctimestamp int(15) DEFAULT '0' NOT NULL,; n/ f: {' H1 U! Z" A- z/ z9 `
ip varchar(40) NOT NULL,- `, m- D5 A7 e$ {4 z, r; j
file varchar(100) NOT NULL,
$ Q! v5 b" T0 d' f) ~. t: L- S3 LPRIMARY KEY (timestamp),
. V$ g' t: ?1 u; fKEY ip (ip),
9 h  C3 z6 k: A% L4 `7 \4 ZKEY file (file)9 m: Y- X, i+ c5 {# v4 b, A( X
);下面我们是PHP脚本,首先我定义MYSQL的信息。$ s5 x! J" N' i" D2 p* p/ ^0 J
$server = "localhost"; //你的服务器; M. r: R# N, h# |. G
$db_user = "root"; //你的mysql的用户名4 D. y" |& V6 j& Q! J
$db_pass = "password"; //你的mysql的密码. C- ?4 g# K) n  e% T: d
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
6 K/ A$ \  }$ L% _( E4 L1 E$timeoutseconds = 300;取当前时间。
# H: X' n( e$ J" g/ }$timestamp = time();上面的完整代码:' K( k. _3 H  ]7 g( v
<?php
1 Q9 K1 b! u6 Y& {; {1 G$server = "localhost"; //your server5 R5 O( Y) S% u4 j- k  p2 T, q; L3 ^
$db_user = "root"; //your mysql database username: K0 U# J* b: j9 N7 r8 F
$db_pass = "password"; //your mysql database password if any
8 E, p# S- l+ t0 E  [; Q4 ~! O$database = "users"; //the db name
0 u; H1 |! E6 F1 @  j$timeoutseconds = 300;//timeoutseconds limit
* u3 b2 E. S2 F! B9 r3 A5 ?) ~/ Q8 e//get the current time
: i% |5 o; v9 B) P$timestamp = time();/ F* l& ~  L! _, D. |7 [# V
//calculate the lowest timestamp allowed
; x7 U; [& ?# j& j# l$ {$timeout = $timestamp-$timeoutseconds;
: P9 J: f) M* k: e# c) ?4 i& E' G( k?>连接mysql" B& G( j* T" i+ U2 _/ U
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。: O9 x. p/ R2 O! H4 O# i
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接9 j, @- J5 U# b3 B
mysql_connect($server, $db_user);查询数据库的代码:/ |! X5 E6 L: b$ j; `: C" k
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
9 j- V1 D& ]- E: C, ]' z$insert = mysql_db_query($database, "INSERT INTO useronline VALUES3 b+ R, D: x6 v7 E$ n5 G' d6 k
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");7 m5 ~6 m& F" g3 ~$ |- e0 ~6 g9 W
如果用户用错误信息的话,这样处理。* W: s: ?* D* D0 H
if(!($insert)) {
: z3 q& _: [2 {. |8 ]2 jprint "Useronline Insert Failed > ";) H$ i* O! J9 ]+ Z( u
}然后实现当超过设置的时间就删除该用户记录。
* G4 D! G, c2 ]$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
$ W0 c5 }( E9 @& C( e9 sif(!($delete)) {
2 G* H) x" h& Uprint "Useronline Delete Failed > ";
5 `0 t- k0 ~" x}下面我们解决数据库中不同IP的问题& x8 e8 K& D$ H
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用# S" O7 X, @$ j# Z% \/ g, d: s
mysql_num_rows(query);来统计用户,代码如下。
* r# D3 ~7 W$ @, u* l$user = mysql_num_rows($result);最后关闭数据库。
2 C2 u3 K4 u+ q" F4 z; j1 _# d: @mysql_close();显示在线的人数。1 H7 I8 Z9 q5 N% J! r
if($user == 1) {
* k7 w" P0 f5 H# gprint("1 user online\n");
) v6 G8 ^, ]0 i# W9 U% ?2 e} else {
: `4 M2 V$ f; I7 M& v  ^6 Dprint("$user users online\n");
. t7 I0 n1 s+ W- W6 J$ W8 E# o}最终把上面代码写成一个PHP文件如下。
0 h1 {% u4 Z( k3 [  e1 ~( h- @( M  I<?php
/ ^1 F, f  S& I+ T; w//Put your basic server info here: [- b8 h& o8 x$ s4 V; A
$server = "localhost"; //normally localhost
' l! |" s* g4 v( U! T- N$db_user = "root"; //your MySQL database username5 ]9 c# O  x. L: Y% c
$db_pass = "password"; //your MySQL database password
' O( i0 }6 x3 P( g& M! ^$database = "users";
/ m/ y2 L0 n) ]8 ^2 Y5 t$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
: F3 z8 A/ O4 a3 }5 I# g7 z7 a3 I( P// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
6 p& _! h, p+ [- [- g// $timeoutseconds seconds)5 C) r, {* J7 E) r2 Q
//this is where PHP gets the time/ A+ q" ~" o! Q* o; K7 S; k
$timestamp = time();, B( Y5 b' s* M" x8 s6 r2 g
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
, H. C3 _1 K$ X2 a8 ^$ i$timeout = $timestamp-$timeoutseconds;
- k/ |+ S  K/ _, Q6 r//connect to database# ?0 n: c0 f" ~- e
mysql_connect($server, $db_user);
# K  d5 @7 L! W; n6 }//add the timestamp from the user to the online list
5 s+ U8 L# r0 |1 a$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
' f0 ^# X/ g  k% F('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");) A" i1 @0 e$ c
if(!($insert)) {
/ R, k0 S9 H+ g5 a: u( ]print "Useronline Insert Failed > ";1 j+ W) E6 w( P# K$ Q0 _
}
! A6 S2 p& [0 b. J, i//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.; R3 F8 I) j4 V* R& p, h
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");- @; \( F! S% a, m0 l
if(!($delete)) {
" T! q7 j, K& H' ~6 ^print "Useronline Delete Failed > ";0 g; ^( ]1 |1 @8 A& P1 Z
}
7 L, s2 }- b6 A4 P8 K* |$ k6 T//select the amount of people online, all uniques, which are online on THIS page
" \" A. N) Q8 v+ c9 G9 X$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
4 N* b6 \7 B" ^if(!($result)) {1 p# \& e( I2 k, D& |9 p
print "Useronline Select Error > ";$ Q! Q3 z" W, a
}! n0 T, I4 }6 [2 A; A- N! O
//Count the number of rows = the number of people online
9 U' O3 R5 W6 u& p, W8 h$user = mysql_num_rows($result);
8 W. e4 H# O1 Q+ S% T//spit out the results
$ ~2 ]; ~5 F& M3 Gmysql_close();4 H5 t0 M5 n6 m* ]4 S, Y  @/ J' P7 L$ a
if($user == 1) {9 k4 z3 |  I. @1 L3 W, o, Q3 X- n6 m
print("1 user online\n");
  U1 Z: x  p- j6 W% A' t+ S} else {: E8 S: F" M0 T- ~  h  N
print("$user users online\n");
- ~, m! m/ _0 l0 l}
! _6 k! u1 v  y?>
2 V6 j0 r- {( ^5 J7 N( I8 L1 J+ \1 T" N* |6 u( B* K- H0 [: t
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
8 G, H: I  T5 @, N* |% }1 t9 @时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。/ q+ S% C* l- ^7 T8 V- b% Y2 r
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。. Y+ _; }% {2 ^0 i5 @# v5 M+ l
当然啦,这两款主机也是相当不错的。# j. i: e6 j7 p/ ~
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年! N: n2 z# ~$ b" O  h
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
  u; X( X! h# z5 a提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
* I" H# ~6 y+ F8 a* T, g  X空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=557 _  R5 M7 B$ l" T9 X+ `
自己加QQ去问吧。

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