
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!8 ]; w8 `: o6 k3 H1 M4 c- ?/ U7 }- D
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
/ m: p# q# ]: K) }9 ]首先我创建MYSQL数据库表。
% w/ I, m7 n( U4 { O8 p! pCREATE TABLE tablename (
* M4 L, O5 N0 E& i6 }' _$ n& Gfield type(max_length) DEFAULT 'default_value' (NOT) NULL g! g+ J5 A! d, m6 _8 x
}可以使用的SQL语句。
& h5 p# c- f; { S4 e7 ^$ yCREATE TABLE useronline (3 u6 \' g0 D2 K! f. C$ l3 n
timestamp int(15) DEFAULT '0' NOT NULL,' v+ m6 d5 ?( n
ip varchar(40) NOT NULL,. q% _2 X! B& S G4 A- s
file varchar(100) NOT NULL,+ F- W; w0 o" m4 a
PRIMARY KEY (timestamp),
: a" Z9 F! d. W5 {7 {7 oKEY ip (ip),
+ Y: c$ F- W8 Y- OKEY file (file)
( D0 K3 [. X3 F: F- {6 a);下面我们是PHP脚本,首先我定义MYSQL的信息。
$ y3 X" l S) H/ {" v$server = "localhost"; //你的服务器7 H7 V1 e5 c1 V1 Z) M1 ?, D
$db_user = "root"; //你的mysql的用户名
, y4 E$ x o6 o) X, d6 D$db_pass = "password"; //你的mysql的密码
0 X I% N) ]- |) X! `0 n- u$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)* ^, a' O! e$ f# z' K$ y$ C
$timeoutseconds = 300;取当前时间。) O6 C/ \2 R2 P ]( I8 z/ M
$timestamp = time();上面的完整代码:# B# d4 ^) b/ ?# m
<?php
/ ^9 g. Y- j6 X' _$server = "localhost"; //your server- W& q; s# ?: v/ S
$db_user = "root"; //your mysql database username# g& u) A l0 M7 L
$db_pass = "password"; //your mysql database password if any8 t$ y. D+ m$ M7 `
$database = "users"; //the db name9 {4 y! i' ~4 c2 `' y- W
$timeoutseconds = 300;//timeoutseconds limit
5 g/ n3 H/ e7 ^) N1 `//get the current time
! C0 t4 `4 R. r$timestamp = time();0 V0 h- i- z, ?5 _
//calculate the lowest timestamp allowed
; H8 [2 y U% {$timeout = $timestamp-$timeoutseconds;: C5 m6 T6 ?8 W( }) R5 `
?>连接mysql7 n, Z7 ?# ^, @9 v: N7 G H2 D
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。5 t/ J8 Q' y( @- j
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接, @ q) [5 t% ?4 |
mysql_connect($server, $db_user);查询数据库的代码:9 r+ g- g2 n+ S- X
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。* Q/ W; x/ z7 [
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES$ }) Q- `/ |, w4 P
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
# K+ b. G$ a7 C+ o+ A如果用户用错误信息的话,这样处理。
4 T T- Z0 V' } [4 m" B" [if(!($insert)) {; p8 r0 Q$ Q1 @3 P( U
print "Useronline Insert Failed > ";+ O+ a' b/ w1 u: J
}然后实现当超过设置的时间就删除该用户记录。
/ |" C3 L( W2 |$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。$ p" X, S; t* x3 A+ O x+ i
if(!($delete)) {* h: o0 i3 y0 p
print "Useronline Delete Failed > ";
( b- d( l- \2 z' J}下面我们解决数据库中不同IP的问题
- _4 X+ E5 L8 R6 B4 ]7 l$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用! S T y+ \5 m& ?
mysql_num_rows(query);来统计用户,代码如下。+ M. x( [$ }( M9 v" ~
$user = mysql_num_rows($result);最后关闭数据库。* V' Z/ v9 ]' \' n7 m0 M/ `
mysql_close();显示在线的人数。0 @, E6 I+ O \& p' a$ G
if($user == 1) {9 l- B# L, N* W6 X) ~# M
print("1 user online\n");
, [" b# p9 X0 v- C2 l3 e} else {+ P- s9 ~& |" {4 l
print("$user users online\n");" a% _$ A7 ^* t0 {8 B
}最终把上面代码写成一个PHP文件如下。& r( F' G: P# {
<?php$ S/ F/ E4 T5 F8 v( R, q* x
//Put your basic server info here
. K: [8 r9 R4 v/ w$ w$server = "localhost"; //normally localhost1 j8 D7 ]6 N, r9 T4 v$ V# @5 e
$db_user = "root"; //your MySQL database username+ @9 W% h1 }8 i1 O, ?
$db_pass = "password"; //your MySQL database password3 F1 S' `& c& s' h2 y) F
$database = "users";! R5 k2 ^8 V6 D4 ~
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are8 V0 a6 I) X9 z& |' d, ?( i" {
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last4 F' B2 t. e' G0 @7 T) H4 e
// $timeoutseconds seconds)
: d+ j* W8 `. N) s8 w- @//this is where PHP gets the time
$ f# Z- Z; t# S5 D/ M% E% k) V' F+ H$timestamp = time();
5 o. J) |9 z" J7 ?! V& H2 h W//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed' h: Z3 f( w" p; M1 L
$timeout = $timestamp-$timeoutseconds;
! S# Z$ a7 R( L" ?7 }//connect to database
/ J7 J+ x# K/ pmysql_connect($server, $db_user);% z& U) M/ M- Y7 y5 [
//add the timestamp from the user to the online list& [6 k Y, h6 g" W
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
: K* w# j$ }1 ?6 W! q('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
2 A' _6 A# _3 wif(!($insert)) {7 {" s' n* I+ }" P) U
print "Useronline Insert Failed > ";. G3 p/ ?5 ?8 b8 L6 c! P0 y. B
}& M, S. w) e& ^& U
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.6 |! _ Z0 Z0 Z; s3 { c1 W/ b
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
+ T) r& }+ h* `# {, K9 d! Q5 `if(!($delete)) {
" v* B- Q, [- y7 Rprint "Useronline Delete Failed > ";3 g% _% x7 ?4 [: w0 c2 Q0 s8 Z
}1 L9 F& r4 k2 J8 ^ |
//select the amount of people online, all uniques, which are online on THIS page
3 Q$ c4 O: A: n$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
0 K f: H; [7 z; Q h: k1 o" m) Xif(!($result)) {8 i5 c6 E2 S, v, n! w4 [
print "Useronline Select Error > ";$ t0 t' \& P$ B9 G, _8 a/ u. A
}- K+ N4 f/ d8 |7 [
//Count the number of rows = the number of people online
) s$ K) ^$ }, B$ e9 v$user = mysql_num_rows($result);2 ~* c0 h4 R2 Z9 K2 K! L- P
//spit out the results
# d+ }1 v: b) S+ _. X2 F% ]mysql_close();
& }$ g4 A& x; Y1 aif($user == 1) {, q- B- L! t2 k% y2 P
print("1 user online\n");
# \+ Q; m& L1 |" j$ v} else {
% r& U7 _3 ^6 ]8 wprint("$user users online\n");
2 a: D5 i9 P- I8 t5 f}
8 ^! B3 B4 w6 E* c% T1 S0 f?>1 T; g. N- t9 p" S, j

; a4 @# ]. @$ I C* r) {' _以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
$ t! p9 r l3 Z' s7 l时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。# e4 u/ G6 H N9 e" t5 ]1 P; U
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
" k9 x' y6 d9 y2 V当然啦,这两款主机也是相当不错的。( L6 D! P4 C# u, L3 f
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年& ^' d5 v( K# ]- N+ \) y }
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
2 ]3 S7 o0 c! i; }$ T, i提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 1 h/ c. L' d) R# c% i6 G8 e1 T
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
: @6 j& t) J4 K, V4 d- N自己加QQ去问吧。 |
|