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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!/ s2 l9 M; n- m. w1 C
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。" G  g/ z8 X5 `) k* `, H' j# e9 w0 V$ x
首先我创建MYSQL数据库表。
: Z9 }9 Q9 Y" XCREATE TABLE tablename (
; U4 Q/ y% h$ {" |' x) U1 E3 Ffield type(max_length) DEFAULT 'default_value' (NOT) NULL
) [# d" H7 l3 m! z}可以使用的SQL语句。
2 R: D/ h) {' @5 O2 `' X3 @% S$ D( ]CREATE TABLE useronline (
! Q/ z  @. I8 H0 x- d3 c' ftimestamp int(15) DEFAULT '0' NOT NULL,
2 T9 U- G- l4 tip varchar(40) NOT NULL,* ]8 R2 A) r7 t; j( B. h
file varchar(100) NOT NULL,
, t- p/ ^' B/ `$ u2 A5 |PRIMARY KEY (timestamp),, V# V2 [* \5 Q# j; z
KEY ip (ip),+ @) Z; R* h/ u  K# Q
KEY file (file)( v, B7 W/ G" K5 e# o1 H* i
);下面我们是PHP脚本,首先我定义MYSQL的信息。: J3 ?) N# D0 {. O
$server = "localhost"; //你的服务器5 r  b" ~! q  D4 K9 C; E# H
$db_user = "root"; //你的mysql的用户名, w1 c$ ^3 L- r2 M* c0 d" e
$db_pass = "password"; //你的mysql的密码
' B: I( w7 ]4 M4 g$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
5 ]0 w( M  F! j! K) e$timeoutseconds = 300;取当前时间。# f6 W' h$ m: T9 x2 g3 U4 ^  G
$timestamp = time();上面的完整代码:
& t# `7 d0 \2 y$ H4 p) s/ V0 o7 r<?php$ \! V0 q: s" C6 h
$server = "localhost"; //your server4 m$ C+ A" D. t$ q
$db_user = "root"; //your mysql database username
* S( K) |/ e, q* _; d" ?$db_pass = "password"; //your mysql database password if any
) P* B* }3 d4 n/ c; h0 R" A# w$database = "users"; //the db name
% u$ T6 `- s) I" |0 A8 d5 y( I$timeoutseconds = 300;//timeoutseconds limit
+ G" |1 R& s1 m7 |+ V1 W& d; y. r6 p//get the current time* ~: N' |4 Q4 c# E6 w
$timestamp = time();
9 p$ v* F" ~+ O" _//calculate the lowest timestamp allowed
8 Y' O: t* D/ |' T; T$timeout = $timestamp-$timeoutseconds;& M- I* F& [6 U  i4 l! P/ r
?>连接mysql3 r8 H8 i5 ?5 Z# r
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。$ N" _5 [* ]! w. Q/ L
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接3 s: f. n/ S1 ]! V1 a
mysql_connect($server, $db_user);查询数据库的代码:
  V% {/ I! T, ymysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
. r3 K0 X* l" [5 O9 K$ l$insert = mysql_db_query($database, "INSERT INTO useronline VALUES. y' ?& m$ t* _' y4 O
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");# _9 ^/ m! x6 ~7 B9 Y
如果用户用错误信息的话,这样处理。9 r6 z5 u) b, T4 @
if(!($insert)) {2 r! d( X6 d9 E9 e
print "Useronline Insert Failed > ";
  Z$ [, m  K: x}然后实现当超过设置的时间就删除该用户记录。
. Y. N' d  @6 f8 A1 R1 f+ H& P$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
+ c9 P& _2 R( d& S& g3 J) W+ n$ r8 Yif(!($delete)) {' c$ q! Y" M7 w0 n& S; \
print "Useronline Delete Failed > ";$ f" R6 b8 U* p) B2 |+ B/ Z' p* F
}下面我们解决数据库中不同IP的问题/ y; |0 i% e2 n2 q
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
" b8 m! p4 V0 q  N# y+ Ymysql_num_rows(query);来统计用户,代码如下。
- |" G( [7 d! k3 Y$user = mysql_num_rows($result);最后关闭数据库。+ w  q; P: |' l$ `# l9 }
mysql_close();显示在线的人数。" R2 F8 B$ o( E) }
if($user == 1) {
# I" F7 l% G- t7 [- }& k2 kprint("1 user online\n");* V1 G* ]  U. ~8 L
} else {- V% y$ p) P/ a0 o- v) X
print("$user users online\n");
+ s! w9 H( K6 T: E; m- m}最终把上面代码写成一个PHP文件如下。5 S/ g+ Z8 Z# S& u
<?php9 T4 g* T7 m, {2 V9 t6 H% M; D
//Put your basic server info here& R9 t8 U0 t7 _' p! D  t' _
$server = "localhost"; //normally localhost
, u& t& b9 X6 l1 h! I- U0 x( H$db_user = "root"; //your MySQL database username
5 F2 u* q9 v; K' k# W; ~# N$db_pass = "password"; //your MySQL database password
0 _  K! [, d, _" i$database = "users";
& I* y6 U$ {) z0 O2 n6 G/ N$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
, h/ c1 z  k9 u9 `' v// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
4 s) A7 _- R; G- h4 c// $timeoutseconds seconds)
: ^" v# i% T; L! _4 k//this is where PHP gets the time6 s1 I6 c$ M  i- C. Z" l
$timestamp = time();8 x9 v& F% P$ x3 p
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
7 q. k: U6 t9 ]9 J$timeout = $timestamp-$timeoutseconds;: d2 r( ?4 X  Q2 Q) L6 @2 g# t
//connect to database& C; M5 s+ s/ }% U: f
mysql_connect($server, $db_user);
' O, j$ v3 l' L8 X7 d: c! v9 p//add the timestamp from the user to the online list. Y; _' |5 s% L+ F: H
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
8 P, [' z" e3 R0 [* ~+ s% b('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
) g0 f6 `: p5 O4 I4 ~# Y% K) ~9 oif(!($insert)) {
/ X9 O, e. K) D% @2 }print "Useronline Insert Failed > ";
9 l1 V% G7 X3 y( [# u& a. k}7 R2 B: L4 z+ D! }& i; K. d
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.2 @0 U1 A6 J. `6 f& M3 Y3 E
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
$ M8 e' J; _& {4 i7 Mif(!($delete)) {1 O4 n/ d5 h+ K+ K' B  O. r: C2 w
print "Useronline Delete Failed > ";
" z& p$ O# _- U; A) ?4 f6 a  \}
4 `1 i. w& `5 O9 ]1 P( M" ~& h//select the amount of people online, all uniques, which are online on THIS page
  m& T" ]0 z) x$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");: D# u. c2 K3 m- o5 \
if(!($result)) {
6 o$ Q: l9 h9 i" |9 Iprint "Useronline Select Error > ";) ?( k% _5 Q3 c3 h* S0 @, d
}. ?0 ~# z" ^' N2 v0 W. B6 W3 g. Z% w+ v
//Count the number of rows = the number of people online
4 D& ], s  M# n  U- L$user = mysql_num_rows($result);6 @6 _7 S$ h; t- \0 Q0 _
//spit out the results
2 |0 V' Q+ P$ W- r7 e% j9 Gmysql_close();  r% O+ H6 h0 f  m/ n: _3 @
if($user == 1) {8 O- n7 x7 E2 E* H
print("1 user online\n");
, K$ w, S& Z$ ]# u, T. Q} else {
  x# L: b9 M6 Dprint("$user users online\n");" ?+ _; |: ]$ u9 \
}+ R; T( V3 k  \! t
?>
0 t& j/ ~/ e. l- Y7 {; i! f$ e2 z- p8 X* A5 O# i- |
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
' S4 i8 P/ f8 z; {& X( y% }% ]时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
0 L* z" E, L, d: m; a" ]: d! o我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
9 [5 w# M- d5 s& p当然啦,这两款主机也是相当不错的。
& c* Y5 u( t4 U# r9 t7 [' ^2 |智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年/ q" ~' H/ V  W5 ], p; M
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
& _9 K# U+ `0 w提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ # b# I6 m! t& L
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
  t) L8 L- ?( Y! Y" a6 w6 ~自己加QQ去问吧。

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