|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
; B; j; Q+ p1 ?7 B# x我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。7 u( j" j9 I) |2 g& B+ r: }
首先我创建MYSQL数据库表。
% ~# M! Z5 L Z" E/ m" wCREATE TABLE tablename (8 x$ y9 z3 [, L: i% r
field type(max_length) DEFAULT 'default_value' (NOT) NULL
# f; H, _7 y% H" G# J+ r4 c}可以使用的SQL语句。0 T. x7 B4 b8 j* S) Z
CREATE TABLE useronline (
4 e4 N, y( D1 L4 A7 e' Wtimestamp int(15) DEFAULT '0' NOT NULL,
/ B1 ]. s: N6 T; ~, ~; N$ Pip varchar(40) NOT NULL,
; N3 b. x r; D! k9 ?$ Rfile varchar(100) NOT NULL,
/ Z! [1 K+ ~. V" ~6 @! SPRIMARY KEY (timestamp),
2 ]* b; y; H6 ?/ RKEY ip (ip),
. m; X+ c, k& H4 pKEY file (file): s$ j* s# x4 T h& L4 s' Y0 J
);下面我们是PHP脚本,首先我定义MYSQL的信息。
. H0 c4 w7 I& L* Z5 v5 X2 I$server = "localhost"; //你的服务器
9 ^* p3 F: w* y$db_user = "root"; //你的mysql的用户名8 ]5 [7 \5 d4 \! s
$db_pass = "password"; //你的mysql的密码
1 N1 l7 q# y+ E, u; k" k$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)* W3 {, M/ ]* k. `1 \5 |0 s
$timeoutseconds = 300;取当前时间。3 k3 y# \6 m% p0 {/ D
$timestamp = time();上面的完整代码:
" @! D& ~" C, a5 ~8 A<?php' F* ]7 l' {) s6 h0 T! b
$server = "localhost"; //your server% e0 A9 [" y$ x: J6 Y3 j s$ Y
$db_user = "root"; //your mysql database username0 s! z8 G1 u# [4 Z6 K6 |( V" V( N
$db_pass = "password"; //your mysql database password if any
4 L! x1 `) E4 r( j ^$database = "users"; //the db name" A! @/ ~3 |5 J/ g3 J- m5 p/ \% Y
$timeoutseconds = 300;//timeoutseconds limit4 _5 L% Q" P( |/ w0 R8 R! y; `8 a/ L
//get the current time# g. Q& X Y" R8 L2 Q$ P; E
$timestamp = time();# \: x+ x, l U& s
//calculate the lowest timestamp allowed" n, a& I( r+ E7 H
$timeout = $timestamp-$timeoutseconds;1 O5 k# C( F' g+ E
?>连接mysql% f) I7 B6 [6 ^' e% m
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
1 | T3 K0 a6 t) H$ q: a$ `mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
& i! u1 z( p3 M! d. y2 vmysql_connect($server, $db_user);查询数据库的代码:- ~' J+ d6 q$ N: r7 G
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
% u& b7 |. P9 S1 X8 V$insert = mysql_db_query($database, "INSERT INTO useronline VALUES# l+ K T* Z& q% Y! s" Z- A
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
6 p( x3 U* l/ q) E. \8 H1 e如果用户用错误信息的话,这样处理。0 A. G( w" l7 c, x
if(!($insert)) {; K) ?7 n" x6 [; b
print "Useronline Insert Failed > ";0 t3 i$ `! e$ v q6 O8 j a
}然后实现当超过设置的时间就删除该用户记录。3 |6 l% Y( n" u( q. n+ `# G1 ]
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。/ ^, M& W+ ?" z+ W9 i/ e' j* m
if(!($delete)) {& X$ Y3 c W& K, C- I+ Y
print "Useronline Delete Failed > ";1 @3 [! p$ Z; w1 Q" Z# f! ?. s# r0 t+ p
}下面我们解决数据库中不同IP的问题
9 g2 u( _( C8 q7 S$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
7 y- _# r* k- Z9 v3 x+ Ymysql_num_rows(query);来统计用户,代码如下。
# v) |6 ]/ k3 G9 @2 z$user = mysql_num_rows($result);最后关闭数据库。6 i9 S9 \. j* ^ c; c. v
mysql_close();显示在线的人数。
7 ~5 G9 T* h) w% t+ g: o! cif($user == 1) {
4 P* R3 y6 {0 c6 x3 }, Eprint("1 user online\n");8 {! D' y7 U4 e7 {# ?
} else {, Y+ o& i9 g9 s! o; v
print("$user users online\n");
5 ~9 C- O- S. @* K9 T( ~: R# W}最终把上面代码写成一个PHP文件如下。
/ E2 H4 m/ Q4 m8 z<?php
! P. ?5 h5 u0 ~2 g# E; W//Put your basic server info here
3 B. z$ O6 i+ A& U$server = "localhost"; //normally localhost: C/ Y' Y& p" ^9 ^% o, d
$db_user = "root"; //your MySQL database username' Q$ g, ^" S& q7 t. x) @3 A
$db_pass = "password"; //your MySQL database password% n+ k; i* A, R' i. Y& U6 Q; m
$database = "users"; m- v# s; Z9 n2 J. E0 \
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are) w' W, ^! u& x' l& O$ M9 a
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last9 I$ r& [. [' [ N1 d9 M {
// $timeoutseconds seconds)
0 h3 \5 W/ H, a" w//this is where PHP gets the time
. L. a1 p# o: x: E5 `$timestamp = time();9 x+ p. _0 ?; y9 A
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed: A: K" |9 {5 Z- U/ w0 L& }
$timeout = $timestamp-$timeoutseconds;
6 {8 K8 b7 q2 f4 O; d//connect to database
. C5 j3 Q8 v5 U$ Cmysql_connect($server, $db_user);, m) B1 }' R9 {- K4 \5 j
//add the timestamp from the user to the online list7 I# g2 z# B& _# _% V: B6 S
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES+ f8 U, M f1 Z1 @, c
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");1 r& y. `0 I% [7 D
if(!($insert)) {
' L6 y& ^( y9 J6 k5 p9 ~) Dprint "Useronline Insert Failed > ";) @/ M% j; d) l; i% d* w
}
1 J& Y1 T4 A, q6 Q/ j$ n# m& u# {3 k//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.+ n2 M8 K* t7 j! Q8 s l( F' U
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");5 I# Z+ s3 o0 g
if(!($delete)) {
6 J( \8 f6 t1 a3 Cprint "Useronline Delete Failed > ";- o$ T' _$ A, d3 e0 j' w
}, r% H% o \& w& a6 ^' T0 H
//select the amount of people online, all uniques, which are online on THIS page
6 L) T" O: _3 b+ Z; a$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
. q2 V7 ^# Z' D2 }. d8 Kif(!($result)) {" B; w4 d4 |' I
print "Useronline Select Error > ";$ b/ l. S7 H6 C- E8 u
}
4 i: E4 f! F% @0 J9 P4 ~//Count the number of rows = the number of people online
l& ?) I( P. c- {$user = mysql_num_rows($result);
L; c# |$ S) E" W A& R6 p' f//spit out the results
4 E! k! n2 e( O# kmysql_close();! k2 O6 l/ T) @$ i1 n: N+ @; e
if($user == 1) {. ]0 C# g: Y2 V4 P& g) H9 y; b" o
print("1 user online\n");( }$ `6 Q) O# |- R6 N& K" s
} else {; [) i! n% e9 T% }3 G
print("$user users online\n");
* n1 l, C8 Z7 M3 L" n3 c4 `3 ^6 h}
" U' ]; t" d/ y4 }" a?>; Y2 M4 z! X: _3 ?5 e

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