|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
! h1 B# L* U6 D我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
7 \& ?9 I; J" s首先我创建MYSQL数据库表。
% a; |2 @9 U0 H4 W) a+ f. dCREATE TABLE tablename (
: M/ _0 Q; _$ ~2 o( ]field type(max_length) DEFAULT 'default_value' (NOT) NULL
f1 ?$ ?2 R% C, p7 w% p# J}可以使用的SQL语句。
3 g1 k' g* Z, \+ r! [6 S3 Y+ _CREATE TABLE useronline (
, S1 r- D8 e" @, S- M% U, Ytimestamp int(15) DEFAULT '0' NOT NULL,# g6 U- f4 V/ B) ~
ip varchar(40) NOT NULL,& Y4 u5 K# i7 F6 X
file varchar(100) NOT NULL,! }/ P ~$ r/ s
PRIMARY KEY (timestamp),
! q! a8 x4 @) @! a5 |KEY ip (ip),
/ _, r8 _* k7 h3 ]KEY file (file). z* Q( w3 h: S1 Z% ~8 h
);下面我们是PHP脚本,首先我定义MYSQL的信息。
/ m; U$ t7 { X$server = "localhost"; //你的服务器. j' j4 J# e* }
$db_user = "root"; //你的mysql的用户名6 V6 Z+ u, y. a" j
$db_pass = "password"; //你的mysql的密码
) h' _0 j2 ]2 e8 Y( O6 h" \0 f$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
8 o+ z( O: E$ P0 K$timeoutseconds = 300;取当前时间。+ f- W' ]1 K% H! O4 q- F
$timestamp = time();上面的完整代码:
* C9 ^2 @# C% |+ K* @2 L* L; [<?php
4 @8 [3 U8 g$ s* I8 J& t) a0 I& X$server = "localhost"; //your server
- F7 w# y' z6 Z6 n$ C$db_user = "root"; //your mysql database username
* U. X% v1 I5 o! Y) X/ O: @$db_pass = "password"; //your mysql database password if any
' l% }0 z7 o8 v |$database = "users"; //the db name3 a. Y% A$ `6 E( c
$timeoutseconds = 300;//timeoutseconds limit" T. W: k" n+ q2 f; f5 d2 c
//get the current time# j% d% l @! S3 P
$timestamp = time();2 r1 t* a- |4 ^0 R- t7 W
//calculate the lowest timestamp allowed
% k" Q W& b9 B* }+ ?: H4 I$timeout = $timestamp-$timeoutseconds;
! m$ {$ o% p# ^?>连接mysql, P' Y* K7 M5 P3 h+ m$ U" @8 S) \
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
+ b& M; k% e, |9 e ?mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
: B1 s$ y s" h. u! {* T, p0 ymysql_connect($server, $db_user);查询数据库的代码:
; n* w( m3 s0 l, |+ M. E# h$ e; ]8 qmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。7 G$ S9 g' U1 H& Y& `) \
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES- ?8 c/ |! ^- \6 h0 o8 c3 G, F
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");7 @" j$ i% C+ i0 r) X
如果用户用错误信息的话,这样处理。$ n3 a! a3 A6 D$ x! o1 s
if(!($insert)) {
4 B( I; e# ]4 G" j, hprint "Useronline Insert Failed > ";$ h8 b5 R- F. Q3 z
}然后实现当超过设置的时间就删除该用户记录。7 r* i3 A8 v! o& d
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。/ N% Z9 d* q- }3 W" P' I5 n J
if(!($delete)) {
1 H @+ g' b: o; `4 Z! N X8 `4 Jprint "Useronline Delete Failed > ";
. |) z& b! x7 |# t/ d- ^}下面我们解决数据库中不同IP的问题; @9 i# q% @9 ^* y
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用* ?+ F) M7 C6 M" z. |
mysql_num_rows(query);来统计用户,代码如下。7 J' v1 F+ o8 x8 K
$user = mysql_num_rows($result);最后关闭数据库。
0 [- ^; p6 R& d8 Dmysql_close();显示在线的人数。" M9 e* p( x& G% e8 a7 w
if($user == 1) {
U9 Y x5 |- h, Wprint("1 user online\n");
0 x! z9 f( `, V, k" }" H} else {& K- G. d+ S/ J2 _9 {8 I
print("$user users online\n");( D6 b K4 ?: N, m Z" z b& |
}最终把上面代码写成一个PHP文件如下。
( L! |3 e! t6 J* ]<?php
/ F @. w& c5 B5 T" D6 a E//Put your basic server info here
8 q3 k& S& a! x# J$server = "localhost"; //normally localhost! C" s; _) Q; r- @
$db_user = "root"; //your MySQL database username
$ D0 o p: Q1 a3 l( n$db_pass = "password"; //your MySQL database password9 e" [* u1 |+ j i9 I9 Y+ ? M
$database = "users";
) q6 q9 R6 m. L# N$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are7 C1 K4 }- i( P
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
& G8 ]# r: H2 J// $timeoutseconds seconds)
! G: G: l. F" ^* v) F//this is where PHP gets the time
/ y5 o4 b9 a0 T: ]% H$timestamp = time();
) h& f, A0 Q0 G' N) }& d//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
1 h- u' S1 U7 y3 r6 a) b$timeout = $timestamp-$timeoutseconds;
@) ^; |. b! e# ^//connect to database
* O" f2 L2 ~6 J" E( B* C7 [/ a& dmysql_connect($server, $db_user);
3 A7 X1 R+ I* p) G: l( W! g//add the timestamp from the user to the online list
! U- i u4 }+ c+ H- v/ I$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
( \$ p- e7 |' B5 ~7 r8 m, e('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
' k, ?: w$ @5 y8 ?if(!($insert)) {
7 r1 O8 U* a( a0 Dprint "Useronline Insert Failed > ";% o4 h0 B# v/ U8 l% W
}, L9 A. O" o" ?
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
( n- Q! `6 ?& v$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");& N: v8 @# \8 C! b' X
if(!($delete)) {
; l2 `0 X* }0 M- w& ^; tprint "Useronline Delete Failed > ";
$ Y z) L+ x$ g9 E G: ], E K}& E* r$ c2 C1 N/ S
//select the amount of people online, all uniques, which are online on THIS page: S9 ?) x$ x, v* c8 C% c; r
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
4 V$ c" R( v! v) W; Y2 nif(!($result)) {, @% `$ P O8 V2 R' T
print "Useronline Select Error > ";4 o" V3 @8 M: x
}( Z! V) [/ q- k; ?! V
//Count the number of rows = the number of people online
2 F# r9 s) X6 [; n9 e$user = mysql_num_rows($result);& V) N+ _: J7 m& w- }* _
//spit out the results e3 [! |. Q+ _/ k/ N
mysql_close();
" H5 H5 M. o) [& fif($user == 1) {
5 j8 t0 t0 ]3 aprint("1 user online\n");, O6 v, P# d, J" o+ }. ~
} else {
2 y. F+ H0 {6 ^0 N0 O5 h2 D/ [print("$user users online\n");
0 n; O+ D, T7 a. n* `4 e}
/ K1 `. j( m; M- w( M, I5 _1 _?>
: C3 R3 g. ~& h1 N8 n0 C( Y% }( p$ v+ n
4 F& k; r1 q5 j+ S; k, d8 V, B) O以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
/ L {. Y6 U* P @$ V时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。: t' D- D1 A$ Q: T
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。1 ~& Z9 ~9 ~1 I
当然啦,这两款主机也是相当不错的。
7 h# ]2 a* w7 V智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年+ x: C' `( y! V7 c0 O& u
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年2 E4 V) l$ |0 q: Z A
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ ; W* l9 b$ t0 m4 c7 Q8 u
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=556 T: u; E' _( A* r
自己加QQ去问吧。 |
|