返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
6 t$ H7 Y% Q% W0 ^& Z7 G& T我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。/ D% x% i7 ]1 B( X+ i8 l2 Y
首先我创建MYSQL数据库表。0 q, \$ B- v# l( X( ~8 _+ H
CREATE TABLE tablename (
4 ]8 c6 T' }( \( Lfield type(max_length) DEFAULT 'default_value' (NOT) NULL
9 P0 k! P; b! S, k8 i1 a; W}可以使用的SQL语句。
3 z- k' Q+ f/ t& @; I! J$ dCREATE TABLE useronline (! y& j- Z6 i5 K& U& k
timestamp int(15) DEFAULT '0' NOT NULL,
; Z1 I8 V8 x. k; I, rip varchar(40) NOT NULL,
" Q  r( m7 F6 K" dfile varchar(100) NOT NULL,/ H6 ?  X/ W! X3 z6 I
PRIMARY KEY (timestamp),+ K; _- T" W" V! n, y, E5 J/ t5 o; K7 E
KEY ip (ip),
* W. N) l' H: ?, @" N' EKEY file (file)
" m- T5 a7 d5 v2 Y3 l7 d  \);下面我们是PHP脚本,首先我定义MYSQL的信息。
, a7 ^: B; ^& n/ o: a, p$server = "localhost"; //你的服务器
& f2 \  G* A7 d( }3 N6 J: z8 g& C$db_user = "root"; //你的mysql的用户名
+ K/ m: D! L; l9 |$db_pass = "password"; //你的mysql的密码) f) d, Q+ w% y. a; }
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
4 L7 K% Y  s# G  I, y! i# q; h* o8 P$timeoutseconds = 300;取当前时间。
$ p- p  r5 X* g- x2 A) f$timestamp = time();上面的完整代码:3 ~$ x# ?; _9 C5 {0 L0 f( ?
<?php
( I' I' W9 F( _0 d! Y3 H$server = "localhost"; //your server: b6 ~! f* ^2 g  |7 n8 ?2 b+ I
$db_user = "root"; //your mysql database username
0 ]# B! D7 i' s8 p- G0 w( h$db_pass = "password"; //your mysql database password if any/ R, D% t. Y, A/ u) S& D: x
$database = "users"; //the db name
0 p2 ]0 x$ L3 c1 B6 \; |$timeoutseconds = 300;//timeoutseconds limit5 J/ V6 c$ E7 B6 u. ?: D
//get the current time; W7 d0 c& P1 I8 T% o
$timestamp = time();
- f+ r1 s* l5 Q- a# p  m: o: o9 x//calculate the lowest timestamp allowed
6 W; l. Q: e: s$timeout = $timestamp-$timeoutseconds;
7 @! N* _9 W, ^?>连接mysql
, v+ D0 z- v; _8 Fmysql_connect('localhost', 'username', 'password');也允许使用变量形式。8 i( Z% P) }! o* P$ `
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
6 u! r9 ]5 G* P2 ]mysql_connect($server, $db_user);查询数据库的代码:5 A% W- b+ g7 f+ l
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
/ N" ~4 a; B. P. p- H8 \7 A7 J3 u$insert = mysql_db_query($database, "INSERT INTO useronline VALUES- P* k& h+ X# S7 A7 z6 F
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
  f/ L! {3 R: e& s" g如果用户用错误信息的话,这样处理。9 X2 Y' i) _& Y0 k* i
if(!($insert)) {- A2 o* U+ O4 d5 Q& k" n& c
print "Useronline Insert Failed > ";
- F, T2 l* P0 }8 u% r$ y}然后实现当超过设置的时间就删除该用户记录。
5 Z; U7 b* f' f6 i, Z# {: G$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。; T* u1 d; G: X9 M0 c  S( y
if(!($delete)) {( S' D; x% |( r* p+ ^
print "Useronline Delete Failed > ";: y; V- r) `+ Y+ \" i, ^/ {
}下面我们解决数据库中不同IP的问题, L5 k" n* d( |6 G& L
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用" X9 b) i3 ?6 I* r7 g, a
mysql_num_rows(query);来统计用户,代码如下。' S, y* W: }% x: t5 {
$user = mysql_num_rows($result);最后关闭数据库。
5 ~$ x( T/ m' r( w: Emysql_close();显示在线的人数。9 o: t5 ^" E1 O% y- M
if($user == 1) {
* r- u" }1 L. g6 f( Oprint("1 user online\n");0 l5 Y4 J; h% A3 ?
} else {
, m+ ^7 N4 Y2 v) |5 bprint("$user users online\n");' c+ {1 {  c0 Q
}最终把上面代码写成一个PHP文件如下。
% ~: `$ [& ]$ Q; s2 t<?php) t4 ]6 g6 ~  \: q5 `( Z, E' B/ u) K
//Put your basic server info here
8 m  M& a8 A& n5 q, E' z$server = "localhost"; //normally localhost4 K9 @0 q- O; G1 [3 O! t. q
$db_user = "root"; //your MySQL database username8 c2 g2 z: y( K+ p; a1 }( [6 w, p
$db_pass = "password"; //your MySQL database password6 k6 S: a5 w7 g6 u( U
$database = "users";
. w! {4 e2 ~; e0 Y  H/ x4 J$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
8 L! |7 P: E5 e- _1 n+ m// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
9 V2 j! t, E  @$ ]3 i" \// $timeoutseconds seconds)8 m# ?9 ?( V1 Q  y, V8 g( [3 t1 G5 [" [
//this is where PHP gets the time9 @* E$ }- h5 Y) i- d
$timestamp = time();
% Y! k$ B. N  y) u+ C$ t//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed+ J" E6 n+ R; z
$timeout = $timestamp-$timeoutseconds;' z- l; Y4 k: D# W8 W
//connect to database2 [/ _4 J# Y4 g3 D! A8 z; C
mysql_connect($server, $db_user);! I, D$ I  Q. I" }
//add the timestamp from the user to the online list" W6 N  @7 ~2 Z+ A" S1 |2 o. ~, Q
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES4 I& F" S4 T! ^  _, g
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
8 g  ?/ t' l5 q- F# vif(!($insert)) {
% H2 C( z. g8 ~8 B( `, vprint "Useronline Insert Failed > ";) F0 L/ m) R9 F0 y' J0 m- Q" g# V9 a% C, _
}
; J' }- N2 Y6 v# W0 L; L//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.1 h9 l) B. M1 T% v# L6 P! B8 p# j' o
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");: g7 y* q0 O! a0 i9 j
if(!($delete)) {
. E0 x4 U: _  q% R* b4 mprint "Useronline Delete Failed > ";/ ^$ b( e% _2 A5 s
}2 I0 F9 f7 ~  o8 j. {
//select the amount of people online, all uniques, which are online on THIS page
; i4 C" d1 D" a" L  i/ ?5 l% K3 u$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
% o: D5 a) J. T# m7 s) C# Wif(!($result)) {/ A; ]/ K) }4 L
print "Useronline Select Error > ";
6 P/ R% b0 s4 ?5 w" a. G}0 h) e! t& Z$ ~3 h
//Count the number of rows = the number of people online
, ~8 w  n$ X$ Q4 |8 L! _$user = mysql_num_rows($result);
* b4 Z. ?5 ]9 e& h) g% i6 C' _//spit out the results
( y* b) u3 ?) O* W7 C' E0 x$ M: u4 Gmysql_close();6 t. l" @! f8 M; n& V
if($user == 1) {+ I% [! \: ?! t3 h
print("1 user online\n");
8 k! \1 l; E7 _. m; f} else {
$ U0 F& y3 t; v5 y6 f/ z. iprint("$user users online\n");+ K+ o: b) }' s, {* L7 A
}
2 {# U4 E. }+ W?>
1 [! T( v3 R) x; l# A# A" z; R# \0 k7 }& ^- M
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
3 h8 U) @; h' q+ ]时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
7 A1 N+ x) ]" W/ N. w我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。5 d/ g- E% C) ?- W5 t# [) s1 ~
当然啦,这两款主机也是相当不错的。
6 N, y* b; }: D( J9 p2 d6 _智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
8 ]1 [% j' @% x# t, {) V标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
6 w" `7 A; K+ }3 n: E% j提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ $ O# M- E& s( e6 P2 ^
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
* J2 W0 U  ]0 k" T. _/ ]" A3 W! W% y& k自己加QQ去问吧。

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