返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
4 k; Z" n+ d" q& a0 G. s8 }9 [  t3 y我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。9 R9 N6 I5 [3 j* T: ~
首先我创建MYSQL数据库表。
' X( G. {. m* x) t2 @2 `2 X1 WCREATE TABLE tablename (
. s# t! j1 D: M6 c, H. xfield type(max_length) DEFAULT 'default_value' (NOT) NULL2 K. \$ Z. o8 ]  o" Q$ {/ F
}可以使用的SQL语句。
! r) U1 _8 ^0 l8 I2 Z+ z& `CREATE TABLE useronline (
. Y8 A8 n; b. O& S& Ltimestamp int(15) DEFAULT '0' NOT NULL,3 K: k" c$ o6 n) O- F1 y' y* n  V
ip varchar(40) NOT NULL,+ Q) [! z6 b8 i5 v7 G$ e
file varchar(100) NOT NULL,1 ~/ \, a! u1 d; J
PRIMARY KEY (timestamp),
$ g5 X$ [$ R" y! U/ uKEY ip (ip),
8 m8 f- E) b  V$ t2 E$ yKEY file (file)9 D& \/ m* ?3 [- H3 ^" b
);下面我们是PHP脚本,首先我定义MYSQL的信息。
, |8 l" c" x# {& f$server = "localhost"; //你的服务器$ `: O# F& ~# N6 \) n- i& T
$db_user = "root"; //你的mysql的用户名7 v" ~9 d4 N! u
$db_pass = "password"; //你的mysql的密码" D! L% }. ^1 B5 I" W
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
. A8 D% k- h! ?" N' k# D# G8 ^$timeoutseconds = 300;取当前时间。" f+ Q  z# i) C; o
$timestamp = time();上面的完整代码:# }! h4 B) p( G! G
<?php# b+ x9 i. r0 p. B; Z
$server = "localhost"; //your server
7 Y1 T$ K9 z$ a- ]( f% O$db_user = "root"; //your mysql database username# u& V9 `' z  _$ o2 \
$db_pass = "password"; //your mysql database password if any9 ^# r. Y' l' m# U
$database = "users"; //the db name
* ?0 R( F1 G- b5 }$ b/ b: t$timeoutseconds = 300;//timeoutseconds limit
3 d1 e! g8 T5 N8 O//get the current time
' U9 X$ S; q( u0 h! ]7 V* f' e$timestamp = time();
" Y6 K  z" O# j6 t" a+ u- f# K//calculate the lowest timestamp allowed5 K9 J( c' A: H2 `% U- M1 J
$timeout = $timestamp-$timeoutseconds;# ]3 z! h. M5 g( p
?>连接mysql
/ K6 I* M7 f& i7 N9 R3 t8 }! F7 cmysql_connect('localhost', 'username', 'password');也允许使用变量形式。9 ^+ J8 E# g8 a' j. J8 c  d" j
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
0 j9 K/ X3 a, }' pmysql_connect($server, $db_user);查询数据库的代码:
9 g2 @4 W3 W* C5 H$ \: \4 x& ?6 Amysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
  {& j' S" |- O( N+ z, I9 |0 s- D5 s$insert = mysql_db_query($database, "INSERT INTO useronline VALUES; o5 J% I$ g/ `1 L4 X
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");& u8 v; m3 r6 e( ^
如果用户用错误信息的话,这样处理。5 n( X! `1 m* k+ m% k9 e/ F4 I
if(!($insert)) {
0 ~/ \+ l% Z6 I$ g+ A4 J8 ~' @print "Useronline Insert Failed > ";
: I' @( g5 B( R9 [( P}然后实现当超过设置的时间就删除该用户记录。
8 L& q0 g% c: [) J9 y. d8 u: X$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。+ M5 v0 n; R/ w! ?7 W
if(!($delete)) {
) U. ^4 @% L5 N9 o9 m! tprint "Useronline Delete Failed > ";
# `% _* W  T$ M  ~! C}下面我们解决数据库中不同IP的问题! z2 c6 [4 X+ E  B
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
5 M( X% k1 [7 b* j3 v. dmysql_num_rows(query);来统计用户,代码如下。% I! V: W/ v2 Y& W; g8 Z
$user = mysql_num_rows($result);最后关闭数据库。
1 Z3 n" H8 d1 z! v, fmysql_close();显示在线的人数。
8 w9 ^, c+ `2 W7 @2 M  p$ @7 R5 Tif($user == 1) {: o1 a7 c4 v7 }# x3 V3 F  o
print("1 user online\n");% G" w3 o- {0 |  I* e5 \. @; K9 Q- Q1 T
} else {
# G, F8 Z% V$ x1 ?print("$user users online\n");
3 ?, Q% b$ b$ N}最终把上面代码写成一个PHP文件如下。
7 Y6 k( X6 k7 A7 r) Q<?php
# I0 M. l; a& I. ~6 M# C//Put your basic server info here- V% E, R7 o, b& w& h' x
$server = "localhost"; //normally localhost. v9 Y" Q0 I+ A% ?; t7 C
$db_user = "root"; //your MySQL database username  f3 z7 i& |% n1 J4 }
$db_pass = "password"; //your MySQL database password
- P  ?. a6 `* k! ?0 u7 J$database = "users";. ?  H2 x5 t& V- R! a: F
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are! r- ~, s2 j8 e) g8 ^3 o1 G8 L
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
4 _+ T  M2 h; G4 k// $timeoutseconds seconds)2 ~2 H( A& J# o$ G
//this is where PHP gets the time# @, s9 ^  a; c
$timestamp = time();% S" d) }9 M' n1 u0 t$ t5 N
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
- `" C# {3 u; k. U$timeout = $timestamp-$timeoutseconds;; Z5 q  a5 r: g5 o7 R* h7 [3 }
//connect to database
6 O0 F. Y; U, Jmysql_connect($server, $db_user);
( m0 O. x8 \4 i$ m* u//add the timestamp from the user to the online list% I% |/ S( F9 X: e: H, i, `2 o! z
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
( O3 _  n* `0 A. }('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
& Z; B* w$ h# }9 T0 rif(!($insert)) {: u$ }( Y( g  F' J4 V; _* c6 y
print "Useronline Insert Failed > ";8 N  e2 u% E# l3 F, G$ ~; v
}
" q' F2 S1 n8 v9 E4 {//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
5 u8 v6 b$ ?7 i8 X$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
  s/ R) ^$ e/ S7 R% ?if(!($delete)) {& Q, v' ?( S( ]' B1 u2 l' [3 j
print "Useronline Delete Failed > ";
6 ]; G- h2 x& Q  y) p2 k) ?- r}/ z, j2 g" v. H9 t% R
//select the amount of people online, all uniques, which are online on THIS page
  `1 h: ~* V/ J$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");# x6 P& _2 T' x# f/ R$ i% ?
if(!($result)) {% u& g4 m' Z& p' }, o
print "Useronline Select Error > ";' r% C) y; m" Y- H* W6 L
}* A6 g( t5 s: i3 K
//Count the number of rows = the number of people online: e# ]& M% j7 k9 d; R/ r  I
$user = mysql_num_rows($result);" y0 ?. ]$ i- p7 U4 S
//spit out the results" b- D; V' `/ @
mysql_close();
7 z5 Z1 _- [. W- Mif($user == 1) {
5 }- ?' g5 H- d( A$ y- sprint("1 user online\n");
- `9 a+ d0 @5 W% i% |: q% f} else {' J0 K9 N: D$ p5 a
print("$user users online\n");; f+ R/ M3 C! k- F
}
# F; u% M0 E8 ^! Z" N4 D?>, J5 a& k/ k6 ^8 u7 A
9 z3 e, u: d1 f- ~4 ]/ H
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。0 T( P/ O5 E4 }5 X+ T! C
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
; ?5 S. q3 [9 F2 e( ~我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。. `5 [1 _7 S" e/ [! r' g
当然啦,这两款主机也是相当不错的。8 K  p# e9 i8 |8 G+ x
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
3 s& K. s' s; Q2 C: F! H+ L. x; @1 a标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年* M# l3 x% ~$ y/ Y5 i' e( Q- Y
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ * z# {/ P; @  I, X
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55# @8 ~; P, ]  f- p) s0 k0 B
自己加QQ去问吧。

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