
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
! M* I# w, a7 d8 n' w: n8 F, L8 W我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。& s r/ j" o' W# r& L+ @6 f1 i- i- [
首先我创建MYSQL数据库表。
4 |, b$ m u+ Y2 mCREATE TABLE tablename (
v( C5 u$ c) R/ `5 L% `3 q+ Cfield type(max_length) DEFAULT 'default_value' (NOT) NULL
) F4 m, O3 n( I% h7 F* {}可以使用的SQL语句。$ F' t2 c1 X" a/ |
CREATE TABLE useronline (& H% @1 B. D+ s$ z0 I
timestamp int(15) DEFAULT '0' NOT NULL,
$ u0 h; F* F6 w* x' N% Dip varchar(40) NOT NULL,: m7 b& J5 T) s$ F: x9 c7 S' w! l7 H
file varchar(100) NOT NULL,! w s3 e0 ]8 ]4 i
PRIMARY KEY (timestamp),
$ A4 Y* |/ X5 o- P$ z' VKEY ip (ip),+ j( t: T; S1 `- J
KEY file (file)' V: d" G- O/ v4 O+ d
);下面我们是PHP脚本,首先我定义MYSQL的信息。* w7 r0 g5 ^ K# t, P' @
$server = "localhost"; //你的服务器
4 o" M; L m5 l' S( R$db_user = "root"; //你的mysql的用户名
4 [. a0 J$ E. u0 m$db_pass = "password"; //你的mysql的密码
: s+ \% g1 x* y% [$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)" K: w( @2 r# c6 g5 n
$timeoutseconds = 300;取当前时间。# ^* U7 A8 E) V/ H
$timestamp = time();上面的完整代码:" f3 e. H: W+ d" f
<?php
2 z2 \3 x3 A+ E$server = "localhost"; //your server9 J1 M1 R- x: \+ K
$db_user = "root"; //your mysql database username
6 @: `* j6 |) C/ k u1 w$db_pass = "password"; //your mysql database password if any
7 M' n- B4 V" e% H3 T$database = "users"; //the db name) c& E" q5 g1 j
$timeoutseconds = 300;//timeoutseconds limit7 ^* }# Z1 a; d: j, e$ ?9 z+ Y) N9 j
//get the current time
?# c7 y" p* x7 L" I$timestamp = time();! J' Q3 [: [ n
//calculate the lowest timestamp allowed1 D) d. m/ v. ~9 D/ Z
$timeout = $timestamp-$timeoutseconds;9 L7 x& ^, m5 S$ H& r& x7 G
?>连接mysql. O1 b% E! z P5 z. A& l: \7 |0 b6 D
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。! L" G7 G/ N F- Y$ Y
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接: `- U I* V, V8 ~ y) B1 \9 d
mysql_connect($server, $db_user);查询数据库的代码:8 p3 s( A" m- ^& _2 v N
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。0 c% f5 t7 e( _. R/ s1 R9 C
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
: o4 \; q R) h v* h* E3 Q('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");8 M- |' n7 G1 c
如果用户用错误信息的话,这样处理。
( p: `/ s3 G* h4 B$ v% ?if(!($insert)) {
0 [$ Y: b- z/ V8 m8 \print "Useronline Insert Failed > ";
: s" M2 C$ |- H. o0 ?# e: Z: t) l}然后实现当超过设置的时间就删除该用户记录。8 d* d8 h4 D) z1 B
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
3 t$ [8 E1 s6 ?) h/ r7 Rif(!($delete)) {
7 E% P; A2 p% u, |* k0 ^print "Useronline Delete Failed > ";
+ q' Q! W* H9 P, k}下面我们解决数据库中不同IP的问题7 X6 U; q3 w" ?7 z
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
6 p5 [1 F1 y7 v* ]1 V, kmysql_num_rows(query);来统计用户,代码如下。% P H8 D" f3 g- N- G" w3 ]/ D
$user = mysql_num_rows($result);最后关闭数据库。( h9 x# O9 }/ h+ E" f, E
mysql_close();显示在线的人数。
8 ~7 [4 u6 ?8 h( r- u0 l0 uif($user == 1) {; [3 Z. Z" f+ g
print("1 user online\n");
9 K p% Q0 f# Y- J# S1 ?- c9 ~} else {
, x& S9 M8 Q; @" c. uprint("$user users online\n");
8 ^# q) y7 F5 x" Q& H# S6 B7 L}最终把上面代码写成一个PHP文件如下。
' p. t& ~$ l, X3 [6 d$ w# G0 ]$ j<?php3 ^2 Q. k8 O' e# L7 ]! {" @5 [
//Put your basic server info here% Y) @5 ]) j/ v9 P' u/ |
$server = "localhost"; //normally localhost
# X O: X- [5 P" k' F1 @$db_user = "root"; //your MySQL database username
1 }9 x5 M4 Q0 ^1 T) U' u$db_pass = "password"; //your MySQL database password
0 j; J7 \1 v# x1 N/ u8 j4 {. y$database = "users";
3 G; g5 t' u( F! b6 ]3 z6 G$ W$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are" `' H' k' u( W$ P
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last( @3 o7 u8 x3 V' t: ?) D6 ?/ u" [
// $timeoutseconds seconds)+ P, y6 w5 ]6 R- C8 I: k$ e
//this is where PHP gets the time9 c; f8 D# I2 C% ^; C" G7 h* e; e
$timestamp = time();1 O% s; k1 ]" o* @1 Q, B" I8 i
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed: W+ j5 I( T4 J7 o# y2 G# j
$timeout = $timestamp-$timeoutseconds;$ r7 B. I4 A8 o* A, T
//connect to database4 i. {" G4 C; ^7 e. v
mysql_connect($server, $db_user);, N* ~) z7 R& s0 w
//add the timestamp from the user to the online list$ D# s; F7 L, \; U
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES7 T4 n/ ^1 ^: v8 ?
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");0 b/ [- p: }4 I" ? s! M
if(!($insert)) {9 u9 F; x* n8 X
print "Useronline Insert Failed > ";$ D# v. q1 D) l8 ^# {8 {4 x+ i
}
4 M3 y* ~' q8 d3 i3 A//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
6 H7 E' `/ u% P. b$ d$ y2 R! [$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");+ l8 ?' U) u0 }8 U4 I* ~
if(!($delete)) {
7 B* r- o1 U$ ?% v9 zprint "Useronline Delete Failed > ";
) x- A1 y9 a C}6 |/ L& }% w! g/ |
//select the amount of people online, all uniques, which are online on THIS page
" d( K( ]( R) E# ^) d4 E [: j7 Y$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");0 K7 _3 |6 n% Z0 R2 G
if(!($result)) {
5 L7 q) Q2 L; W" c$ wprint "Useronline Select Error > ";. e8 `+ D7 o1 P7 M7 a
}- [/ L# t& r& {2 y ?- k6 ?
//Count the number of rows = the number of people online9 }5 a% I* p4 \5 |
$user = mysql_num_rows($result);
" @- `' t6 p ?/ g+ Y& a7 |' l//spit out the results$ v" ^% f5 c2 Z7 |( a: f
mysql_close();
3 `8 V- `0 F7 bif($user == 1) {/ S3 L$ l# C; n! _ ~1 t$ {5 i
print("1 user online\n");
; A5 v" F i# P" X4 L- }8 r7 g9 E8 S# ?} else {% e6 u* e9 K* d* j! U: U
print("$user users online\n"); `: |* W, w q
}
5 K- A) c+ D( h% v) n?>
5 K7 n& V. b4 F9 t" L- r- ^ 7 m: l+ H5 U6 o
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。) l, J* H" }8 x- M$ q% L) a
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。. {; r7 E- Q2 T* W, u: b9 q5 U
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
0 D) J$ `8 c+ c- Z, U* E当然啦,这两款主机也是相当不错的。
0 ~3 q# E4 O* A/ Q0 X智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年5 K, x( S5 E$ d- I! f% h0 U
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年" Q9 J$ t7 I0 x/ q
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
& A0 R+ I0 k( G7 U" i, b1 ?2 F3 T2 @ l空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55+ J5 W. M; Y* ]2 \4 @1 x' |
自己加QQ去问吧。 |
|