|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!' H% Y5 M9 L* i. T
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
# v) { K# l; B" }2 E, o首先我创建MYSQL数据库表。
% @% n% R* V$ ~$ PCREATE TABLE tablename (' k8 t$ m, h9 n( x- `% T
field type(max_length) DEFAULT 'default_value' (NOT) NULL8 N* t* Z1 a- N8 I/ k M
}可以使用的SQL语句。
. ^" e/ o# @+ l8 I/ ~9 mCREATE TABLE useronline (9 |! d# o3 C+ c( y$ a
timestamp int(15) DEFAULT '0' NOT NULL,, `( ~- d$ s B; \6 y
ip varchar(40) NOT NULL,9 X' i: b2 O, `6 Z6 o. R: Z
file varchar(100) NOT NULL,
5 q, I+ Q/ x3 Q8 x6 OPRIMARY KEY (timestamp),5 K2 ^# W4 ^6 `. ]% p* h
KEY ip (ip),
$ O- @5 D: L! S8 ]KEY file (file)5 u4 r9 O; l+ W5 v+ k% @; _; v. N- J
);下面我们是PHP脚本,首先我定义MYSQL的信息。$ ?/ N$ s7 y% l X& }; d
$server = "localhost"; //你的服务器 ?" Q) c0 V& V" F# p
$db_user = "root"; //你的mysql的用户名
5 Y( j0 y- q+ p$ n- ^9 P4 d4 y: s$db_pass = "password"; //你的mysql的密码" a' z* g+ ^; X
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)9 ]7 T' T# ]2 B- X [
$timeoutseconds = 300;取当前时间。0 m1 J1 X$ Y7 ]3 A5 Y1 Z; ?7 p/ t
$timestamp = time();上面的完整代码:
2 y: T$ H/ V# _) c/ I' }9 ]<?php* `+ Y. p+ G* b
$server = "localhost"; //your server! Y4 g* y1 y" e2 }
$db_user = "root"; //your mysql database username" w' d) _& d% F1 U( G0 m1 H+ A5 M
$db_pass = "password"; //your mysql database password if any' f3 V( j+ b8 U, U# r3 F/ F, c7 R
$database = "users"; //the db name0 U3 {- y4 T+ q. x: ^0 g: M$ R' X
$timeoutseconds = 300;//timeoutseconds limit
) L3 Y4 b$ O1 \: p0 x0 G//get the current time1 b$ J5 b3 U7 j2 m) Q+ B
$timestamp = time();! j0 E" X! \9 F. b: m% {
//calculate the lowest timestamp allowed" S6 v) Q3 F) {" ]1 X1 Q' a
$timeout = $timestamp-$timeoutseconds;
+ h% _6 b5 P# G1 f1 [; A8 z?>连接mysql
, S: @$ A: Q: A" n A- a, D) _8 D$ ]4 Gmysql_connect('localhost', 'username', 'password');也允许使用变量形式。- @ w$ g) P! }6 I. b; h" c" b
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
( N9 o3 v' M- v) k2 Fmysql_connect($server, $db_user);查询数据库的代码:; C4 n# Y) z5 L. Y- W
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
- j: \5 k7 Y; |$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
. s$ V( N* a/ G- S9 {, l' i('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");% D6 _: }2 O1 W
如果用户用错误信息的话,这样处理。
$ u% n: Z! }2 h% y, \9 _if(!($insert)) {; P$ J) x) ]( d3 x# t6 d5 w
print "Useronline Insert Failed > ";
! } `# w7 y I9 Y( e* d}然后实现当超过设置的时间就删除该用户记录。; J) E& L1 i1 e8 X8 x) U, m4 [
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
7 d7 c# D7 t. |# T; jif(!($delete)) {. Y+ K7 F6 z3 i- R3 t/ i% \
print "Useronline Delete Failed > ";
; [+ T+ ^! \; x9 w% C}下面我们解决数据库中不同IP的问题1 H6 ]/ L- G* C% Q4 ^
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
) O: ^- w" P# s& x/ K3 Gmysql_num_rows(query);来统计用户,代码如下。9 y4 l: \/ G) E0 K
$user = mysql_num_rows($result);最后关闭数据库。
! Z" Z. U, Z2 Nmysql_close();显示在线的人数。' J/ ~% Z1 k. h, }% k
if($user == 1) {
, T; s' t- z" N* n6 a3 ]3 Uprint("1 user online\n");
- Z" L8 p0 o y2 A$ {2 z+ L} else {
" @/ c( l0 M' V8 Eprint("$user users online\n");
x! l7 B6 \* U6 ?}最终把上面代码写成一个PHP文件如下。% G: M6 Y5 \1 Z7 [. f
<?php( ~$ Z# d% i1 Q+ M
//Put your basic server info here
- y0 y2 U& ~8 m" n5 b$server = "localhost"; //normally localhost3 b- k; \! Q0 V h q6 }0 r# p3 b3 C
$db_user = "root"; //your MySQL database username
5 \% x( W8 x' C$db_pass = "password"; //your MySQL database password
. U/ f' N2 q7 P: J$database = "users";+ k& m! J# b) r5 Q; t
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are x1 l; q0 ]+ D- i/ L
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last6 c3 W5 o6 W- l% I. g' m4 |
// $timeoutseconds seconds)( T- b* j& }7 G& k0 }& [( C; z$ v
//this is where PHP gets the time
1 | e. m1 ]& C. v' }/ ` ?$timestamp = time();1 ?- D- B" t; v& z6 X, T/ `9 [4 s
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
9 }& O& J2 [: \( I; W1 J$timeout = $timestamp-$timeoutseconds;
# _: s/ T- ]! w: R% s+ d//connect to database
9 x( @% {/ q: [7 B* ymysql_connect($server, $db_user);9 v) H) Y2 ^6 E' l
//add the timestamp from the user to the online list6 r0 E a$ f' L% }( L) C8 l$ s
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
; }& _. |+ O6 S. V: S('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");4 L3 m# F/ |; I" k
if(!($insert)) {
0 y: n6 N! a& p' j" e6 ^0 u5 g) zprint "Useronline Insert Failed > ";
& f2 G" f- A. @8 F}
- g7 x% T8 o: r. S$ H//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.; F! j9 s- k& I" m( e% d) X
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");- A3 G7 T% d( v9 o" g
if(!($delete)) {
! f) G3 p; r) e9 lprint "Useronline Delete Failed > ";
0 W' |2 E! ^% E9 @}
& H2 l- L/ K) k/ O X _. u//select the amount of people online, all uniques, which are online on THIS page; {: V3 [5 a5 a# @9 ^: |$ R
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");0 E- a4 r% X% M/ f5 m, ^/ G
if(!($result)) {
7 N+ b' i% s* q P4 Fprint "Useronline Select Error > ";
7 y: l+ A2 l$ P! F$ b}( y- K0 w+ ^( {( ^7 t
//Count the number of rows = the number of people online) w2 p3 z d3 }" d
$user = mysql_num_rows($result);
& X7 q- O4 ~" Z* |8 f; ^8 Z( x9 ?//spit out the results, x8 t; {0 P8 F& q: W( J
mysql_close();
( S+ j" Z$ y2 fif($user == 1) {1 k/ G5 M: O, h! h( o$ K% y
print("1 user online\n");
1 I, D2 ?0 I( p2 N4 m2 P) U# ~/ i} else {
5 a5 s) x% [6 ]2 wprint("$user users online\n");+ Z3 E5 b, X" e) w/ D1 w
}- u- Y. H7 ~3 P) j, j4 v U
?>
! E! \% M+ f4 _* L" l+ _ " K# f+ b0 E, K: h9 ]" p$ L
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。# h; R; V4 o5 r* c
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。7 s' x0 z6 {/ ]; c
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
; K0 w% A, o/ ~, ], X6 [当然啦,这两款主机也是相当不错的。
7 v' k" S8 i5 u) W7 u& Q# d& T8 O( d智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年4 g. c* P' ~% B( t, S; G
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
- Z1 i+ m# S; Z' w6 k& I提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
, i' }$ t% w% F1 o空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55! Y4 ]9 z8 n* t- U
自己加QQ去问吧。 |
|