|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!! R, N9 }/ s' {
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
) v0 B( Q9 V; X首先我创建MYSQL数据库表。
4 v1 ~% l% w& ACREATE TABLE tablename (/ b. _$ P1 s# `7 ^
field type(max_length) DEFAULT 'default_value' (NOT) NULL
' R1 T! N X5 Z3 P3 U}可以使用的SQL语句。
# Y/ y/ q9 ]- ~2 X3 ~2 vCREATE TABLE useronline (0 `# j, B' I. @6 c1 w4 c
timestamp int(15) DEFAULT '0' NOT NULL,
0 l$ _0 c* D+ Y2 w# L; fip varchar(40) NOT NULL,
- C) b( Q {& u& u9 a* |file varchar(100) NOT NULL,
, w8 @4 W3 e' l$ F4 X, oPRIMARY KEY (timestamp),* V4 o1 s; a( T( [, B
KEY ip (ip),5 C4 m [, Q4 j. o' P0 z, A6 F
KEY file (file)) T* J- D% V" `( m
);下面我们是PHP脚本,首先我定义MYSQL的信息。
& h( y. A& E! e9 D6 A$server = "localhost"; //你的服务器1 `( r& V A7 B5 [, i
$db_user = "root"; //你的mysql的用户名8 H z& U3 J& W( E; i# X
$db_pass = "password"; //你的mysql的密码. \8 P, v( s% {- y9 F0 ], D" \+ c
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数), }2 |+ L8 T9 c$ `0 c
$timeoutseconds = 300;取当前时间。
0 @7 k& U: w8 }% E; K) f4 Y( o: K2 B, N$timestamp = time();上面的完整代码:
a" F# b/ B8 y( H4 g% e8 V2 d1 \<?php9 V; B! `" Q; {. k' {1 E0 J
$server = "localhost"; //your server
! r$ _4 E+ }. q5 |$db_user = "root"; //your mysql database username
" O1 Z s" }( M I1 J' C- P- _$ T$db_pass = "password"; //your mysql database password if any
9 K1 }3 T2 c, |* e7 L* L9 K$database = "users"; //the db name
) r( \/ y( n3 w5 ?3 l# i3 W$timeoutseconds = 300;//timeoutseconds limit; L0 F; S" R# d
//get the current time: i* f/ b0 o9 `7 ~! U
$timestamp = time();
- F$ z% ?% Z0 F& e) \//calculate the lowest timestamp allowed
) N% _" k `. S$timeout = $timestamp-$timeoutseconds;4 s0 V! T+ x, x4 x* ?, B
?>连接mysql1 m, D: C1 m2 _1 K- t6 W+ C
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
8 ?: M8 A* T/ `- X3 k5 Omysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
' b/ T5 [; A6 F; |* m0 _mysql_connect($server, $db_user);查询数据库的代码:
( g# p( x- G$ j' n9 i; Imysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
/ E" C1 f2 O6 Q, C6 Y$insert = mysql_db_query($database, "INSERT INTO useronline VALUES4 w6 C3 V. {9 t5 Q& G6 D$ H
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
8 p+ c/ A: K# } X如果用户用错误信息的话,这样处理。
) W4 L. y) G/ V j( y1 bif(!($insert)) {+ T7 ]6 \3 q# q8 i# |7 S9 h
print "Useronline Insert Failed > ";& Z' j, B' \) m6 n8 c
}然后实现当超过设置的时间就删除该用户记录。4 ^7 f O0 R1 z% e4 Y) ]
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。: Q7 P N O2 L# n
if(!($delete)) {
( v/ s2 U" b5 h7 yprint "Useronline Delete Failed > ";
/ N$ D, a+ W1 H' o6 y}下面我们解决数据库中不同IP的问题
: v6 A7 o) v& v i# e$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
! @3 \+ I* ]5 l N4 [9 U6 Jmysql_num_rows(query);来统计用户,代码如下。8 O2 l9 c; C: O# j1 `& I
$user = mysql_num_rows($result);最后关闭数据库。
$ t! U: j% b) `+ h9 n) Nmysql_close();显示在线的人数。
- S! p: H5 _6 D" y5 b+ V. ?# Vif($user == 1) {% r2 Z$ v* Z- t$ D# W
print("1 user online\n");
3 Q# @: y+ x7 }" a} else {8 l \' T4 i" ^8 c% C2 F' O' S
print("$user users online\n");
: W& Z4 B: l+ i; m1 T}最终把上面代码写成一个PHP文件如下。
' J+ w- P0 L# S8 a# m<?php+ g) o: s4 x' s5 }2 a" C
//Put your basic server info here
% ]' `8 _* `9 H8 |+ A$server = "localhost"; //normally localhost
' a$ a0 Y5 L' ]$db_user = "root"; //your MySQL database username, n* P) u' U( M+ V! Z/ v2 d
$db_pass = "password"; //your MySQL database password
9 t5 |8 N8 \& ~& ~. w( `/ U+ @! g$database = "users";) r' U/ v4 x! f6 a. ]0 F8 a) C
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are5 w/ R* ^2 ]8 u
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
. P& Y" Q1 {/ |: o# H% c5 w// $timeoutseconds seconds): p, O+ n) u$ u* D
//this is where PHP gets the time3 d5 Z2 Y" \- n/ t8 I; n t W
$timestamp = time(); K1 q q# d5 {% W+ j3 M! `( u
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
/ t/ Q3 v$ l# W$timeout = $timestamp-$timeoutseconds;
/ q6 Y: l/ k& O% ?5 A//connect to database# ?8 o/ Q4 P ~) y5 ], u. m5 @
mysql_connect($server, $db_user);
, R0 z' t2 q- y& T( Q+ w//add the timestamp from the user to the online list% [1 e v6 H+ G) \3 L: ~
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
1 Z8 a$ n. b* t# Q- E/ m- h('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");* V7 w u) C8 ~/ R" j5 o3 ~
if(!($insert)) {
- j% I5 C5 l% e. x0 q dprint "Useronline Insert Failed > ";
% i& F# |$ k) S3 v}7 \6 m9 b1 d8 ]% P; _: g
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
: ^0 C K T0 b) l( O/ }6 t$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");3 S, v2 F- P5 R
if(!($delete)) {
8 ]! M8 M' ^8 d1 k8 t1 d8 ^/ d% {print "Useronline Delete Failed > ";
: O* g# c; o* _$ l5 M# b}9 F5 ?; x4 B& f/ P; o" c
//select the amount of people online, all uniques, which are online on THIS page: P+ ]/ [, `* r; g, `% x6 H
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
" e" ?5 z2 [( nif(!($result)) {5 L9 F" K1 \, ` k8 d8 P
print "Useronline Select Error > ";2 \ Z) E9 e5 |1 J
}0 _1 u/ J. ]/ A2 a7 {3 V3 _
//Count the number of rows = the number of people online7 P( x) v. Q6 s9 Q% |6 y' j9 S
$user = mysql_num_rows($result);, C" O9 S$ N% i& Z& [1 H* Q
//spit out the results( b4 M+ O6 b5 C l
mysql_close();1 j1 C; u3 D# f+ |: _; q
if($user == 1) {
; A- q& Y; O% G; cprint("1 user online\n");9 F9 V$ a$ n; b/ Z6 a8 R( b8 P
} else {
" `9 i, z, d! B' |print("$user users online\n");
1 ]( E4 Z! k8 o) n}
+ K1 _$ l2 h2 O( O9 ]3 y?>
+ w! {5 m$ @7 d
% j" @/ A$ n9 u! O以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。. l# [7 o8 ~4 e
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
$ Q4 f# ~( Z0 ]$ M3 J我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
9 E n L) W0 ^9 b0 u当然啦,这两款主机也是相当不错的。2 S4 r7 l D" L$ \) I
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
$ A8 X4 C2 l/ y$ d' h" m标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年5 U1 q, O( [# r
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ + C9 l2 S3 b0 m( W3 M
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
; C* s) w8 i3 p6 ?自己加QQ去问吧。 |
|