返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!# t* r! ^/ p4 g8 E# c) B$ y
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。9 x' {( h4 ]/ d1 W  i( v3 `( j' c/ S
首先我创建MYSQL数据库表。
3 t3 ~- |1 h# D% A* FCREATE TABLE tablename (( f+ t( a; c6 R7 O; f: C4 f
field type(max_length) DEFAULT 'default_value' (NOT) NULL
& E2 W1 R5 R1 G$ J& {% D  E, {}可以使用的SQL语句。
+ a0 V0 u" T2 {1 {. ]: rCREATE TABLE useronline (1 x. x$ n- g! W! u
timestamp int(15) DEFAULT '0' NOT NULL,; {6 m- Y$ U( _8 W
ip varchar(40) NOT NULL,; P" u! P7 }- `2 o7 i
file varchar(100) NOT NULL,3 e& Q7 A$ Z" P# b1 V, L
PRIMARY KEY (timestamp),  r6 }; [) S# O# V
KEY ip (ip),
. z4 g2 U( G  oKEY file (file)  h. t- N( C6 H4 _6 Q
);下面我们是PHP脚本,首先我定义MYSQL的信息。5 C, X" E2 B, v' q3 q
$server = "localhost"; //你的服务器
  S4 G& a* e  B0 S! h# R' P$db_user = "root"; //你的mysql的用户名
' h. d' A1 K3 q3 r5 F$db_pass = "password"; //你的mysql的密码" t/ T' n# i% y3 t. E1 @0 _( @
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
+ }5 x7 T  _3 R' O. K$timeoutseconds = 300;取当前时间。6 `6 X  p. v! M4 H
$timestamp = time();上面的完整代码:
2 e6 u# J" x7 s! V<?php
; ]. @: T1 A0 e& c& Y/ |$server = "localhost"; //your server9 p7 k& Y3 p# ]; M' H: h) J) L
$db_user = "root"; //your mysql database username
' @- p, C" l6 {( g- G1 m$db_pass = "password"; //your mysql database password if any
# j: h* d$ G4 w$ J3 S$database = "users"; //the db name
) Y/ O. Q: Z. ~9 s0 U$timeoutseconds = 300;//timeoutseconds limit/ Q0 I8 X7 x6 J" W
//get the current time
4 _9 K1 s4 r- E2 c; [( x+ {; h$timestamp = time();
' c) h( Z/ s7 ^* ]//calculate the lowest timestamp allowed
  _/ D; J% \# D. I% F0 p9 ]$timeout = $timestamp-$timeoutseconds;' H* d# U4 W  X# _: Z0 q' W3 @
?>连接mysql' ?2 S1 i5 @9 Q/ }; T
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。' w" A5 M+ E' l' e/ v) p
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接5 Y/ B0 u3 U& u
mysql_connect($server, $db_user);查询数据库的代码:
2 k7 y5 Z: J# [* V/ Umysql_db_query('database', 'query');我们只要有访客就要增加一条记录。3 i! o# V+ O) n4 I; B) L% j
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
. t* v- p( w' I) O8 ]8 G, \('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
0 C! K- k" Y( `* u3 o/ B如果用户用错误信息的话,这样处理。
, ?" R1 W) U* N' K- S0 j: b% Jif(!($insert)) {7 N* X' R. j6 B
print "Useronline Insert Failed > ";
+ h& ^( F8 Y6 K7 u& Q7 E}然后实现当超过设置的时间就删除该用户记录。
, T) [( H. H" m% M6 k8 r; A$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
! N  N2 U8 R- W9 A5 C5 e/ eif(!($delete)) {
/ g6 [) x" Y% T" Rprint "Useronline Delete Failed > ";. G% ?7 E# `: t2 i/ |, W4 \# e
}下面我们解决数据库中不同IP的问题8 @. o' J: k+ y
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
4 `) z4 u+ B2 X# U5 s% {mysql_num_rows(query);来统计用户,代码如下。
: g$ \* K9 k$ m9 X8 E: X0 t& R$user = mysql_num_rows($result);最后关闭数据库。
2 V  S& Q! l9 P* ?mysql_close();显示在线的人数。
% U0 ^6 p4 V) H  E2 Iif($user == 1) {
0 a' _; a! D4 Q- }# bprint("1 user online\n");
- Z) d& P) k5 W5 R" f6 D} else {8 ~6 Z+ i# p+ p$ R4 r6 d
print("$user users online\n");* p) J7 K0 h# x, I/ L9 v
}最终把上面代码写成一个PHP文件如下。
" ?% c  L9 Q/ Z- ]* x<?php
2 q7 @3 z$ y/ h7 b//Put your basic server info here- [  g% A$ X4 N4 y! z. ^
$server = "localhost"; //normally localhost9 d5 \! V5 h4 d" f4 G
$db_user = "root"; //your MySQL database username) N( J+ j7 i" g# s9 c2 B0 ^0 e/ Z
$db_pass = "password"; //your MySQL database password$ K9 E7 a, n7 K& M' v8 Q
$database = "users";
3 g( w$ a& h6 k' M0 a  k8 e$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
9 Q' N  Y' d! q8 k9 W# }: d2 |! L// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
7 X' ]7 y7 `6 r) }// $timeoutseconds seconds)
6 d$ T, H# g# B//this is where PHP gets the time, v, S& m! b$ T) H8 P; F2 b
$timestamp = time();
, \5 q3 B% ^! ~) ]5 I//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
1 E, G6 Z3 p5 ^$timeout = $timestamp-$timeoutseconds;
" \9 d6 V2 `4 y2 f: @! r3 [8 D# w" _//connect to database- g+ [/ O' @2 y0 i9 R
mysql_connect($server, $db_user);
; w1 h0 B7 D0 K) T' W, j3 o//add the timestamp from the user to the online list: Q7 ?& s+ M5 y4 z" Y2 |1 V  ^
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES7 {; A; P) F& J1 \, {+ {* \, Y* S3 T8 }
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");, E: `0 C& O9 U* |. t! x# l
if(!($insert)) {6 l; i# K8 b! [) a( T' U: J$ c* d; `
print "Useronline Insert Failed > ";
$ W# u% k  S" i  U+ ]- h}
# k; c2 |- R) s5 r) J//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.3 V# Z$ [5 i7 o8 W# t
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");- v, R! G# S. f7 q$ T' G. E/ V
if(!($delete)) {
& s& h1 L2 E: R0 l" Rprint "Useronline Delete Failed > ";# v7 |8 }1 H' f8 o9 p8 A3 V- W- P) s
}9 J& u8 W) C/ w' U9 T; ~
//select the amount of people online, all uniques, which are online on THIS page
  v$ U; b% N8 I1 }8 M# _$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");5 i4 J+ v% }. A: T, G$ A$ K' n
