返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
! S" [, x( a8 I' e2 c# c! @" i  u我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
9 J2 y) l) [9 i' q1 }! F3 P首先我创建MYSQL数据库表。3 Q* a1 w6 p2 N8 i, L5 A
CREATE TABLE tablename (
  ^0 L# H9 w& j+ q/ h: ufield type(max_length) DEFAULT 'default_value' (NOT) NULL+ W- i9 Y* k: {8 ]
}可以使用的SQL语句。; {- a8 F3 o* ]5 ]" r6 u
CREATE TABLE useronline (6 _6 H& h( j& c3 m# M
timestamp int(15) DEFAULT '0' NOT NULL,! x1 b: z. ^* f  |+ f; C: O% H
ip varchar(40) NOT NULL,
2 [% x+ p3 u5 B, m# H* c& Z- Hfile varchar(100) NOT NULL,
/ `  M; F+ `# o+ {7 _. T7 cPRIMARY KEY (timestamp),
$ r4 L$ y; H. D9 k- u. q& Y' i& R( vKEY ip (ip),- d6 L0 K) ]* _. A( ^
KEY file (file)
/ y9 _4 U7 W. d+ g- \);下面我们是PHP脚本,首先我定义MYSQL的信息。
% x4 ]7 s+ P5 R% U' m$ d8 R$server = "localhost"; //你的服务器+ J; _' @( _' U3 I6 x& u2 r  u
$db_user = "root"; //你的mysql的用户名
! f3 }3 a  c: f, g9 l$db_pass = "password"; //你的mysql的密码, y8 \$ X1 g5 u: p
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
+ d1 P  }7 b% Y/ L$timeoutseconds = 300;取当前时间。6 E) p( q- Q. M
$timestamp = time();上面的完整代码:
$ \- ~8 t( ?2 s3 x4 O3 J) a<?php
, s# v* h2 h. n4 P- p4 l5 i# e$server = "localhost"; //your server
/ _0 f" O; z& l( O0 D+ m. P$db_user = "root"; //your mysql database username
: @2 g$ `3 [/ i1 @, a% H; f% z$db_pass = "password"; //your mysql database password if any
9 a4 I; f+ q7 e4 {/ k# P: Z$database = "users"; //the db name
- L* F1 u5 e7 P0 m2 L5 G- m% e+ ^$timeoutseconds = 300;//timeoutseconds limit) p1 L0 a# x' R
//get the current time
4 C! A1 B$ [) c6 _7 P$timestamp = time();  `% Y6 ?1 U( x4 ~# @# l# n
//calculate the lowest timestamp allowed
8 z' a4 {& l2 k# Q2 |0 n4 A$timeout = $timestamp-$timeoutseconds;/ Y8 y: I9 z5 |5 q6 n
?>连接mysql( ~  f6 ?* l  e! [, P% H5 y
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。) o" Q! W1 |6 z  X
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
! v+ K1 \/ W8 W( rmysql_connect($server, $db_user);查询数据库的代码:, C8 T( a. T- L: ]& d* ]8 E% g
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。, s9 B9 c9 j: f2 o1 k8 G  V
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES& A3 t& k  h7 o
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");; x: x* u2 V0 u' K! I* X% M- J
如果用户用错误信息的话,这样处理。
8 P, a, e. `: O$ @( d! e: Xif(!($insert)) {$ r3 U4 @9 F! E, P
print "Useronline Insert Failed > ";
! _1 e$ w( [: x. B0 w}然后实现当超过设置的时间就删除该用户记录。, x: ~' O1 r2 X9 E* Q
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。& k2 P" _: R% ^' \6 U3 V
if(!($delete)) {5 w6 e3 w! q. ^6 C8 L
print "Useronline Delete Failed > ";# U9 r# X  m6 _
}下面我们解决数据库中不同IP的问题
( g$ h9 X! O; j' d2 h6 h$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用- ^/ C0 D# c  Q" L" f
mysql_num_rows(query);来统计用户,代码如下。) u) d" c3 X1 x$ s3 I0 Q+ p: g+ Z
$user = mysql_num_rows($result);最后关闭数据库。
& [+ O# {( l9 W) Tmysql_close();显示在线的人数。3 ]- f. s3 Z1 A$ V& D
if($user == 1) {
8 p. z5 x9 x$ Z, ?! j. _print("1 user online\n");8 e+ {, x. _/ k5 U
} else {
1 {7 E6 Z3 u9 j3 T2 f" Q7 Zprint("$user users online\n");4 O" q! |+ d6 [6 Q) V
}最终把上面代码写成一个PHP文件如下。0 E. Q1 Z$ v: p0 ?& T+ n3 _, l+ }
<?php+ e% \) ~& x' P' C' d
//Put your basic server info here
. G* T( F' P1 X, M/ G9 o$server = "localhost"; //normally localhost7 k  w9 W& H( K* u
$db_user = "root"; //your MySQL database username
: G  Y0 @5 }5 z* b/ K5 v$db_pass = "password"; //your MySQL database password$ Z& P& d, @& I9 Q& I
$database = "users";$ V" s$ _, G  z6 d0 U1 x
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are5 g5 p7 S# B3 E
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
+ ]9 P8 ], H9 a// $timeoutseconds seconds)" u( K% R5 M; Y' r2 {, t" y
//this is where PHP gets the time
" W2 J% Z6 F- [1 W7 ?- B) h, i& `& W" a$timestamp = time();
4 z1 i4 C6 l' ]9 C9 m9 e8 d8 V//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed, S$ F8 q5 _& N# a! W% Q
$timeout = $timestamp-$timeoutseconds;1 h5 G" }# ~  ?2 g: i
//connect to database
7 p2 |! a$ u2 G: Z1 s$ M0 H; Fmysql_connect($server, $db_user);3 }+ t4 ]2 o7 f
//add the timestamp from the user to the online list! g7 i7 D# j0 K/ b
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES1 y( c! D% J7 x6 w6 i( x
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");, j" T  ^& {, L  m) s  V
if(!($insert)) {* P" Q# W% _' v
print "Useronline Insert Failed > ";5 K* z) O: U" ~+ ]0 _
}. g; Z! k* P( |  ]( ^5 C9 _2 j" P
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
8 E# M% Z# h1 N7 T$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
3 W: I: z1 m1 ?. j* O$ mif(!($delete)) {8 T- [- |: R* I) u( [
print "Useronline Delete Failed > ";
% K' @% x$ I+ R. J& H}! n! K- G9 e' F% A! }
//select the amount of people online, all uniques, which are online on THIS page
5 i" e8 q0 P0 s0 _/ G8 L$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");1 L" p! M) j8 K" [; ~/ |
if(!($result)) {
, p$ _3 O1 s  {4 o2 Tprint "Useronline Select Error > ";9 r9 N; n& W& ]6 `& m, D
}8 _' i; K* ^, v: v* a
//Count the number of rows = the number of people online3 q- x, p' c# C+ i9 h
$user = mysql_num_rows($result);
# l* E& {! R( |: h5 F//spit out the results
! K9 r# [) s" J1 t$ z1 H) f" [' Lmysql_close();4 V4 k8 R5 p9 K0 l& z, e* }
if($user == 1) {* o. t( y; v( R& ]! {! N
print("1 user online\n");" p$ g* U$ ?& p! r  s
} else {
0 l" t) t; t8 G5 [7 rprint("$user users online\n");
7 f- ]+ l, L# B/ o4 O0 J2 b! |}
) f5 g0 E. v/ ]?>: S9 V- f: m" Q- F

7 x) ~% c* z8 }以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
, d/ b( s  {) w) R3 \$ b: {3 b时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
$ P" d2 J/ i6 z7 _我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。, k3 _+ e& V- i
当然啦,这两款主机也是相当不错的。
0 y, I6 A- R+ {2 J5 J" H智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
7 t" @& C9 G, {% Y& |标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
8 K# c5 I8 y/ K) Q' {提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ + G# q3 Y3 C( ?1 U
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
) ~9 K9 y, M/ T7 ?6 L自己加QQ去问吧。

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