返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!5 X( h' D! D. P1 _! ?* M; S7 d5 W
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。* V7 l# S3 F+ m. \# X
首先我创建MYSQL数据库表。, T# Z+ K; A  M0 a+ f
CREATE TABLE tablename (
- G% Y) W6 H8 Hfield type(max_length) DEFAULT 'default_value' (NOT) NULL
! c1 W" V, }/ v5 F( e/ x" C( x' r}可以使用的SQL语句。- q! ?1 [3 _1 `: i& R( w( f
CREATE TABLE useronline (
: t9 Q" V# B9 d4 j; G+ n$ C2 Ptimestamp int(15) DEFAULT '0' NOT NULL,
$ e+ M  \% A3 d- \9 ?ip varchar(40) NOT NULL,
/ V) P5 w4 M( S4 r, h. jfile varchar(100) NOT NULL,
& S1 A8 n1 f8 F8 C; W; a( D* UPRIMARY KEY (timestamp),
8 Q8 X) E: K4 W4 L2 ]9 U4 h% z  xKEY ip (ip),2 `7 ]: F4 q/ R
KEY file (file)3 L1 ^5 W0 q+ N8 a5 s. K
);下面我们是PHP脚本,首先我定义MYSQL的信息。% e5 v, M8 D9 d' H2 G6 |9 c+ |
$server = "localhost"; //你的服务器
0 j& [4 y! j. a( O& L$db_user = "root"; //你的mysql的用户名
4 M; A" }* |4 H/ G' _) i% Z$db_pass = "password"; //你的mysql的密码
4 `; v0 K% O8 Z& P2 x. F& y; k$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
7 I5 k, K$ V* {3 z$ V8 {% U$timeoutseconds = 300;取当前时间。
2 B: j2 \, u  s! h$timestamp = time();上面的完整代码:
, u" ~- a. I5 M. f<?php8 m  D/ N! j' ~* _: {
$server = "localhost"; //your server3 |+ L+ g2 h1 p2 M1 Z) U  Z
$db_user = "root"; //your mysql database username8 s6 l$ n2 _' `" {; X8 Y' i. A, m
$db_pass = "password"; //your mysql database password if any
5 y$ T, i/ B6 v' U* R1 a$database = "users"; //the db name
+ U( _& [8 j. [  F# @8 T4 \$timeoutseconds = 300;//timeoutseconds limit
$ `" t) Q) ^; ^# }' S//get the current time! A( X7 i$ s; ?$ b
$timestamp = time();
$ c8 z$ s: X$ E, ^& r6 r: J//calculate the lowest timestamp allowed
2 W9 x, i9 J5 I$timeout = $timestamp-$timeoutseconds;
* I0 g0 e! w( H6 d?>连接mysql1 @& c: s/ Q4 e) C
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
9 [1 x- ?9 Y# q; f. Nmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
% T5 a  q* {9 j2 g1 `& y/ Ymysql_connect($server, $db_user);查询数据库的代码:
8 {4 y* U. |  Q+ p/ p0 @mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
. h9 z7 _+ Q" B# k# c6 J# \3 ~$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
( N. O2 {5 W4 |. @' {8 g('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
( y8 w% X- g" _: d; ?如果用户用错误信息的话,这样处理。" A* J/ @) {" {, @8 Y+ I& }
if(!($insert)) {
! o6 o. R+ x! Q. r8 lprint "Useronline Insert Failed > ";
' i' u5 ^! K# P4 Y}然后实现当超过设置的时间就删除该用户记录。- a. W  P- R9 o9 Y
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
8 t( q. ]) v& i& @if(!($delete)) {
+ A) y& N4 X3 dprint "Useronline Delete Failed > ";3 d8 l( c/ A2 ~0 D
}下面我们解决数据库中不同IP的问题
* P& R4 e: a  R$ ]* B$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用, X. V, w& d! T& w) Q8 Y& L
mysql_num_rows(query);来统计用户,代码如下。
% r7 d5 S8 B. o$ ~9 m7 P$user = mysql_num_rows($result);最后关闭数据库。
: ]: P( E8 O6 D  X5 Gmysql_close();显示在线的人数。3 ~$ l' e$ J7 h9 ?' ~; K) s9 g, g  z
if($user == 1) {$ f5 x* s0 f2 B. e* k& I  d
print("1 user online\n");
" ~. f6 a+ W' [} else {; W, ~; y& m4 `3 g2 s: L- W; v
print("$user users online\n");- ^; D& w5 R  p- G( }9 ~
}最终把上面代码写成一个PHP文件如下。  p7 a) T- N, J
<?php; n( b4 J1 J1 y% L( F4 a
//Put your basic server info here
' x( P% r( Q0 v$server = "localhost"; //normally localhost! O' j$ V  k; D- D+ P
$db_user = "root"; //your MySQL database username, p0 X) _. p8 A! s1 T4 j- r3 ]
$db_pass = "password"; //your MySQL database password
; A- b6 O! M2 E5 B. Y  f$database = "users";- n  h- k+ d. A+ @7 p, T
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are' ~2 W7 d! A3 v, }5 f& G7 b, e3 ?
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last# G7 q1 o4 L& d; T
// $timeoutseconds seconds)6 z( j  \  Y( M- O  }* q5 v4 y
//this is where PHP gets the time6 d# p* f$ h$ A( O6 s7 R
$timestamp = time();
7 {" ^! ~! S  Q" V1 l9 B1 J//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed8 ]$ F6 V9 A" O, \/ H4 [
$timeout = $timestamp-$timeoutseconds;
" B/ g% b& }: v" K; \7 r* p. |//connect to database
- D) \& D. T6 K# p; imysql_connect($server, $db_user);8 n2 v$ t" J1 c3 ?6 p
//add the timestamp from the user to the online list( T$ U; K# J; c
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES2 X& l1 p9 {" a3 r
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
3 q) S' c* o: v  k+ @) Zif(!($insert)) {- ?7 v5 Z9 K  ^  z% w
print "Useronline Insert Failed > ";6 G) J6 u2 I5 S( b0 O
}3 [" E" M3 C. f$ Q5 W$ @
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
6 o% f. I+ ?, Q& Q: D- {/ A- f$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");8 p/ i- Z  ]& N8 f" Q0 E7 w. L
if(!($delete)) {4 x! m% x1 U% ~! L! c
print "Useronline Delete Failed > ";4 G- r% m  `3 `6 K4 h( s+ q
}, v0 n+ Z, H# i
//select the amount of people online, all uniques, which are online on THIS page7 U7 U9 L" g2 R; |% ^- [
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
; a' S, q% i$ [if(!($result)) {9 S% W& }! |2 e/ Z7 o
print "Useronline Select Error > ";! D$ _" \6 R* H/ f* i5 T) r
}, h/ G  M! Z. C7 n% r1 w4 D
//Count the number of rows = the number of people online$ L0 H; b* V' o2 @& s) ?) z
$user = mysql_num_rows($result);, D2 J1 q/ I* `) L3 w2 O+ @: x
//spit out the results
: E1 n/ G& e3 `& b$ @5 `mysql_close();
, K2 K! h6 h6 f6 R% sif($user == 1) {4 f5 l* s$ M4 S0 h% W  H! D
print("1 user online\n");+ x4 [# \8 S* @- `
} else {8 B' d: j2 U* w+ T2 \
print("$user users online\n");5 A% o, c0 g* [% ^; M& f
}* B# b+ |2 Y  h: R8 Q
?>
. u# z+ P5 M- q. }
" p1 J8 d$ U& m" D+ J以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
5 E  L+ R# i3 X" E8 h9 q0 l$ H时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
7 q  h* I& k! _9 q; q' r) S我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
+ S/ R! E3 c. f8 Z: w$ ~当然啦,这两款主机也是相当不错的。$ p" l: ]! H* R0 ]+ H# g7 q( z
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年" d3 a9 b/ T7 u; t6 I$ E; }
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年8 E# l" V) a+ m: ~' h  }( D4 h- m
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ . H7 ~$ i* v- z: D( H$ \& B" B
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=555 k; v2 q3 m& M& m
自己加QQ去问吧。

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