|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!4 x% [. h. C( h7 I7 B- _5 P8 h3 r
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
3 I* m" F7 f$ v" D3 w* [首先我创建MYSQL数据库表。
# X) Z# ~) M7 c) @3 dCREATE TABLE tablename (
! j+ {( o( u n& g5 s' U9 Gfield type(max_length) DEFAULT 'default_value' (NOT) NULL# J& r6 }) M U2 }, r. H8 l. p
}可以使用的SQL语句。
4 T3 l8 W4 `! XCREATE TABLE useronline (% G4 G8 C6 d4 H& Y7 x
timestamp int(15) DEFAULT '0' NOT NULL,( ` E& K P+ u! |2 a7 U
ip varchar(40) NOT NULL,- x# t2 p! e' b) C/ N
file varchar(100) NOT NULL,7 i, w' Q2 Q$ U; h
PRIMARY KEY (timestamp),
% R/ n2 {: k! b7 m# X+ F* jKEY ip (ip),! n. z7 A/ S0 q- S2 C
KEY file (file)
* b3 w7 @1 G0 \7 N+ ~. o# K+ I);下面我们是PHP脚本,首先我定义MYSQL的信息。* P2 D" D0 b' X; f* h& Y1 v
$server = "localhost"; //你的服务器
, M! `8 x- ^ g" z$db_user = "root"; //你的mysql的用户名+ C4 ~* {+ [6 n x8 N+ u1 C' _. @
$db_pass = "password"; //你的mysql的密码5 L# B/ }2 x" e7 A
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)" I4 G R) M6 G4 C3 K1 s6 b# f
$timeoutseconds = 300;取当前时间。
7 N- d4 d0 {) x$ r4 n, ~# U. _. M$timestamp = time();上面的完整代码:& h# p4 m! g, w: l9 [8 Q
<?php9 q1 P* \: n1 w; X, e7 N" t& Z& |# i
$server = "localhost"; //your server
6 {4 ?" U2 B- F& s% C4 N$db_user = "root"; //your mysql database username
9 {2 F* C5 |6 v9 @! |7 K$db_pass = "password"; //your mysql database password if any
; M* B. v7 j4 i `4 U$database = "users"; //the db name
8 X. m; w+ z# J9 |* }/ _) e$timeoutseconds = 300;//timeoutseconds limit; f+ q5 I$ j0 e* Q" p
//get the current time
% G6 t2 t/ v8 y7 a+ ^. }$timestamp = time();
4 C H3 F; e# E1 {6 I' X% Q f; l2 b: J//calculate the lowest timestamp allowed; h: d+ V4 y, ^5 X. [
$timeout = $timestamp-$timeoutseconds;1 D* A2 |5 A2 ^0 W$ ^# Q# U7 H7 \
?>连接mysql" T% d9 e$ V ^1 T- x" `( p6 Y
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
% |5 @- b0 A0 j( hmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接% G' D3 j, g# S5 |
mysql_connect($server, $db_user);查询数据库的代码:
7 ? v& L: ]8 p5 n! v: R4 [0 ~/ ^mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
5 m% b% N$ {- F' y+ R' s$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
/ s' U* T( K1 e4 y& ^('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
, L$ X, r, x* b如果用户用错误信息的话,这样处理。3 }0 y1 J( u, K9 p% h$ L
if(!($insert)) {
# V2 S$ x2 q1 {print "Useronline Insert Failed > ";
3 R9 e. a; h/ G2 {- ^2 D1 T}然后实现当超过设置的时间就删除该用户记录。2 \3 D. C& p2 j) l- C' Y
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。% g- P3 {" z1 o
if(!($delete)) {
# Y, a% M' ?3 b; l$ j" h( xprint "Useronline Delete Failed > ";
- f/ ~; p: i7 ]* k}下面我们解决数据库中不同IP的问题3 X3 D O4 ?8 f$ ]: J3 }/ ?' u
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用5 p1 y! g; R9 A
mysql_num_rows(query);来统计用户,代码如下。
, m. `) e, M1 z/ G3 C$user = mysql_num_rows($result);最后关闭数据库。
$ Z% }! N( ~$ D$ { Z* H1 s! Nmysql_close();显示在线的人数。1 m N5 b+ I0 r$ I; m. l/ B0 \
if($user == 1) {
& W6 B6 q/ A& h6 Uprint("1 user online\n");
- i7 S4 \" r. I+ s+ Q5 b+ z0 j# ]} else {
7 ?5 i1 E+ r6 Sprint("$user users online\n");+ E- M% Z% G2 |
}最终把上面代码写成一个PHP文件如下。$ V6 A3 F! ?' u$ p
<?php
2 O6 a# D0 D" [5 r3 t7 a2 I: j0 C//Put your basic server info here5 g9 }4 V- l1 l; q' R
$server = "localhost"; //normally localhost
- p) e/ R% `! G( n$db_user = "root"; //your MySQL database username
! N! |0 F' |1 d$db_pass = "password"; //your MySQL database password
: Y% W |, ~+ x G# f7 z$database = "users";/ M/ \' i3 g ~& O3 v
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
6 Y* Y2 X% }' N% ^+ e2 Y6 Q// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last2 m6 @4 @0 `1 W6 x6 T$ p- m" S
// $timeoutseconds seconds)- g2 o& c) e* W6 s
//this is where PHP gets the time
: v N* F0 ^6 f! U3 \2 j! x- v$timestamp = time();/ i+ P1 T) l0 Z/ Y# Q9 }# m9 P
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
/ @ t0 _" n- l/ l" I$timeout = $timestamp-$timeoutseconds;
0 b- h# a" Z$ W3 X//connect to database
7 [; x7 B! E' |. e! Emysql_connect($server, $db_user);
9 q' Y: y+ D7 c4 J W$ J+ Q//add the timestamp from the user to the online list2 l4 T0 q$ y7 G+ W# p5 ` b
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES9 z0 A8 E1 z" G$ m; @) P
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
6 I& J# b( ~" v0 D% U: N9 H [* q: {if(!($insert)) {- t/ K5 J3 Q6 d4 K$ C( B
print "Useronline Insert Failed > ";
0 G+ j- [" u5 t& H/ U' {}
; p4 _( h5 z1 f3 g4 N//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
4 G2 N& v5 }+ M! Q$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
3 s" C' y1 c& u6 B* M+ ^if(!($delete)) {
) Q8 n R/ H, O3 v0 {1 F6 Vprint "Useronline Delete Failed > ";
" B- ]# ?7 g/ g, p w}
- R. Q- N8 y. H2 m$ Y//select the amount of people online, all uniques, which are online on THIS page
) e, i' C/ ? ^2 F# l4 X, A$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
% I7 o/ j6 o% p# K9 C9 Oif(!($result)) {
2 k5 v& P+ `/ q3 M* ~9 Kprint "Useronline Select Error > ";, W# e$ |8 R; Z) H H
}+ u' M5 ^+ ~5 O1 I! t% K
//Count the number of rows = the number of people online
8 ?0 u( e; A9 j( \$user = mysql_num_rows($result);, f, K3 K$ s$ I% h+ L+ ~' b. Q3 x. K
//spit out the results
3 @2 G" T" I( ymysql_close();
% k R2 `+ k2 M8 V/ o9 sif($user == 1) {, x' B2 f/ N; [( O% S8 U) E
print("1 user online\n");! r/ r- N5 c$ C& r1 E# K( ~4 l
} else {
* \; o% n+ q# Y/ V+ L! X& Q& hprint("$user users online\n"); E+ y; _5 S" Y: A4 d+ C
}, h; F7 P9 f9 H9 i5 ]
?>
, |) h" K" X" H4 }! Y- v4 i8 K
* }: m$ p* }" R7 ]1 F. f以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
& ^0 }' {2 v! x时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
. r' o8 C& s% |- Q' E' b1 Z0 \" S# T我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。/ F8 `- G/ s* N
当然啦,这两款主机也是相当不错的。2 k, d/ U6 t$ z8 T6 h* m
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
" o( `% p" S e! ^标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年; z" `/ Y1 S' P" F0 U
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
* c; G/ k6 K) U2 p# Z; z空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=551 X9 o9 J5 ]4 u" J
自己加QQ去问吧。 |
|