标题:
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
[打印本页]
作者:
lilcy88
时间:
2008-5-28 10:40
标题:
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
9 ] q6 i6 T6 A7 V( w" K3 x
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
" c7 E5 e3 k: R, z8 _4 S; d1 p( W
首先我创建MYSQL数据库表。
% @4 Q: P6 ~: l. H0 R- y
CREATE TABLE tablename (
" l) V1 O/ J& k0 K
field type(max_length) DEFAULT 'default_value' (NOT) NULL
2 L/ C. v' k; D; k
}可以使用的SQL语句。
2 [8 n! g3 W& @1 g5 a
CREATE TABLE useronline (
1 a8 T+ L( ?% Z( U. p, y9 c
timestamp int(15) DEFAULT '0' NOT NULL,
: m, W1 a9 g6 a* |) g: T0 K2 a! c
ip varchar(40) NOT NULL,
3 o1 J# ~% \8 C( f
file varchar(100) NOT NULL,
( p: O6 S% i$ ]/ d: {7 y
PRIMARY KEY (timestamp),
) P1 C4 X3 e! M0 B
KEY ip (ip),
, r3 `6 `$ B$ B5 I+ H
KEY file (file)
9 ^4 O3 v& {+ [7 _( ~
);下面我们是PHP脚本,首先我定义MYSQL的信息。
9 H" R! I9 w, v2 ]6 a
$server = "localhost"; //你的服务器
+ W/ f/ S/ S7 K2 y5 Z# x3 l3 J% t6 \/ F
$db_user = "root"; //你的mysql的用户名
/ \2 U& ^$ J# S R
$db_pass = "password"; //你的mysql的密码
+ e/ o1 R: F6 G5 \" R7 G
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
" K+ U- n1 r! U U
$timeoutseconds = 300;取当前时间。
) o7 x1 X; M0 L$ B) d" Q: g; ^
$timestamp = time();上面的完整代码:
; n4 @% d3 S1 B& K. ~6 Q& b
<?php
M6 _6 ?& w9 r0 c' [
$server = "localhost"; //your server
- {7 L5 E2 v% I2 P+ x6 d; |, W) ]4 _- E
$db_user = "root"; //your mysql database username
: c; _! k5 G: b
$db_pass = "password"; //your mysql database password if any
7 r2 V! [4 y# F$ K6 F T) n, |
$database = "users"; //the db name
: i" W& b/ o3 e1 h C- C
$timeoutseconds = 300;//timeoutseconds limit
$ k; E7 |1 m5 }& l5 T9 o
//get the current time
3 I4 h% L; n$ u- i) ^# P8 v/ s9 J
$timestamp = time();
" `/ N/ B' _# c; V3 d+ E. V
//calculate the lowest timestamp allowed
8 h0 |& C( @6 D# ?
$timeout = $timestamp-$timeoutseconds;
8 A0 k! v+ I1 q
?>连接mysql
$ k7 c* c# O. _- L ?- P
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
$ {% ~! x7 U& |$ _5 u. Y( W
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
- r2 P) S' }- n! a ?- r' f
mysql_connect($server, $db_user);查询数据库的代码:
: g( ]3 h% q. P q
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
: H. N/ L' Z3 u! O/ u+ s$ ~" t) P
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
, t6 w: Q9 X! d0 D$ t R& T- u0 `
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
1 [9 h$ M8 b8 A# M. q. @/ q
如果用户用错误信息的话,这样处理。
3 F. n2 `9 y2 g/ n% e
if(!($insert)) {
% j* z3 \2 M0 ~4 @
print "Useronline Insert Failed > ";
. H2 l; x( n% u F' }1 H
}然后实现当超过设置的时间就删除该用户记录。
9 l1 B8 |# O8 x- Z
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
5 e$ F2 m' }2 k0 d; f0 S: j
if(!($delete)) {
+ {) C7 N# G" k& Z( m
print "Useronline Delete Failed > ";
8 V& z" @, S" T6 p( ^
}下面我们解决数据库中不同IP的问题
7 Z* f$ W7 S" i V) T
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
" l }' s" M2 D( \% L# a, h
mysql_num_rows(query);来统计用户,代码如下。
9 B$ m& |( I1 R: ?; g0 U, ]
$user = mysql_num_rows($result);最后关闭数据库。
1 T9 f# `2 p. i, ]& S' B$ t2 q
mysql_close();显示在线的人数。
8 Z, l0 Y+ l1 f" C; }
if($user == 1) {
$ l% K5 Y" e# G, A
print("1 user online\n");
: S9 i: }- I: t. v9 g8 w) ~
} else {
; A' w0 U5 \* H! P& i$ [! s
print("$user users online\n");
6 @, ~6 C4 Z e' b' r6 I
}最终把上面代码写成一个PHP文件如下。
" \* Z- [ q1 g, P
<?php
- d1 x& S- k) n
//Put your basic server info here
9 U5 e$ _, a6 w
$server = "localhost"; //normally localhost
( P; M8 V! h0 C8 G' Y6 w" T- \& {
$db_user = "root"; //your MySQL database username
2 ]( R5 b/ `/ P2 e( |$ ]/ ^
$db_pass = "password"; //your MySQL database password
c5 \) A$ C8 K+ r
$database = "users";
; M- \* x7 i1 B# w4 y5 e
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
; \5 m- H3 e7 C& s w
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
6 D) g( _3 R: m/ a( G
// $timeoutseconds seconds)
' [) r' Y5 s9 D9 t
//this is where PHP gets the time
( X* s: h. E3 @# V! {5 _- V
$timestamp = time();
( p, W0 {- G- A( e' l. o8 Z
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
* H t5 e- h q* x7 D6 C1 x) _
$timeout = $timestamp-$timeoutseconds;
0 a# T2 n) R3 ~# k6 P
//connect to database
. [5 O E, X; w7 f5 t
mysql_connect($server, $db_user);
1 s0 h8 z- H4 m. A P& D
//add the timestamp from the user to the online list
5 r6 w+ Y6 C' {
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
. n/ _. \2 W9 y2 t5 x3 U2 O/ e9 [1 z
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
0 Y* m) Z. V, b6 y# T9 X# @
if(!($insert)) {
( Q5 V/ F5 n3 U) X
print "Useronline Insert Failed > ";
Y a! y, Y* e, F$ z
}
% B! E+ F! @# m/ J8 A0 Y1 ^
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
5 s; H+ [2 T. p: H: k- R( W6 V
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
& h" r* B9 B: a" O1 _, h
if(!($delete)) {
4 _* }0 W. t! }/ c' Z
print "Useronline Delete Failed > ";
& L, N. l2 U/ @3 m1 {1 k& P1 D' t
}
' z5 A$ M: k# u: t# v1 W. l
//select the amount of people online, all uniques, which are online on THIS page
9 m8 x! F6 G+ v
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
# E3 H0 h( w/ D; k* x( i. N7 a4 T
if(!($result)) {
2 _) B/ ^ }$ Y$ q7 Z. R9 P! p
print "Useronline Select Error > ";
- H3 o( |" W5 i- W c
}
+ Y4 T; C& h: a7 x2 K. P$ G0 M
//Count the number of rows = the number of people online
: s8 e0 T6 r2 y4 Y2 m& e
$user = mysql_num_rows($result);
- o% l9 g5 R% q2 R
//spit out the results
4 D9 [, K7 _' J' u
mysql_close();
" h+ S: ?+ r4 P) {
if($user == 1) {
% j5 Y( _) J% Y% W# X; I
print("1 user online\n");
% B1 l5 Y* F& o2 n% s
} else {
9 W- z8 N$ ~$ l5 C
print("$user users online\n");
6 z2 p; W9 Y2 W4 w
}
8 }% Q: s; L# p/ [, v: f
?>
$ @# C, N- R6 y" `! p
+ @/ O% @1 G( p3 j: I; t; I( O
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
: v: ]2 ]5 F k+ j. {( c5 V2 [
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
+ x" E) x. d' }/ @! l
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
3 f0 f4 N, O2 Z, f2 t6 Z
当然啦,这两款主机也是相当不错的。
: k# Z1 V) E+ e3 Y
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
2 _% K5 a- O5 T
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
4 c4 L. v; v8 w) w6 P
提供一下这个公司的联系方式:请见:
http://www.now.cn/vhost/
& k8 i: d- s/ {9 F4 G# L3 A2 r
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话
http://www.now.cn/callcenter/call.net?LineName=55
( O7 ^; I2 d3 h' e0 W
自己加QQ去问吧。
欢迎光临 捌玖网络工作室 (http://89w.org/)
Powered by Discuz! 7.2