返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
, [7 @# O6 N1 k( m- n3 A我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。) u' e$ u/ y/ r; i" S" n: q
首先我创建MYSQL数据库表。4 W, U9 q  D- z; t' t0 E; V
CREATE TABLE tablename (1 V# f5 @2 @  e3 @( [( H
field type(max_length) DEFAULT 'default_value' (NOT) NULL6 J+ m: H6 U  {( k. [* m" F9 Q
}可以使用的SQL语句。
8 d; W8 S7 z0 R1 r" QCREATE TABLE useronline (" z4 F* O/ l+ J" e) L; S/ l+ ]  [
timestamp int(15) DEFAULT '0' NOT NULL,% C5 g2 ?- |7 D# g9 ]
ip varchar(40) NOT NULL,8 d3 _4 K% n3 x+ g( m& |, ?: z2 }
file varchar(100) NOT NULL,5 d2 d4 S/ ?& R) Z# m
PRIMARY KEY (timestamp)," l, S9 ?" |  E9 t- V
KEY ip (ip),9 l6 G* T$ D5 [9 N- y( n
KEY file (file)2 z) A. L, R1 r) S: v
);下面我们是PHP脚本,首先我定义MYSQL的信息。
: I# j2 ^. ]9 `$server = "localhost"; //你的服务器
) J3 L) Q% d8 O; R4 Y! J$ l" N- s! H$db_user = "root"; //你的mysql的用户名
8 ]; A# b" P  V$ t$db_pass = "password"; //你的mysql的密码
0 U/ O; A; Y& o) _, {9 I0 k+ V$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
! J0 o" U: D! w0 r" \) \" Q$timeoutseconds = 300;取当前时间。
) H; s/ k0 \# Q: ^" h$timestamp = time();上面的完整代码:4 H8 P8 W+ p' e0 d
<?php. i2 u8 g! F+ f0 Y0 ^
$server = "localhost"; //your server
. j* M, C3 k- r" ~7 _/ b$db_user = "root"; //your mysql database username
% Z) s- S# g! t8 z- A/ Z7 c$db_pass = "password"; //your mysql database password if any: }6 C! Z, x) l6 L/ \! _/ K
$database = "users"; //the db name
% V& ^3 u9 H% D& X5 e9 u. w$timeoutseconds = 300;//timeoutseconds limit9 G; a% w& `# @' _
//get the current time
' R! O! x* P: C$timestamp = time();5 Z* B1 o4 p) V+ Y5 A3 a
//calculate the lowest timestamp allowed4 {: g" Y% C8 a$ J; z1 z% _
$timeout = $timestamp-$timeoutseconds;
/ T* _" ^( U, x! p?>连接mysql, u) c7 d- `9 Y1 w
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
3 q$ c, \- z7 j- C2 A/ Dmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接" q0 B  a/ M" }1 Q2 |" d
mysql_connect($server, $db_user);查询数据库的代码:
1 d" m. Q5 ?2 }! N" Y- K/ s; I7 Mmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
* ~3 ~$ g5 X3 {' w0 K" J  Q0 Q$insert = mysql_db_query($database, "INSERT INTO useronline VALUES# G, [8 Q9 ?- v! C! y) k. L
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");2 `" r0 z. F# B$ \
如果用户用错误信息的话,这样处理。( E. v: ^4 s' Z) m. ~0 l
if(!($insert)) {
& j7 z2 V7 w9 N# A/ }print "Useronline Insert Failed > ";
  X; O3 ]( [8 C}然后实现当超过设置的时间就删除该用户记录。* G. k, L# _! g- p5 x! w
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。7 B* b; q; v) D
if(!($delete)) {4 f* T( B; q7 ]3 g1 p0 r7 `: e/ u. w
print "Useronline Delete Failed > ";
. a5 q; X8 W1 X5 g2 M) f}下面我们解决数据库中不同IP的问题
) `' L0 F6 F0 |9 ^, u- \$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用' I7 W$ D; U" a+ K! j; @
mysql_num_rows(query);来统计用户,代码如下。
- E& h( `" Z# ^2 H$user = mysql_num_rows($result);最后关闭数据库。
4 I3 @8 f+ o2 q0 rmysql_close();显示在线的人数。: y5 g0 U$ h% c7 a0 a
if($user == 1) {) ^/ ?, b/ ?- s: v% R
print("1 user online\n");2 M$ p, s% z- F
} else {% u) M% J/ j! ^1 Y' F% ~! L# b& ]
print("$user users online\n");
7 @) I- K: M0 |" K" c8 Q& q}最终把上面代码写成一个PHP文件如下。
6 v# s  o" H1 _<?php0 ?7 `2 @- K) n: @
//Put your basic server info here
. U9 E  v8 Y% t5 {0 W6 J) U$server = "localhost"; //normally localhost
# ?% c% Z5 D. i+ r9 ~$db_user = "root"; //your MySQL database username8 {  H1 x+ ?4 W
$db_pass = "password"; //your MySQL database password
# C5 Z& A, Q* ?$ Y! z' @$database = "users";
1 t+ t5 {" S9 h2 ^$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
$ j4 P# s6 [* p6 i2 u// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
, _# Q3 c( L: G// $timeoutseconds seconds)" O/ p" v, M$ w0 q$ h% ~/ n' F
//this is where PHP gets the time  j( I# {/ X) w9 L" L: T
$timestamp = time();4 b6 P0 g8 p) @! g5 h! {
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed2 T7 L8 u6 p- d" P7 t  q# K' Z
$timeout = $timestamp-$timeoutseconds;
' F! F1 I" u: h( v& D. G% o/ d# G//connect to database) `8 i1 J7 Y/ @: T! l
mysql_connect($server, $db_user);2 y; ?1 ~0 W/ E! x
//add the timestamp from the user to the online list3 \* J: h; w! u$ {- X: K5 }, Z
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
1 @& e4 Q' U, m; t('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
; u9 c, S/ k9 H) n8 V/ k5 [; aif(!($insert)) {) }# I) W2 ?; w6 R: k: ]
print "Useronline Insert Failed > ";( |0 z3 z" C, e8 @; k- D- F2 Z' P, a
}+ `+ I- V. _. b5 i
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.. ]4 q3 e1 u# y) t2 P- G( A
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
! N# v2 P$ {  N) a" uif(!($delete)) {
8 b! |3 M  E" ~  ?& Q9 w' Iprint "Useronline Delete Failed > ";
: J" R" e3 u) O}3 q9 v7 i2 s' G
//select the amount of people online, all uniques, which are online on THIS page% l% u" ^$ ~# ?3 j5 E. Z6 Q/ Y4 i2 Z) E
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");  x( X: Q6 ]' E3 u. d
if(!($result)) {" r# o4 |3 d; x& @
print "Useronline Select Error > ";/ d9 C) [( P  D' p& F# N
}
/ W- M0 A! v' [1 t4 A- ^//Count the number of rows = the number of people online
$ G) [  F/ u0 O; ^: l  A$user = mysql_num_rows($result);
* P+ i& p- m4 }3 h. K3 K7 h- g//spit out the results3 j4 a9 n$ \' g3 t: g
mysql_close();/ R- m; t, e0 W/ U
if($user == 1) {
/ {# z. l$ \+ O: Jprint("1 user online\n");# |: N: r2 c' Q* [1 u
} else {( a* F$ q) D* z; K
print("$user users online\n");
; M$ i; Z8 R3 e+ [6 K9 r}) ~& N  _% M% r' f2 n
?>  h2 C7 q9 i# u% C8 l% J6 ^% [) ?
5 m2 g' F7 t" p: S$ Q7 l" S4 E, B
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。" I, l3 \* J' P; z4 i* q
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
3 M4 N% {$ G5 f1 y2 H  |我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。( f- P9 I/ o% o0 @2 }0 Z% M; [  l
当然啦,这两款主机也是相当不错的。
4 d' `$ {7 @6 v智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年3 E/ l. e" t- m9 v$ Q$ w  T- \
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
$ E/ z* L* j" \8 C提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 2 S, G3 U+ x5 ?/ T5 l
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55$ b# q0 n! X) x3 }5 l( h
自己加QQ去问吧。

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