
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!- M! O2 ^0 S% h7 X) G) [) i
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。% c, I5 G: Z1 I
首先我创建MYSQL数据库表。' n' e. u6 i: n! S* N
CREATE TABLE tablename (
, u: S" A* D) F7 Bfield type(max_length) DEFAULT 'default_value' (NOT) NULL2 B1 U6 b6 S8 @ n
}可以使用的SQL语句。
6 E" y2 k/ l _CREATE TABLE useronline (. |' z7 C% g/ H7 I
timestamp int(15) DEFAULT '0' NOT NULL,
; @0 e9 c! D: @! U4 g" V+ jip varchar(40) NOT NULL,! n. f6 O6 v7 H2 E2 {4 Y
file varchar(100) NOT NULL,- {+ o( w5 m" b. N* z
PRIMARY KEY (timestamp),
9 _1 M+ y/ L1 k8 g8 x: {KEY ip (ip),
& R- Y3 e5 m+ m& _3 N7 Z* ?KEY file (file)& j. p0 ]+ v. n) S; w5 X1 i
);下面我们是PHP脚本,首先我定义MYSQL的信息。
$ ?9 E2 ~6 [7 j2 s* v$server = "localhost"; //你的服务器7 S1 ?7 e9 N- K; W! ?
$db_user = "root"; //你的mysql的用户名
0 S7 o- z$ g+ A' L& Y( `- L$db_pass = "password"; //你的mysql的密码6 z. H9 Z( v8 e
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
6 H8 t' U( y; y( }3 ?$timeoutseconds = 300;取当前时间。
& @! J8 i0 a8 d6 C$timestamp = time();上面的完整代码:
+ e1 x) K* X+ H' v4 H A+ }<?php+ q! r$ Q9 ^6 e( K
$server = "localhost"; //your server; g. |. M3 R# P
$db_user = "root"; //your mysql database username, d& U' s9 u) q; \4 Z
$db_pass = "password"; //your mysql database password if any" T* K# d& V6 j) p% \* b$ i0 ?
$database = "users"; //the db name6 R; ^6 |% A, v0 E7 K
$timeoutseconds = 300;//timeoutseconds limit
/ T! W/ k1 q# M+ a$ D* G//get the current time
8 m; J, i) n* Q3 _; F' t9 u, q* [- `$timestamp = time();* n4 }% H6 v1 L% }
//calculate the lowest timestamp allowed- F& G: ?; B5 `3 D9 f7 a
$timeout = $timestamp-$timeoutseconds;
. T3 y: w1 j; p?>连接mysql
d5 N- Z/ [1 _4 n3 m$ Rmysql_connect('localhost', 'username', 'password');也允许使用变量形式。 j$ c7 T; ]$ L
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
1 y8 x2 L0 e( b3 l; r. _mysql_connect($server, $db_user);查询数据库的代码:
; i7 u/ i1 L) w; {. kmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。* d X5 ]5 d D1 z6 F
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES% s2 G3 P, v- }# s
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
5 p! w7 W8 w8 \& C3 _& L* {" V如果用户用错误信息的话,这样处理。) v( k; Y T2 F3 h
if(!($insert)) {0 M% d) @1 n: l1 _. k- c
print "Useronline Insert Failed > ";8 _4 _ b. K3 F$ Z: V- D; J2 C
}然后实现当超过设置的时间就删除该用户记录。5 y' h+ Q9 I- I
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。- [' K, p( H4 O2 l1 _6 H2 X
if(!($delete)) {
, Z& V ^$ n$ bprint "Useronline Delete Failed > ";
- K' k3 _, w% q8 N}下面我们解决数据库中不同IP的问题5 m$ l0 a" P# i8 N% I) l, e
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用" F3 f: E5 |( i4 z" T& C
mysql_num_rows(query);来统计用户,代码如下。
- \6 R: m' T) j- ?. }$user = mysql_num_rows($result);最后关闭数据库。
+ u* f) k+ K/ `3 ?/ cmysql_close();显示在线的人数。9 E$ V2 u3 Z3 Y& l2 c" f
if($user == 1) {
/ ~3 b; f2 I) N- T2 Sprint("1 user online\n");- o" R6 o+ K( R( Z( R
} else {
% K' b5 {9 G) U1 x( pprint("$user users online\n");. ~5 m e1 N) `) b" v; j+ J
}最终把上面代码写成一个PHP文件如下。* w4 Z0 }* x+ X8 m4 L
<?php
# D% f2 |8 V' ]4 |5 r# N( u& ]. W//Put your basic server info here7 {; n& y. @% e
$server = "localhost"; //normally localhost
: _, D3 `; k' E; e# u1 z$db_user = "root"; //your MySQL database username' H9 I) P- h9 r
$db_pass = "password"; //your MySQL database password1 _% ^8 h) Z% _
$database = "users";) \1 A+ J: K I
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are8 h F4 E7 H# z; X, U
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last' V$ E- | k4 M2 j5 K9 [
// $timeoutseconds seconds)
2 B- |+ W' [5 }% f//this is where PHP gets the time
- ]: m& f/ F: |( m4 B1 c, W$timestamp = time();/ X9 e- M- ?, C% F' D, \. t( }
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed7 g* P* g/ d# }; W2 K
$timeout = $timestamp-$timeoutseconds;/ x3 D# C+ n; n
//connect to database
+ o9 W& R/ j# `. b) V/ Mmysql_connect($server, $db_user);1 W m, C1 \" `; W$ z. A
//add the timestamp from the user to the online list
2 W% I4 k% `) M; d" \! l: N$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
3 \9 f& m# j0 `('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
- h1 e6 K: @* \7 N# c3 |+ Pif(!($insert)) {
9 X/ K r1 f8 y% \; ^+ Tprint "Useronline Insert Failed > ";$ z: `4 O' L" e6 d7 O
}
/ ?5 r) G/ J, i! u//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.8 F6 }, n: |/ K# E3 b" c+ H9 ?
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
- m% {8 y4 e. w# c# c$ P, ^if(!($delete)) {
6 l- j2 \& y: a3 Z. [1 Fprint "Useronline Delete Failed > ";
2 a, ~) g4 b: R7 b6 B. C* }0 V}% J: N: |, s, b, F1 `! e8 Z7 a
//select the amount of people online, all uniques, which are online on THIS page7 h1 D% P% b+ r* N8 T) ? p* @, T
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");. ]! Q6 q2 Y: P& j3 l& z3 ?5 B" U9 g
if(!($result)) {* }0 R5 G1 H8 x) v1 u
print "Useronline Select Error > ";+ W! l- E; s8 c9 x0 z( |9 h$ _
}
: s, A, ]4 N$ x- s//Count the number of rows = the number of people online$ ~8 t% u! \) d6 `" }$ K( i
$user = mysql_num_rows($result);$ B- a, z- X, l0 I" t
//spit out the results
2 d" R; f+ \; P- b5 A# gmysql_close();, j& C) K. Y0 h! a; ?
if($user == 1) {
+ u7 I8 B5 G/ hprint("1 user online\n");
N$ l7 q. d! k( g% X9 Y" c6 n) ~% c} else {
* P- ], [) l$ R& D9 Mprint("$user users online\n");
- @+ e9 o" @- K}6 }+ T4 r; @5 ?
?>
! J$ M/ T: P; O/ T7 a. V
) e, q% S" A& `5 T9 G& X% c2 e以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
. k/ v4 B5 E# z6 A a时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
# P! q3 R9 f" b) J. y我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。' g4 r6 t' I% d: g& ]* u
当然啦,这两款主机也是相当不错的。
( ?0 r, U6 U4 {8 v B2 b5 R' f智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
+ U& i& B% `7 {1 t% x标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
9 h9 N* i. m: W8 a( ~' V提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
9 X. R$ D1 f9 D空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
# L) |" \# b" a- c- n+ k0 l1 k自己加QQ去问吧。 |
|