|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!& U+ v& r0 `% w1 N5 K
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
+ ^0 e! X8 ^+ n+ B4 n6 v首先我创建MYSQL数据库表。: @- \) V# ]" |3 n* g
CREATE TABLE tablename (
/ l3 N* ?3 m6 N2 r* e% mfield type(max_length) DEFAULT 'default_value' (NOT) NULL
' x# [+ X" X# m3 |}可以使用的SQL语句。
7 q( I0 W2 H6 V# wCREATE TABLE useronline (
# A" S. o: _8 X' u+ ttimestamp int(15) DEFAULT '0' NOT NULL,
; x: a/ C2 M1 uip varchar(40) NOT NULL,) T5 B9 P1 e; M5 G4 R, p
file varchar(100) NOT NULL,! D' P: F0 g0 D. |3 l
PRIMARY KEY (timestamp),# ]& `' ?* S3 a
KEY ip (ip),$ {/ p0 Q1 T- y) G" O
KEY file (file)6 h# H6 y% f9 Y9 i
);下面我们是PHP脚本,首先我定义MYSQL的信息。
; N- d& `/ z# \& k$server = "localhost"; //你的服务器) y" Y8 W7 z7 L$ _
$db_user = "root"; //你的mysql的用户名
) d8 h% a& H" [; x) n4 l) K$db_pass = "password"; //你的mysql的密码/ J, f. l- q* j% z! b/ e2 o
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)6 L& r+ N: l0 a$ K% o% U: S7 W- S) M
$timeoutseconds = 300;取当前时间。 m; w9 U+ @: f+ N. z) K7 J4 E
$timestamp = time();上面的完整代码:- k" Y" r- q8 x0 S; b
<?php
' w8 q1 X8 x5 N3 d# w& p$server = "localhost"; //your server
+ D4 a; c$ J' y$ g2 |; f$db_user = "root"; //your mysql database username
1 f0 Y) a( y2 ~, m1 h+ W5 Y. i$db_pass = "password"; //your mysql database password if any( d$ ~- i0 u0 q$ n' k. Q* E
$database = "users"; //the db name5 K' e% Q" T i. l, f
$timeoutseconds = 300;//timeoutseconds limit
! Z# H6 M, i: D//get the current time' d- x Y7 v3 n0 f$ b
$timestamp = time();1 N/ @" c$ Y$ N8 [+ ~- V
//calculate the lowest timestamp allowed
' T" a# Z% h R; L& u5 ^$timeout = $timestamp-$timeoutseconds;8 s9 Z& j% G4 S4 Y1 Y; A
?>连接mysql, k2 z O; R) m
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
2 g; f0 c' q4 p M7 ~! kmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
, s5 V9 K; G. y3 \mysql_connect($server, $db_user);查询数据库的代码:$ I. j6 O5 A3 H# X$ k
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
% k6 c( S+ i+ k3 }* t/ @% d$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
) I8 \4 H( {/ M" M# k('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");$ R* P/ F3 g: v- I
如果用户用错误信息的话,这样处理。$ h& w: }: _# g- Z- f
if(!($insert)) {9 J; i4 e; c5 O5 s/ P0 `+ R/ s
print "Useronline Insert Failed > ";
9 K. d5 _- N' g0 G) U* n. O}然后实现当超过设置的时间就删除该用户记录。
1 C6 Y* S7 \3 A7 u* c: H1 c8 [! a$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
^1 H0 g6 l4 M# Vif(!($delete)) { f f* n0 _! t6 u0 f
print "Useronline Delete Failed > ";/ ?: }" G: C/ \+ z% C1 C, ?$ |+ f
}下面我们解决数据库中不同IP的问题
* M. X: l1 U" [) M) m( K$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
7 V* T1 L0 z% Pmysql_num_rows(query);来统计用户,代码如下。
9 w2 R/ W* m; [+ m6 U$user = mysql_num_rows($result);最后关闭数据库。5 z Y( s: b3 K+ Q o
mysql_close();显示在线的人数。
2 m7 ^8 ]6 P5 I7 `$ Aif($user == 1) {
) c. |: g; `( l3 ^print("1 user online\n");8 M8 S5 E% {7 e& l* }0 f# |- K1 r
} else {
7 W, _* p# ~2 w9 K }; q4 Rprint("$user users online\n");
" I4 R; K5 n1 h) h: m8 a0 G}最终把上面代码写成一个PHP文件如下。
2 I* c) e9 G6 l7 K: U5 |<?php% C5 J( L; t2 d; |
//Put your basic server info here* a6 @) o+ T8 E6 t
$server = "localhost"; //normally localhost* P) A3 k5 _! Q1 t- K$ }/ H }4 z
$db_user = "root"; //your MySQL database username
; F( | G( P; w9 o: `% F$db_pass = "password"; //your MySQL database password
# s& O# b; s3 u/ j$database = "users";
* _$ C, e+ D; b% z7 a; A- s4 L$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are4 n/ |' P0 q0 I7 l
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
& |/ L! A8 E- H, A// $timeoutseconds seconds)
- p3 c" w, K/ ?" Z( Y! `//this is where PHP gets the time2 w* f6 s0 {# ^/ V. ]
$timestamp = time();
2 K: A% x$ z$ n//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
$ e; p0 d- C1 Q! R$timeout = $timestamp-$timeoutseconds;! q7 Y- w: s( o
//connect to database
& k; H" z" L2 m8 p( U" L# Tmysql_connect($server, $db_user);
/ h1 I% y6 D/ t! Q& r- Y8 b" f//add the timestamp from the user to the online list" F! l9 E+ P2 i; w
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES( `: W4 D1 L5 p, Q! ^& d$ X
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");* j( l$ {, _0 G
if(!($insert)) {6 W8 p8 b( o( T; j/ w% y/ i; p
print "Useronline Insert Failed > ";
% z0 ^% {+ Z G}
3 }) {$ f. M( H8 C. x7 `) P& \+ \& Z//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
4 l8 w! ~& h! R! ]' E6 D* h$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
# S: n0 I0 M. t* Y7 `1 eif(!($delete)) {# W% `/ H. m* h9 v k
print "Useronline Delete Failed > ";9 Y0 @' C6 b, T1 M5 a( F
}
& Z* I0 l! L- j5 J% c# F' {- y//select the amount of people online, all uniques, which are online on THIS page# {8 ]$ R1 D$ S9 w7 W, Q+ H2 `$ f
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
5 z5 @& z' `: H3 iif(!($result)) {
6 [+ s8 U$ w: Xprint "Useronline Select Error > ";
. w. y# y7 |& Q* u; E}, Q. z/ D" i e3 N T. ]0 `( F% b
//Count the number of rows = the number of people online
6 R" R+ q8 [! D- P( k1 H$user = mysql_num_rows($result);9 \% O5 @" G' [# |* m' ]$ k- Z( @% e
//spit out the results4 d2 o, [/ ^- Q
mysql_close();9 {, U8 x9 |" _7 }+ D, f
if($user == 1) {
8 L+ r1 s5 f: z8 Cprint("1 user online\n"); O& F- S9 i! m8 \
} else {! M4 l+ V6 N: s7 h- _# S) k: d
print("$user users online\n");
* c4 t! L" }8 `, i0 e$ }}& E" B- l/ w# K9 U! k) a5 `
?>
, \5 l) n9 O4 X: }, |9 @$ v 8 B! M. q+ i% J
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
' S/ O& C1 U: C: \7 k时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。5 t( e$ j; U* D
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。+ s3 W! _1 p& C3 F9 P2 U: I. c
当然啦,这两款主机也是相当不错的。. L9 Q3 n3 }+ ?/ N8 t; F; \; V
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
6 U6 ~$ Q& u7 W- V* e标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年2 g" U0 n( z6 t( P2 o
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ - H- k! T% i/ i3 [/ n( W, N: D
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=553 R# ?4 _/ {( F+ _1 c! ?5 Q( _
自己加QQ去问吧。 |
|