
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
# d" Y8 f6 }! W8 H1 \& H7 n我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。7 N$ h* o4 a- V( y9 E& G: A
首先我创建MYSQL数据库表。
7 U! S: X& S/ z# A$ M: uCREATE TABLE tablename (, h; E" H; S: z4 e
field type(max_length) DEFAULT 'default_value' (NOT) NULL* ~0 ^2 B# P+ o/ H. n
}可以使用的SQL语句。
& `. b& X, O6 d3 K5 _. ICREATE TABLE useronline (/ u' s V) A: }9 c
timestamp int(15) DEFAULT '0' NOT NULL,
1 C7 G* P: @& o7 C2 tip varchar(40) NOT NULL,
, i, U$ q5 x0 z$ {0 ]& K" O pfile varchar(100) NOT NULL,
0 m/ V- M% c6 |% V V! m7 `4 M" ^PRIMARY KEY (timestamp),$ q" o! e8 b/ y5 D+ n4 Z) L1 f
KEY ip (ip),5 h9 q4 E; v: f2 }/ k+ s% [
KEY file (file)
& i( T% e% H& _);下面我们是PHP脚本,首先我定义MYSQL的信息。. @, u7 Y, }3 {, K) g1 y* H% T
$server = "localhost"; //你的服务器4 d8 `+ t7 x; U, N
$db_user = "root"; //你的mysql的用户名# f6 o7 `9 d; S4 b% W
$db_pass = "password"; //你的mysql的密码
: R+ Z6 H: Z: U$database = "users"; //表的名字设置统计的时间(多少秒内在线人数). _% | R9 P* M6 S* B7 C
$timeoutseconds = 300;取当前时间。! X5 x$ F. `0 _, W
$timestamp = time();上面的完整代码:
2 H" v( d ~- j4 h, k* v) Q<?php
' X) Z9 g% |' ]+ B* p# P, a! l$server = "localhost"; //your server& z% Z, E1 \# `( y7 o# I
$db_user = "root"; //your mysql database username8 x4 l$ Q' E z& D
$db_pass = "password"; //your mysql database password if any: {" }. _7 Y. a# m
$database = "users"; //the db name" I) ]: ~9 z2 C0 w
$timeoutseconds = 300;//timeoutseconds limit5 k4 ?. Q' P- t5 a
//get the current time
* K5 j* P3 Q# }% a$timestamp = time();1 o. f" a$ _9 W( [5 e* p/ i9 q5 ?
//calculate the lowest timestamp allowed
" {- q C2 d/ @* H/ w0 I" Z4 H1 o/ g$timeout = $timestamp-$timeoutseconds;* q3 Z, V3 L( x; l, b6 X8 h6 b
?>连接mysql( p8 ?8 }/ i1 U
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。2 i3 b0 |1 `2 n) {$ D: f
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
) H9 B/ O& g( Nmysql_connect($server, $db_user);查询数据库的代码:' I2 i2 n& X; z3 b( U6 C# i: R
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
! \3 v7 s' l, X$insert = mysql_db_query($database, "INSERT INTO useronline VALUES4 s! v2 ?+ F+ l% O% n
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
8 h1 D& [$ b0 S' f9 N! Q; R4 t& o如果用户用错误信息的话,这样处理。# f* w! y1 z3 \( G/ U/ [
if(!($insert)) {
# K+ U, S+ m; a ?8 `7 |print "Useronline Insert Failed > ";
, b9 M* U4 t3 l) _% z}然后实现当超过设置的时间就删除该用户记录。: z" S; E' G5 V
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
7 e2 [" h$ g% ?: N. [; j4 O( f9 gif(!($delete)) {
: A9 o0 p+ W1 r$ x, r. O- A. q q5 bprint "Useronline Delete Failed > ";# M# f) e. z% C
}下面我们解决数据库中不同IP的问题
: |2 E: n `3 N: V: I, Z* J$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
2 E, U8 x! V) [) f/ nmysql_num_rows(query);来统计用户,代码如下。
+ h4 g% T+ O5 h- L4 J9 K$user = mysql_num_rows($result);最后关闭数据库。 Z. z% C' ?* E
mysql_close();显示在线的人数。2 X/ l. U: I& T% @5 T D' q# a
if($user == 1) {
( [6 t8 @' P1 _- O3 Jprint("1 user online\n"); _6 x; L6 \+ h( s4 @
} else {
+ Y4 w8 v7 ^9 Gprint("$user users online\n");
2 t& {- z( t& x% _1 a8 E F}最终把上面代码写成一个PHP文件如下。
3 d2 U. @4 p8 Z4 \% L v! g T<?php
- C, z. I& W/ ?8 _$ B, N//Put your basic server info here* C K5 u6 W+ T* k; r9 Z
$server = "localhost"; //normally localhost
) D7 z: l3 `* B7 `$db_user = "root"; //your MySQL database username5 J" b* h# ~5 p9 J
$db_pass = "password"; //your MySQL database password
0 P' U2 @( V' M/ W9 d. l: [$database = "users";* j: [1 x* |( v/ G( s
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are7 g6 @6 s4 Q/ {! G' A
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
, Y q) m* e1 e" P// $timeoutseconds seconds)! ?2 Y, x( o3 {9 q3 l/ i
//this is where PHP gets the time0 N5 Y9 |4 Z5 D0 \ \
$timestamp = time();
- m1 L n2 T: J5 |. ]% N& Y//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed2 c; M6 B$ j# \* V, [9 V
$timeout = $timestamp-$timeoutseconds;4 k5 d) w6 Q" T1 N6 j" v
//connect to database- n1 @" Z" X: e& p3 Y
mysql_connect($server, $db_user);6 t1 X- _7 Z9 ~' l5 a2 m
//add the timestamp from the user to the online list; ~1 _" S* S5 Y3 w; k
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES/ E; {& a5 D$ U- k7 Z2 u$ |
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
& l6 W- c# G0 iif(!($insert)) {; A# k" G- V, w4 Z3 w( @ a! f5 U
print "Useronline Insert Failed > ";5 c$ s; u7 x& {7 e3 r1 ~
}
& m) d0 o1 I: m* d9 K//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.! q `- D+ n3 O4 M4 j( U9 p
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");- e) Y+ ?, N3 A
if(!($delete)) {
, {, _2 h9 C xprint "Useronline Delete Failed > ";9 W! s$ m% z% ]: @( H% D
}# K/ Z+ H v# j! s
//select the amount of people online, all uniques, which are online on THIS page
0 ^, ~: P5 k- K4 s% A$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
$ E3 v' M9 j" s1 s; H2 z! H/ fif(!($result)) {
0 _( T' a& C# `" a' T4 p! Yprint "Useronline Select Error > ";7 @+ `$ ` ?. c
}: ~' d# A1 q; y: A4 p
//Count the number of rows = the number of people online
2 D! G6 }3 L: {/ \+ E$user = mysql_num_rows($result);3 M8 {: o; |. ?! E6 h
//spit out the results- Q3 m2 j. G6 L9 J: k- C
mysql_close();
- V! ~5 U/ y: R/ pif($user == 1) {) O N$ D6 c& P0 v( ?1 Y* M
print("1 user online\n");% G: x0 Z. U7 d$ Q9 q
} else {
2 p6 z7 F4 [3 `& yprint("$user users online\n");
! g4 _" t9 }7 Z}* j6 R! O. b, r: E8 Y( V+ [2 A5 K! @* k
?>, P: g3 k8 Z+ d# f3 h; x

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