|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下! v" q3 e. m! F5 u
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
+ J; \! P/ I' U6 Z+ S首先我创建MYSQL数据库表。4 y# C- ?$ Q7 ^" {; [6 H
CREATE TABLE tablename (
, i, {' S1 u' b0 J8 m3 Q0 Kfield type(max_length) DEFAULT 'default_value' (NOT) NULL
) ~' n' O, ^% m, l5 h# }2 m) q# X}可以使用的SQL语句。* O+ f4 B' ^# j2 O7 Z+ C
CREATE TABLE useronline (0 t& I9 y$ A* p8 P/ Y5 d! u0 |
timestamp int(15) DEFAULT '0' NOT NULL,
- N- v! h& }' E1 nip varchar(40) NOT NULL,7 u: @- p$ S/ q; g
file varchar(100) NOT NULL,
: D/ A; [8 P- _" X+ ~PRIMARY KEY (timestamp),1 N& s+ f, a; h) ?, c
KEY ip (ip),
' G( r3 m& G5 z/ ?. nKEY file (file)" }9 L2 A3 p9 Y C: @. H8 o9 B) b8 E
);下面我们是PHP脚本,首先我定义MYSQL的信息。8 W" K( |$ t7 S) |( ]
$server = "localhost"; //你的服务器$ L" |) J* D2 B% R/ f9 l
$db_user = "root"; //你的mysql的用户名
: v) }. p' M- Z( X' U1 M3 J9 w; p$db_pass = "password"; //你的mysql的密码
7 U6 [+ C% g1 D }- n$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
7 k) x8 |9 a2 N5 m$timeoutseconds = 300;取当前时间。. W' H$ P8 ^! X9 d3 z, O3 V
$timestamp = time();上面的完整代码:8 x1 \8 a' }& p
<?php
7 B6 B+ }/ d/ S2 `$server = "localhost"; //your server
9 A# ~' b0 E+ P% m* N* i$db_user = "root"; //your mysql database username% O1 C0 C0 l$ _0 V
$db_pass = "password"; //your mysql database password if any0 s0 a5 D! U8 C+ W
$database = "users"; //the db name- Z, R, c8 I5 ^% E' n* x' C
$timeoutseconds = 300;//timeoutseconds limit6 p( L$ p+ O5 r+ q4 d
//get the current time0 |- Y5 ?" L! \" |* z+ j
$timestamp = time(); N4 [% x& c7 u( f3 H4 e8 {
//calculate the lowest timestamp allowed7 s' s& u- r( N* ~5 ]; f
$timeout = $timestamp-$timeoutseconds;
; c0 Z0 L* \( X8 i. ??>连接mysql
5 b9 @# L# I! w- [1 S1 D! P5 {7 V2 |6 ymysql_connect('localhost', 'username', 'password');也允许使用变量形式。
, Q7 {* u8 d& Z4 F: E% U* }- @mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接; z& O0 E& i L
mysql_connect($server, $db_user);查询数据库的代码:
6 T3 e( ~: w/ }# R/ Omysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
* L, R; R) m5 L# q5 K0 y2 ~$insert = mysql_db_query($database, "INSERT INTO useronline VALUES8 Z5 ^* v i5 q; ]- l; P
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
& i! Z8 i! `6 g# B3 P% L$ |. b2 ^" G- g如果用户用错误信息的话,这样处理。
% d4 U& H5 r* j- s( _if(!($insert)) {8 c& t+ v( |4 @) B# U0 V( G6 C
print "Useronline Insert Failed > ";/ O& X! V0 C( g, o* S
}然后实现当超过设置的时间就删除该用户记录。5 a) `6 M: D/ \; g9 T w+ o2 R
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
; O& G! \- U& @0 p! t' J0 k9 Iif(!($delete)) {! o P6 O0 W9 M+ e/ f: G" ~
print "Useronline Delete Failed > ";
/ U, |1 Y- y5 L2 |}下面我们解决数据库中不同IP的问题' n% H, k5 C% j/ |+ r# Z
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
, A2 M& S$ h: n* vmysql_num_rows(query);来统计用户,代码如下。# t9 A* L7 W) v5 i* I
$user = mysql_num_rows($result);最后关闭数据库。
, o! i, Z; y( p6 Bmysql_close();显示在线的人数。 e3 q) j' b! n* H- @' y; A+ F
if($user == 1) {4 @4 c7 y( w, v
print("1 user online\n");* `" n3 ~' z; |8 y, Y
} else {
+ M' s% v; C( V! E& G$ |$ b6 I. Xprint("$user users online\n");
# p, n4 u# j1 C6 A}最终把上面代码写成一个PHP文件如下。( f3 e/ u+ x# l$ u
<?php
6 }8 b) ]; z' v/ Q" O//Put your basic server info here
2 G; b) D& G$ A9 j' f$server = "localhost"; //normally localhost8 W& ^+ u( u8 a4 l
$db_user = "root"; //your MySQL database username$ D; {7 e: D, c8 _+ I
$db_pass = "password"; //your MySQL database password: k J1 @! b( a+ l& V2 ~
$database = "users";$ h# z5 c" S, S
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are- `$ R; x9 d3 U5 K, K* o
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last0 o$ P& p1 C6 A& \: \' G0 }
// $timeoutseconds seconds)/ W$ Z* `: n* G
//this is where PHP gets the time
, Z! D% j# \$ {$ b- Z$timestamp = time();
! B+ V& u. l9 \5 u3 Z8 [! N, Z' q8 P//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
9 m- D7 \9 U3 j6 v B) s6 q+ K$timeout = $timestamp-$timeoutseconds;% @' F m5 K' L# r7 g. [; W
//connect to database
1 T, I+ s$ s' K6 g/ y+ Pmysql_connect($server, $db_user);# K8 Y: U6 l% ~% s1 S: H
//add the timestamp from the user to the online list
, ~) [9 p6 }3 p% }! ~$insert = mysql_db_query($database, "INSERT INTO useronline VALUES# [- l0 ?9 S& U2 `4 F7 A1 \6 P! L( C
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");7 K9 }3 C/ x; c- n1 {! B
if(!($insert)) {
) e b }0 ^8 c) \' rprint "Useronline Insert Failed > ";/ G+ ^. P/ @% m4 `
}1 s) w5 l5 b0 m- Y' b M
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.8 [* m1 Q! i" l0 T% \
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");6 q- m/ z* q5 T2 X" `. w" P( y
if(!($delete)) {
- ?1 S* n: f) V9 Pprint "Useronline Delete Failed > ";
6 g# b0 V, U* @' `% A}0 c1 |, d4 r1 A2 R- a: h5 E' I: ?0 p
//select the amount of people online, all uniques, which are online on THIS page
- q9 P- c: F( w- \$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");+ P1 W8 u% r7 D! y
if(!($result)) {/ F. A) ]5 k$ e) M
print "Useronline Select Error > ";1 D4 S3 q' u* U! |6 k9 ~( R4 L
}
0 U- O! X/ i1 t. h//Count the number of rows = the number of people online! l# S. i0 b! q2 V* d
$user = mysql_num_rows($result);
2 r. r, E( J" P//spit out the results: K4 c* S9 L5 R+ }: J2 m
mysql_close();
- t+ X: s( g+ p8 c) lif($user == 1) {! u) C1 v/ j: }: C
print("1 user online\n");+ | P y; B- n5 w0 O9 f5 y
} else {; V H0 s6 R3 C" K7 u& J
print("$user users online\n");
5 ~9 g @/ n* P* E, j! z}
7 Z' i+ E1 g9 F1 {?>
* T4 i' F7 F2 t. m+ z+ X. d ; m. N5 x, g% }6 H8 M$ _- C+ `7 b3 ~
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
+ |3 n+ X9 ~& ~* G4 _! ]0 E- P. M! `时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。* D! M/ a% }; K# c
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
3 h- x( V+ O9 t6 Z$ P7 Q$ Z2 d当然啦,这两款主机也是相当不错的。
. a' V. [/ H& ?* o6 W7 D智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年" T# { M: o1 f9 u+ \/ \
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
4 J1 I8 J. g* o1 U& M6 P提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 3 a# u" l( |* M" s5 z
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
8 v5 @! w: V2 B# ?自己加QQ去问吧。 |
|