|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
( @. W/ m" X, u; a我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。5 ]) S- v( l: g
首先我创建MYSQL数据库表。
m W3 a5 g! V8 V/ f Y. QCREATE TABLE tablename (
$ h7 [. Q; V+ A. u, qfield type(max_length) DEFAULT 'default_value' (NOT) NULL
! J+ ^8 z9 ? q: J' p' o; p: {) a}可以使用的SQL语句。
" f2 s8 ?0 o4 \ I" |- v7 [ Z. S. WCREATE TABLE useronline (
' i% p) D% ?+ C9 I7 Xtimestamp int(15) DEFAULT '0' NOT NULL,
/ A, L- K" o9 }( K: qip varchar(40) NOT NULL,% O0 u" A4 v- f7 }5 z
file varchar(100) NOT NULL,
7 E. b: K# J. j9 Z' XPRIMARY KEY (timestamp),* k9 T. r6 W( _& O) [/ Y( M$ u
KEY ip (ip),
! S K/ t$ Q: V; S! ^% MKEY file (file)
7 K& a0 j8 Y5 X6 J! p; S: a- C7 m);下面我们是PHP脚本,首先我定义MYSQL的信息。4 I2 s) ^0 A- G% g) z. C' e1 [
$server = "localhost"; //你的服务器
9 q1 O5 A4 f: Q5 e: ^$db_user = "root"; //你的mysql的用户名$ b8 K( t! q+ T% m! R$ }
$db_pass = "password"; //你的mysql的密码8 O; J3 Y' q, i
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
( j* L; ?: v5 p: F; v$timeoutseconds = 300;取当前时间。! D7 t- A# N" u" @. D% ^
$timestamp = time();上面的完整代码:1 X; M/ V" e/ S; e4 R
<?php
" l. s; z/ k/ d1 g0 w3 M% h$server = "localhost"; //your server; K \' o7 F8 E6 u) ^/ j
$db_user = "root"; //your mysql database username
( G, ~. k5 u" B8 P2 h+ A, @; k$db_pass = "password"; //your mysql database password if any
6 F" n( o* |; f I$database = "users"; //the db name
: P2 B3 ?% T( i/ d7 p) u# m6 P- ]6 G$timeoutseconds = 300;//timeoutseconds limit
$ N9 \# y S& ]/ \, I* b$ [' t//get the current time
) {1 p. o% [! l1 x$timestamp = time();
/ E. s0 L6 `# {4 _* t2 Y9 J//calculate the lowest timestamp allowed
1 x* i2 R4 G3 L; ~$timeout = $timestamp-$timeoutseconds;
) r6 m; e! R9 W. u# g" e?>连接mysql/ ]+ D* D9 t% I& X" V+ E
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
2 j, M$ m" C, Q" R3 Vmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
, w0 p3 Y" p! ], D5 R ]" j0 J; x+ Rmysql_connect($server, $db_user);查询数据库的代码:2 |/ ~5 z6 A1 G% }" k
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。+ z/ E. l% i) D% z
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES# O% J, C% n3 M. J& w6 m3 M
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
3 B! k& v8 {* F3 ?# _如果用户用错误信息的话,这样处理。
4 N* G1 v# q- u% h _if(!($insert)) {0 T/ v; ?4 o' y
print "Useronline Insert Failed > ";
9 ~. I$ G; _3 r) v3 Q! i}然后实现当超过设置的时间就删除该用户记录。/ Y5 t8 G1 e9 w: G9 X
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。4 `- d6 f7 L9 S0 j0 Q# Y- e
if(!($delete)) {1 a. l) I, I% G3 V! B4 a, ^
print "Useronline Delete Failed > ";
# F) u* _6 p/ l3 ^7 q}下面我们解决数据库中不同IP的问题
# ~: I& y9 B5 q" ]- z5 w4 Y: a$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
0 ~4 i7 S& c- q9 Ymysql_num_rows(query);来统计用户,代码如下。
& Z7 r# m! z; n* d( O8 x! F9 l$user = mysql_num_rows($result);最后关闭数据库。
( G; x8 Q9 |1 E& |$ U& mmysql_close();显示在线的人数。( Z7 f! h3 k. v
if($user == 1) {
* Y+ J" {- q( j0 q7 ]/ Hprint("1 user online\n");
7 g4 H) J" D, r} else {
2 E7 R9 m2 O2 q/ B* A. V" F: Zprint("$user users online\n");
S( |4 v7 z7 L3 q: }( D9 l}最终把上面代码写成一个PHP文件如下。
% K* o6 H6 v" S: g% E- E<?php
) L+ o3 k4 K$ L W4 b' [4 _6 w//Put your basic server info here1 t3 z" N7 U6 q- M: |4 e2 i
$server = "localhost"; //normally localhost& O1 e4 ]. t9 ~
$db_user = "root"; //your MySQL database username1 p5 v/ x" w0 S( Y$ j1 s
$db_pass = "password"; //your MySQL database password
$ A# x% ~) ]8 [$database = "users";+ W: Q3 j' T) F& [$ q( t" n
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
! W2 _! x2 }, R( m/ p: N// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
! E; [9 D0 |9 E0 y( F// $timeoutseconds seconds)
_& N7 R( O, Y, E//this is where PHP gets the time' j0 _ J4 c6 R
$timestamp = time();% E2 y& z7 Z% S2 a1 e* k
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed# t0 R( t' f4 C7 R- \
$timeout = $timestamp-$timeoutseconds;
6 \+ T4 ~1 _1 O//connect to database
* G7 v3 a. R0 n! z6 t ~mysql_connect($server, $db_user);( [' V7 \+ M. j/ O' l
//add the timestamp from the user to the online list
% x: K5 t8 r, j$ O* V# j' m" R8 U$insert = mysql_db_query($database, "INSERT INTO useronline VALUES' A, \9 R+ k" a5 `, q2 J
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
: f8 M, @) V) e$ jif(!($insert)) {% n% E6 e: G7 }2 ~
print "Useronline Insert Failed > ";# k8 W5 c/ P* a) [
}/ N; r' @! m: x) U3 ~/ h: p
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.; K9 G+ _( p& m4 A9 S
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");& ~# y/ o. Y4 F# r- l j
if(!($delete)) {7 {4 `8 O. d, @5 X3 t- N+ z/ s C
print "Useronline Delete Failed > ";: @' j$ e# G* ~8 p. L
}
* ^* d# M, G! k8 N2 C//select the amount of people online, all uniques, which are online on THIS page
6 ?+ J2 Y( U, u, r1 }1 m* Z( i$ D$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");$ i2 W$ x1 ]. [* A$ n P7 D
if(!($result)) {
5 ?) ^! Q# I7 d$ X! L( Aprint "Useronline Select Error > ";
# {: k" N' h3 Y) G}
' h0 C% I- r( _( G: |/ F% b2 ^+ m//Count the number of rows = the number of people online
( i. P3 M7 C3 {! W8 W% x7 l9 U$user = mysql_num_rows($result);* Z2 W" I- p4 b Y6 g; Y
//spit out the results9 b8 h7 m5 c2 V! l5 w& L* d
mysql_close();
$ `8 {# o/ |6 Iif($user == 1) {
; E3 X4 T$ z7 c. W B$ [print("1 user online\n");" ~! j4 k7 }. e% d$ V
} else {
) D6 K0 D. A4 n1 \4 L/ }$ mprint("$user users online\n");" |1 z+ ^& \9 I& v. q& ]8 O$ f
}
* o% i! S* w1 j! g?>1 o; D1 d+ D, O5 O& Z

) O! u! _( G5 O, y" B. A以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
& C/ b, P. S) [& H C) L. }! R% m时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
6 d7 _1 |' M( G O我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。' Y v! y' I6 x0 a
当然啦,这两款主机也是相当不错的。3 {9 E+ Q- `0 c7 y
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
& s: `4 F6 t4 m) A6 A3 O标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年0 b7 B+ U; E& `0 K8 Q/ R
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
* S% H H& ? p0 w空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
$ _# g# I. |8 G" y. }. X自己加QQ去问吧。 |
|