|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
6 @/ |+ k# B I我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
; l9 ]$ W# ?0 \7 ?2 R7 U4 B首先我创建MYSQL数据库表。. x7 n4 n- N; M) l3 y
CREATE TABLE tablename (/ q! z; V9 @. w% s$ U. m8 l
field type(max_length) DEFAULT 'default_value' (NOT) NULL. q: ~8 h+ p& Y. V
}可以使用的SQL语句。! }' F# c1 z% }. [4 h
CREATE TABLE useronline ( J) E. v9 n/ y6 A
timestamp int(15) DEFAULT '0' NOT NULL,& M$ p/ }- H1 y8 X8 c7 f/ s; r
ip varchar(40) NOT NULL,3 T2 w5 d8 a" L- E: v
file varchar(100) NOT NULL,
/ B6 g' B4 p/ N) a; pPRIMARY KEY (timestamp),
/ Y; F! Q- B( i+ d2 H; I7 ^KEY ip (ip),! H, Y1 S: |* Z1 i0 F/ C
KEY file (file)
5 E8 K# _2 ^! x! s" p: b);下面我们是PHP脚本,首先我定义MYSQL的信息。
7 W& ]$ G. b5 k }( E" q$server = "localhost"; //你的服务器# L* [# a6 Y. I9 Q# @
$db_user = "root"; //你的mysql的用户名; D( W, w# {: N2 g. i6 u! v
$db_pass = "password"; //你的mysql的密码
& p" P, F; h3 l3 X3 d' B$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
f3 W/ @5 Y' H) W8 z) j. H8 N$timeoutseconds = 300;取当前时间。
C6 q+ b) @% R! F. a$timestamp = time();上面的完整代码:
! R+ f- z/ I9 S0 i+ R- I E; R* w<?php
7 N0 p+ Z Z! N6 p8 C" ^$server = "localhost"; //your server
, d8 v1 H; G) ^) M9 e3 Z0 s( ~$db_user = "root"; //your mysql database username) `' t* }7 U, d
$db_pass = "password"; //your mysql database password if any" k) E+ C/ r) m Q8 ?8 y( r( p
$database = "users"; //the db name4 Q; @2 `1 N; H# [4 k8 G, c( S
$timeoutseconds = 300;//timeoutseconds limit
! O8 x& E% ]( `5 L//get the current time# O) C4 x- [$ S: c
$timestamp = time();; y8 P4 K0 U5 A- q
//calculate the lowest timestamp allowed7 g( z; M) o- V3 b
$timeout = $timestamp-$timeoutseconds;5 i( @- {& X( K9 b$ C
?>连接mysql
/ H6 a4 t1 E2 s# W* R1 y2 Vmysql_connect('localhost', 'username', 'password');也允许使用变量形式。; h; S0 T3 b4 H& [7 X1 W% b) J; |
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接 A3 y5 o% l/ w' k3 }
mysql_connect($server, $db_user);查询数据库的代码:) X; ~2 p- [/ ^: _
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
/ b/ X5 f, Y9 U8 S) d$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
4 Y' f% F. y2 }6 f) N f) k('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");9 P$ [: X- n" K: |9 C2 y
如果用户用错误信息的话,这样处理。
% P2 h9 r- V" A0 r7 u! Bif(!($insert)) {6 y& @9 ]9 H7 L
print "Useronline Insert Failed > ";
+ ~- \" X+ d' y5 J}然后实现当超过设置的时间就删除该用户记录。1 v, v/ c0 ]. q. H4 X4 V
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
0 H, Q# q2 r y$ v+ ?% dif(!($delete)) {, M v1 I4 }6 P' `
print "Useronline Delete Failed > ";' x4 F% Z! g$ c3 R& w! t7 l5 F
}下面我们解决数据库中不同IP的问题
/ A' F* @6 |5 k1 q$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用& m+ g7 |% q% }7 S8 b4 X& a
mysql_num_rows(query);来统计用户,代码如下。* P' y* V! q- Q8 m! Y o( s
$user = mysql_num_rows($result);最后关闭数据库。
: |+ \' s9 B- `) zmysql_close();显示在线的人数。" A; E! ?7 g& X: \
if($user == 1) {
! r- }- r ]5 Mprint("1 user online\n");
7 q2 `" b* a. X3 A m} else {
7 p! k4 z' A3 i# ]+ `& i6 M6 ^9 q0 qprint("$user users online\n");+ J, Z# y% S! T) w
}最终把上面代码写成一个PHP文件如下。
4 F9 l4 @% S* I( |0 u<?php
0 D" y% [1 C" r- T: O: y//Put your basic server info here2 e2 R! G& f5 z6 u1 }6 H) j! q
$server = "localhost"; //normally localhost
5 p5 X1 e+ X1 B& B! a( T$db_user = "root"; //your MySQL database username
% S7 P% z4 I, f' b4 G$db_pass = "password"; //your MySQL database password4 _- D" S/ P" g% z
$database = "users";# ~; {- c% ~! `* g. L- b; r8 q
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
2 j' X, t( v* d- P1 k0 P, m6 T// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last+ Q$ k7 V* v) w9 A
// $timeoutseconds seconds)8 a& c* m1 a( t
//this is where PHP gets the time* n/ B8 o6 ], ^5 O9 x/ d
$timestamp = time();3 R. D/ i, L4 \1 g0 {, o
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed3 L& F4 v2 \1 W/ @6 Q3 J4 c6 v
$timeout = $timestamp-$timeoutseconds;
/ ?% l. f- K- K! I1 r//connect to database
9 V0 _. C, D2 rmysql_connect($server, $db_user);8 @1 f) j8 ^( @: G! t2 e
//add the timestamp from the user to the online list
! t0 @# G+ p& O6 u1 Y' J$insert = mysql_db_query($database, "INSERT INTO useronline VALUES- b$ j3 e6 }- O* Z+ K+ S v' ]
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");: v# }: x8 b; [8 H- r
if(!($insert)) {
8 k0 H: v9 V# ~$ f% _) uprint "Useronline Insert Failed > ";- q0 p- G/ T- Q) a+ Q4 C
}
0 M8 o; ]& r- A5 I; q//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
, h5 n7 z5 a( T+ s8 i& g/ ]; v' Y$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");+ T4 S, E$ t+ o6 b. ~$ M7 I. B
if(!($delete)) {
) ^, c( I6 x9 h0 Q* h$ B9 Lprint "Useronline Delete Failed > ";) }# ^- o) G5 p0 n- }8 ^
}
& z; {. {# [; m1 X//select the amount of people online, all uniques, which are online on THIS page3 ~5 u2 ]8 ]" z1 D o" _
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
5 r$ ]3 r2 j( K |6 h6 C# O! d) Hif(!($result)) {" K/ C% z( D$ |9 A0 o3 U! E
print "Useronline Select Error > ";# [3 r. a2 K" w% d0 y2 |- }1 ~
}
( O) H S8 D2 |! \//Count the number of rows = the number of people online6 L+ H: X2 G/ L
$user = mysql_num_rows($result);4 i, j' W) F6 C5 j
//spit out the results' f% w/ }% w8 @% R% W6 p% f6 G
mysql_close();& E0 m' \) q6 C3 T' _* s1 v
if($user == 1) {) m4 A* I6 ~, B' [8 Q
print("1 user online\n");9 h8 u0 g9 N3 N; n& b
} else {
. ~9 @; Q" T4 R/ u0 Wprint("$user users online\n");
- \% B& ^5 z, x: r5 ]}
8 w6 z( H" q9 {+ u0 }( [' V5 T/ E?>5 j& L1 v. ]8 ?

1 Y8 l6 p" `( q% |以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。- Y" b2 U$ H/ u- y G! N% o( V0 A
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
# B! ^& y, `/ J5 N _* S/ n. F5 J我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
( u6 ^9 z% R9 h; e: F- |% ^$ ?当然啦,这两款主机也是相当不错的。
h: e5 a$ H$ `- `- \* V智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
6 n O( U f# n标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
/ T, {% E4 V1 [& B) ]提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
o" f( ^, T8 t0 O# v) w空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
6 K% ~( Y1 h* h: N+ q Z自己加QQ去问吧。 |
|