
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!8 F' ]# B4 O& [' H6 f" e
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。. ?- s/ c0 F$ d9 k. B
首先我创建MYSQL数据库表。! r, H Y6 F" L4 K5 o
CREATE TABLE tablename (+ E8 i; p0 I0 }1 P( N* O
field type(max_length) DEFAULT 'default_value' (NOT) NULL
! K6 H7 l, F% x# S}可以使用的SQL语句。
/ z* f& k2 ]/ p4 z* NCREATE TABLE useronline (
. a# |# m' m8 [( atimestamp int(15) DEFAULT '0' NOT NULL,* U! K+ M' f7 j8 i8 a! B: s' F$ Z
ip varchar(40) NOT NULL,5 i0 E* e/ r6 T/ h' c
file varchar(100) NOT NULL,5 e! V) v( i' Z7 ^. `% {
PRIMARY KEY (timestamp),' o! p6 y O' k( z s7 n' \6 ?1 e
KEY ip (ip),
8 ^4 v8 F+ \+ ?9 H4 _9 d8 Z! gKEY file (file), l; s& |5 E0 @, t8 N
);下面我们是PHP脚本,首先我定义MYSQL的信息。* t+ Y* i* k' V# ?6 I- z
$server = "localhost"; //你的服务器; u, \& N, t I+ A
$db_user = "root"; //你的mysql的用户名4 `- F/ X* }" T" R6 }
$db_pass = "password"; //你的mysql的密码; e+ s8 t! R) P7 S' }( u) C4 Z4 [
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
$ u, j0 K3 Z" d/ H4 ^! k7 j$timeoutseconds = 300;取当前时间。! @# k- s! n X
$timestamp = time();上面的完整代码:& j: s! [: i$ d; O
<?php
0 M* N& A8 e/ T6 g& \$server = "localhost"; //your server, Y1 G5 }* J& R0 W, i+ k
$db_user = "root"; //your mysql database username
) i) O5 F' `/ E* P$db_pass = "password"; //your mysql database password if any
4 I) H8 B9 u$ Y% g/ P7 }$database = "users"; //the db name# d: C& ?7 e& [( E" l8 O# E: `
$timeoutseconds = 300;//timeoutseconds limit
& l. D4 ] P. p5 w/ {* _6 X//get the current time7 Z' ]. S6 A' f- W
$timestamp = time();, q; j" x Y$ _4 O4 |0 e
//calculate the lowest timestamp allowed
$ x6 r' v1 c8 G: j6 R! Z2 W- ^$timeout = $timestamp-$timeoutseconds;6 X8 w# N3 e+ [! K1 @
?>连接mysql
/ J7 B0 h$ i6 M$ [; Umysql_connect('localhost', 'username', 'password');也允许使用变量形式。
+ F7 f; T9 k; v$ I1 wmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接3 a: _$ A; t0 l. `7 Q
mysql_connect($server, $db_user);查询数据库的代码:& s/ w* M$ ?6 x# F& A% m3 A; u, g
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
6 k6 q1 B P4 A- H$ q1 ]$insert = mysql_db_query($database, "INSERT INTO useronline VALUES) D* |/ R1 A, h9 U2 G
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
3 k2 u1 U" Y" O$ V4 e如果用户用错误信息的话,这样处理。
5 E& e! R' Y- t# C& w2 Sif(!($insert)) {
! ^( [" g; K* ]+ A5 Qprint "Useronline Insert Failed > ";% _# @1 o6 x! t) y" ?2 J
}然后实现当超过设置的时间就删除该用户记录。; I$ W' @) ^3 a6 T' f
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
# V+ u m& C3 M" @; k8 Eif(!($delete)) {
$ q. t/ ^4 v) d% D# e4 f; Hprint "Useronline Delete Failed > ";
: N8 `9 X7 u$ E! c* T, U, K9 L2 R}下面我们解决数据库中不同IP的问题. A- ~* |: n6 j7 `4 q
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
9 j/ t. @1 a% K' J D( ?7 n! Wmysql_num_rows(query);来统计用户,代码如下。 o' g, N4 U, Y/ J
$user = mysql_num_rows($result);最后关闭数据库。
- I% u: d& v) p/ w+ ]/ ? Lmysql_close();显示在线的人数。5 I7 @+ [) W- u1 ?6 ]6 U+ z
if($user == 1) {# ]. D5 ~, k; L# I% r6 W1 @& t7 V
print("1 user online\n");
% a- }5 H3 k7 L# [9 k9 z; K8 b. X/ J} else {
8 I/ o9 a% Z' h8 H- F5 Tprint("$user users online\n");
/ ^$ I- e/ X3 O}最终把上面代码写成一个PHP文件如下。
8 A5 _8 u F i3 ]6 P) [$ g$ _8 k<?php6 V( Z! m' H( Z- Q
//Put your basic server info here
2 D5 n) o& N7 U, j a) X/ l* J, I$server = "localhost"; //normally localhost
- |6 ~& d; U% ^% R* q3 b' D% M$db_user = "root"; //your MySQL database username
. O" l d. d* V: [1 e. P! `& g$db_pass = "password"; //your MySQL database password
0 ^! u1 S/ O6 Y2 }2 a1 z% d$database = "users";7 g! J; i2 P( V1 |% Y
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are8 D% Y0 g7 S7 l( ^3 c% [
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last/ ~" f$ a7 Y. o) a7 V/ s' T( p
// $timeoutseconds seconds)" \8 C2 d; T ?0 H! i9 K4 O4 z
//this is where PHP gets the time
, e: j' \/ y8 u/ `/ d+ E# a$timestamp = time();
6 U8 [7 |0 v- m% ?//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed* V. U0 U/ @) ]# _
$timeout = $timestamp-$timeoutseconds;
1 s$ p& {' p: _/ Q//connect to database
8 L. t* ^/ j* O3 h" h2 r: S$ ]! K+ umysql_connect($server, $db_user);7 E1 p. z6 V% M6 b, J& f P' N1 ~
//add the timestamp from the user to the online list* P6 `3 s+ h( P5 ^* e
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
, [, q4 u4 U+ u( S2 T2 t('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");1 v) a/ E" C3 A
if(!($insert)) {' O/ @5 f, w; M) e5 a7 d
print "Useronline Insert Failed > ";
- Z6 j+ M% f+ V# u0 c}
+ O9 E/ Y, Q, l% w" x//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.& p7 z5 t/ W3 `, e/ l" F
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
+ @+ `. J- Y* {3 D1 Q2 T7 T$ Tif(!($delete)) {, G+ z0 P4 \! e* m2 e% b+ F2 w" g2 `
print "Useronline Delete Failed > ";
: B |8 s- e" C8 c8 o}" ]4 e7 e; n$ R; X4 n. h/ E; b9 G5 H
//select the amount of people online, all uniques, which are online on THIS page
/ k) @% m' H: y3 A6 @$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");4 v2 D" P* H; D% l* {' c
if(!($result)) {
) t( l; V" |6 s- T# _: z$ e* jprint "Useronline Select Error > ";
+ P# G$ Z5 w% F' {4 j8 o. L; O! M}
" C6 k! V! A+ [1 \8 L4 a0 h//Count the number of rows = the number of people online; s5 C- T8 P% s$ }& G2 w
$user = mysql_num_rows($result);
: X6 j5 h' ]# q2 e//spit out the results
% S' [* |3 f1 imysql_close();
* Q8 s0 j# b3 [3 b+ H! E0 iif($user == 1) {
, _$ A- ]7 {/ ?( Z, j8 N& xprint("1 user online\n");3 Z6 \6 @& j; u- I" @
} else {
; H* y; y4 O+ Vprint("$user users online\n");7 g8 |; y5 o3 x7 O" D
}4 Z; V" n v {) f1 u
?>
8 [$ g/ S8 ~' x. Y# f3 C# m
/ f o x y5 F. `以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
5 g/ k" [3 r. W q: c时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。% q9 d/ z6 J' j; ~
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。$ O& r/ `1 ^& g6 k" r O
当然啦,这两款主机也是相当不错的。 b$ K4 h2 A ~* n
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年+ M, F: E/ u5 G+ z0 V
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年4 H8 j: q3 K% {% O6 E
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 4 ]7 s. }5 H& I5 h1 {
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=556 s$ s- q( e( w: n. {( L r
自己加QQ去问吧。 |
|