|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
3 A4 U( |& e3 O- B6 q0 X7 a* q; s; K我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
4 Q5 y" A) |; I& Z) Q- y2 U) m4 h首先我创建MYSQL数据库表。
9 s7 b: L1 B0 g0 jCREATE TABLE tablename (
% i! a. o& d1 ~! ]) H ~field type(max_length) DEFAULT 'default_value' (NOT) NULL* M% S6 ^& }% D& k8 N
}可以使用的SQL语句。3 ?7 S4 G% M3 R$ r, H
CREATE TABLE useronline (4 i) g* e, O$ }" r, r* n0 u5 T
timestamp int(15) DEFAULT '0' NOT NULL,$ }8 ~/ l4 m! L# Z# s% l: a- h
ip varchar(40) NOT NULL,
" S: @3 O4 W. y8 X* zfile varchar(100) NOT NULL,
& r, N5 m% [1 bPRIMARY KEY (timestamp),
( I: s+ {* x( E5 [8 F" BKEY ip (ip),' ]% m2 T2 E- C: W
KEY file (file)
8 K& p4 G$ _2 e5 D);下面我们是PHP脚本,首先我定义MYSQL的信息。+ T+ d1 B: G9 X- [' A8 @! i1 \) l
$server = "localhost"; //你的服务器
0 |* w! s- j/ Q$ f- N/ D `" x$db_user = "root"; //你的mysql的用户名
# x2 |& o: i9 B- D* {( A$db_pass = "password"; //你的mysql的密码
+ g5 h4 N2 B ]# d1 F5 B: N3 ~$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)1 j# n. ^3 \+ U' U* \
$timeoutseconds = 300;取当前时间。
9 {. p, S% n+ Z% u. K j$timestamp = time();上面的完整代码:
8 i( w# [+ D" X' f( T1 c<?php1 t+ R% I* E$ Q3 j9 r7 t0 E _, U
$server = "localhost"; //your server
% X. ?( k0 S4 ?: s$db_user = "root"; //your mysql database username
- q9 k1 g1 w9 m8 i$db_pass = "password"; //your mysql database password if any; U, R! K% S3 g5 z* C9 V; G
$database = "users"; //the db name
* y+ f; W9 s6 s) L! O, [$timeoutseconds = 300;//timeoutseconds limit
0 z9 Z* Q3 I( p( Z- F4 ^& ]2 g//get the current time+ F, A; b4 F& o+ H
$timestamp = time();" F6 z) \. O' s: J4 |* s
//calculate the lowest timestamp allowed
5 C2 j) [$ k3 o/ e8 J$timeout = $timestamp-$timeoutseconds;
/ S4 o6 c, F! a?>连接mysql0 x/ f' f5 z( o b( T
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。1 Z: F( X1 L7 R' I" }0 t4 L
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接; q7 `9 |$ U. Y1 k. j0 ^
mysql_connect($server, $db_user);查询数据库的代码:
! @8 ?; _: Y: s9 K/ Fmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。6 Q1 r- C+ p# V3 n: }
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES& K1 m! v3 ^+ b( d: s" }0 _
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
' g# i$ `# L# K4 s如果用户用错误信息的话,这样处理。: l, h- Q9 _8 S2 G+ y7 o# o$ O2 W
if(!($insert)) {3 e! I$ w# m$ I' ~$ B
print "Useronline Insert Failed > ";
$ X: T. g9 `1 V: F1 b& j! x7 P}然后实现当超过设置的时间就删除该用户记录。
: f- [, U$ M* S' f; {" `$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。5 C4 _. c( W0 I1 |6 h
if(!($delete)) {
8 Y3 b& G8 _) M# Z8 l. ~print "Useronline Delete Failed > ";
/ b* A4 g/ N5 H4 Q}下面我们解决数据库中不同IP的问题
) {2 I, C0 x1 O% b8 H- S$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用4 n9 c4 D8 N1 J: U; g! f. {0 j; i
mysql_num_rows(query);来统计用户,代码如下。
6 V! l/ g2 m2 @( \$user = mysql_num_rows($result);最后关闭数据库。5 Y, ]" L3 M+ C/ L
mysql_close();显示在线的人数。, z7 Z/ X' o6 v# D9 M
if($user == 1) {
4 V! v& b0 x# ]& a& m1 Pprint("1 user online\n");, x/ e, Z. ^( _- A) g5 W$ M
} else {6 g; O+ e* [ G* i
print("$user users online\n");1 j7 \/ a3 I8 R$ D# O8 |
}最终把上面代码写成一个PHP文件如下。
7 y) |! p3 K) P<?php
2 g# z: D1 `+ X! c2 Q7 c& y+ n8 a//Put your basic server info here8 X( t5 K2 M6 u( H2 R5 M
$server = "localhost"; //normally localhost
) {# E: J7 Q T- [$db_user = "root"; //your MySQL database username7 K! Q2 z/ e8 E ~5 P1 q. M ]
$db_pass = "password"; //your MySQL database password' G9 j6 Z }9 |) x" J! j% X
$database = "users";) i( @& `1 a. l' `0 R2 f& E
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are/ {& |; |; J; s7 u0 O( [
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last9 t! @, o# e5 s+ q" [# I/ ^4 V
// $timeoutseconds seconds)
1 V e4 N; W, H//this is where PHP gets the time: F R! [- W9 U
$timestamp = time();
" f* @3 @5 d/ `% O: B) H//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed1 |; U3 f$ _ k3 c2 K. V
$timeout = $timestamp-$timeoutseconds;
& n, u6 S& O" P, i//connect to database( X6 \; O. B# m* b
mysql_connect($server, $db_user);
% V% j2 m, C. I% J9 P4 J//add the timestamp from the user to the online list; I" D( L7 b1 P) t- c0 e
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
& n3 U) S2 f5 P2 q) J; |('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");/ Y6 k) n# Y8 a: G
if(!($insert)) {2 Q' m- ^2 L5 ?* b3 A
print "Useronline Insert Failed > "; B- P w4 `3 E4 M# d! J# }- g
}
1 o) d; ^. @& V//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
6 ]( p: e& T1 I/ d3 q- b7 g$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
/ P/ h5 q6 ?" [8 t& V& Oif(!($delete)) {
4 F- r" o7 C* fprint "Useronline Delete Failed > ";0 g: n7 l4 {8 u0 r& x
}* c- v3 ]/ |5 @, o& N
//select the amount of people online, all uniques, which are online on THIS page; {3 B6 L7 _1 D$ a. w0 g3 u
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
; _' b5 D0 N r6 t7 V5 gif(!($result)) {/ K+ ]/ m6 H7 g2 z. M
print "Useronline Select Error > ";
! {- c6 R J) Q* I8 N. z}
2 n% G2 Y7 Y) _' H |//Count the number of rows = the number of people online
( k/ W1 z: u! \& W9 { z6 a$user = mysql_num_rows($result);
, w+ k2 P! W8 \1 i3 Q) R) ~//spit out the results
$ W4 X: I7 u+ O& T% e$ H! Nmysql_close();) ?, K e. Q& D3 ~
if($user == 1) {' v+ ^8 T9 s" D+ \
print("1 user online\n");
4 ~, [4 C M; Y; l7 x2 l% j, {} else {7 `, ^& c- f$ ^8 P, j3 D8 z
print("$user users online\n"); y7 b2 H+ W. m
}
( J4 V* w! R' X! l1 ??>$ W" ~! ]0 a6 k0 k: u
0 A( B1 j$ [" C" `3 E, M
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
- o2 D- L2 }2 q8 w& r% p8 ~时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。/ R( S8 X' Y* v# z3 ?
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。* |/ `: z; w. [* @9 Q
当然啦,这两款主机也是相当不错的。
6 H" B$ a3 Q7 n8 D智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年& S+ ?: q/ z6 P# w
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年* t: L3 c& W" ]1 }' k$ p; y
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
( t4 ^! f- W( d. t% E空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=552 \' h3 L1 M: N" F, @9 M% `
自己加QQ去问吧。 |
|