if(!($result)) {
5 \' x( h) m& v3 T# n% G; vprint "Useronline Select Error > ";2 w+ e  J6 k/ c2 c# G. T
}) E" X+ ?) k5 N& Y' @( F/ _
//Count the number of rows = the number of people online
" S& C& S( {. }; M$ p, q$user = mysql_num_rows($result);
  W4 g& I. z% p& [' l0 A//spit out the results/ U) E: s0 l) h- o
mysql_close();
- \8 j. |) \$ F* `( t0 ]if($user == 1) {
% w; Z7 n! B  D2 @) q7 ~- Mprint("1 user online\n");( y9 n4 i0 ^7 F. J4 }' N
} else {
# m2 m# C+ z1 ~1 Z! vprint("$user users online\n");6 Z, v* ?0 Q+ Z1 {3 X
}8 ^6 y% L1 N$ z5 t: K
?>
% {: r0 X8 y8 N" O2 M# Y! f3 L) K( R3 m4 M  m8 y
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。: x! O; g7 Y  i  g8 L4 F1 B+ T! ]
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
3 [4 h! d3 ^) x9 s! N% Q9 v我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。: s% P1 S) Z3 W+ ^- H
当然啦,这两款主机也是相当不错的。
* P: E* c6 \7 g. @3 H) o7 W3 V# r智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
; u9 b4 n' \- T4 T8 |8 q3 t标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年2 f9 H* A! q* J, g
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
, g0 d# [1 y$ \3 U4 m空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55( M9 T' W7 F+ E; o4 y* s6 `
自己加QQ去问吧。

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