返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
& J& ~) q# o$ H  C我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。2 R5 C5 [( p; @4 H  L2 K/ \
首先我创建MYSQL数据库表。
. V" Z/ x) X0 e' CCREATE TABLE tablename (
: J1 v9 N$ G0 z6 Qfield type(max_length) DEFAULT 'default_value' (NOT) NULL0 q1 l; s7 L: K1 U* J! T" t$ g
}可以使用的SQL语句。
8 K3 ^) ]) ~* e0 t! `  _$ fCREATE TABLE useronline (
' q) c- d/ v  xtimestamp int(15) DEFAULT '0' NOT NULL,
' K: g, o+ ?: _9 M1 R4 E9 tip varchar(40) NOT NULL,
; ~. u) s5 J1 M8 N- y" w8 E6 c2 d+ [file varchar(100) NOT NULL,5 {$ K) A+ m" |/ H# k" W0 W' F
PRIMARY KEY (timestamp),
$ ~1 ?5 b% _8 n( a# nKEY ip (ip),& l# u$ ?/ W( J- E
KEY file (file)0 x8 b9 R( W. M% K
);下面我们是PHP脚本,首先我定义MYSQL的信息。
( h$ i' _4 B  ^/ k$server = "localhost"; //你的服务器
4 |2 y2 E, A. o3 P$db_user = "root"; //你的mysql的用户名' U* E3 y5 v$ m' Y) m7 W
$db_pass = "password"; //你的mysql的密码: ~- |" M4 `0 m3 [
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
9 W* H- ?: k) C- k' r9 D+ F$timeoutseconds = 300;取当前时间。
7 [  j  C2 l& ~3 ^( u$timestamp = time();上面的完整代码:
- {6 M' @+ U% a% W$ M<?php
5 V" A1 N* o2 S* ?2 W( T! E$server = "localhost"; //your server  n/ A+ }: U5 I6 w7 t
$db_user = "root"; //your mysql database username* A7 L: d0 |5 g! c
$db_pass = "password"; //your mysql database password if any
6 S. n- A' O" z6 M$database = "users"; //the db name
0 E8 O3 i* Y9 l' v$timeoutseconds = 300;//timeoutseconds limit
3 B! G: a) W5 q6 ?) g/ `' ]2 F//get the current time, ?/ }# i1 u5 l% K1 j  r; m
$timestamp = time();/ v8 l- k. o# b) T1 z
//calculate the lowest timestamp allowed
1 f9 y/ E  Y, V$timeout = $timestamp-$timeoutseconds;
; |8 F: N3 T! b  k4 n) M& \?>连接mysql
2 z' @, [4 \5 c* x- Wmysql_connect('localhost', 'username', 'password');也允许使用变量形式。2 n3 d- F: F- }* T% w# M: z+ a! }
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
% t* W- H9 _5 z) C! V3 \mysql_connect($server, $db_user);查询数据库的代码:
0 W; [" V7 O9 n/ [mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
5 e6 v4 T9 x" _) v$ `$insert = mysql_db_query($database, "INSERT INTO useronline VALUES1 f1 ^, |$ e% U# f3 t8 Z. ~' y
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");9 s" J+ M2 r( X8 f0 a- X
如果用户用错误信息的话,这样处理。
: K+ c+ A# D+ O0 Cif(!($insert)) {' n5 j4 B1 ~8 t7 w
print "Useronline Insert Failed > ";
& c+ D6 }8 ?) y1 h; `4 w( D5 h1 ^}然后实现当超过设置的时间就删除该用户记录。
) q  _# _2 n- ^/ z3 J3 Q$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。8 A) p; n+ G- F- G
if(!($delete)) {
! w1 d& I: E9 Y: C  @1 y& A4 Rprint "Useronline Delete Failed > ";8 X  n8 m( ~3 X! @4 b8 i
}下面我们解决数据库中不同IP的问题# U8 S# G$ x8 ^  q$ ?6 p
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用; `# O9 U' Q- W9 Q( K
mysql_num_rows(query);来统计用户,代码如下。8 p: C7 X8 p) `& ?5 m* f
$user = mysql_num_rows($result);最后关闭数据库。
! \) n" g# R0 R5 d6 ^8 k( U  L: Amysql_close();显示在线的人数。1 u* V& Y* n) C9 N* D
if($user == 1) {( T( I7 g; Z1 n
print("1 user online\n");9 s/ M: H) C! b2 o: @, z- t
} else {
# j/ _( m/ G& Z! @9 pprint("$user users online\n");
' S7 n; j# p+ l}最终把上面代码写成一个PHP文件如下。
9 ]# k" K1 A5 }5 }( V<?php
/ f& I& J! ~- P$ z3 `3 z+ a& g9 S5 T//Put your basic server info here
. b) k  I7 B3 j$server = "localhost"; //normally localhost, k; Y" T/ A! n8 S. P7 o! E" S- E) C
$db_user = "root"; //your MySQL database username
. Y- u5 L; z# X$db_pass = "password"; //your MySQL database password0 O* T+ \, J+ v+ }4 c
$database = "users";1 Z& u# X5 }6 ]
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are3 m# T; N, \* f# h+ g0 t
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last& m! B" Q% H9 R( I4 m) Q
// $timeoutseconds seconds)  v" C  _: O9 D& ?) r# I
//this is where PHP gets the time) L) E; R8 W1 Z& P2 b
$timestamp = time();
1 C, ?% b2 G" R; O//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed9 Q0 ]8 r, O0 V; w7 B
$timeout = $timestamp-$timeoutseconds;3 Q! V4 L% h9 g  g
//connect to database
- B2 V+ G- d( ~4 r5 {# r' p7 tmysql_connect($server, $db_user);
1 ~" C5 E3 F9 L9 }4 b4 u6 h//add the timestamp from the user to the online list
$ ]  J" E% ?* U2 A( Q! i$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
& G0 M4 [; C/ `2 J/ q& y! j('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
) C, d5 q3 `/ \4 B9 g* E; Mif(!($insert)) {
& C- }/ m* W4 l  Dprint "Useronline Insert Failed > ";4 l* n/ F* i. H- h5 t. i# w% X, z
}
5 @' ~% g# v+ M' W) i# J//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
' C6 U4 D' \3 S# d6 y6 i/ ~$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");* o8 k  y3 Q9 b" G
if(!($delete)) {; p$ C- ^7 `' x; K& l& l" V
print "Useronline Delete Failed > ";
- q# n. \* Y* X, Q4 G$ J7 J$ r}
( d: L- `  k; v$ ~! o. Z! N7 W//select the amount of people online, all uniques, which are online on THIS page: c2 n2 w) V) i  |8 V/ I- c& b
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");. d% @; }; E% I% p$ ~' h6 X/ g
if(!($result)) {3 I& m1 ^+ C3 E" x! t
print "Useronline Select Error > ";  }+ _+ W6 N& {; B8 j! d5 ^
}6 [7 l* N2 ?8 W2 h* r7 w
//Count the number of rows = the number of people online( _/ K! ?) _$ S& \6 ?+ L% b: L% g
$user = mysql_num_rows($result);
7 g* m6 Z+ l+ s( _  g% P+ H//spit out the results7 U5 B( P% q% D8 p8 M+ r
mysql_close();
# X4 M  x; V  _if($user == 1) {
/ J0 z  F% }3 }' J3 J; _print("1 user online\n");) P+ F4 |, G3 l
} else {
, d# a6 s1 @/ T; X' wprint("$user users online\n");5 U, B1 z  n( G2 T) V
}! {; T, g5 j" w& C) Y
?>
9 p. \. l9 _+ f" c2 b, C% w- P5 a# V
2 b! p' B5 u  W: K& s以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
" z! S( d) G! A& M时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
1 d5 v, m' `  c我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
9 Y& n1 d. b* p7 U# c当然啦,这两款主机也是相当不错的。* G: ~  Q3 N, o/ n+ a
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年6 G, N6 J. _/ s9 A, h6 x# G7 L
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年9 g1 l1 z8 S' A, [0 q9 b
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
4 N& u2 n. t" `' w2 R8 |+ R空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55; r% z/ h( r: M
自己加QQ去问吧。

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