标题:
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
[打印本页]
作者:
lilcy88
时间:
2008-5-28 10:40
标题:
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
* B; G& z! w- A- K7 M) D
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
# ?& l, q, Y) r, u; i+ ^, `, k4 S1 o
首先我创建MYSQL数据库表。
8 Z9 @7 y3 Z* k& @; d$ L
CREATE TABLE tablename (
+ D# Q' X" ]: W! h/ ~
field type(max_length) DEFAULT 'default_value' (NOT) NULL
. Q% ^6 ~. Y' J) U1 l/ O
}可以使用的SQL语句。
) \. H% c" o7 R# ~5 b1 a
CREATE TABLE useronline (
4 i3 x1 T) y& R1 v' [/ o
timestamp int(15) DEFAULT '0' NOT NULL,
5 w( t5 d( |5 O0 a
ip varchar(40) NOT NULL,
+ z- ^0 O% X3 |; ] x) V
file varchar(100) NOT NULL,
/ ]' G7 _) ^. C
PRIMARY KEY (timestamp),
( N. l+ P0 s2 m% {
KEY ip (ip),
( R4 {) n7 j8 G1 Y8 n, H# V
KEY file (file)
, y: q$ J% g- `0 [
);下面我们是PHP脚本,首先我定义MYSQL的信息。
3 ]/ F" R8 Q5 |8 V& A! G3 S _! x
$server = "localhost"; //你的服务器
# P& }* B) j7 \; V
$db_user = "root"; //你的mysql的用户名
4 b) _/ `: H; F# ^* @ H) z$ Z
$db_pass = "password"; //你的mysql的密码
8 H/ G" J' G' q# s# p- s
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
2 v2 m( l: q& s$ B4 s* u, F
$timeoutseconds = 300;取当前时间。
3 t) U& F7 R! ^1 {
$timestamp = time();上面的完整代码:
( d$ R. V! [" M/ N% p
<?php
* a8 o( _# w: y- \+ g# o- U! y
$server = "localhost"; //your server
/ l8 |" Q: |1 l7 r: N5 G+ a& k
$db_user = "root"; //your mysql database username
9 c) U" B7 Y# J4 n) Z' A6 ^
$db_pass = "password"; //your mysql database password if any
6 V6 g. |+ c+ J& y' d
$database = "users"; //the db name
' z( T8 O* {6 I1 Y4 s v0 o
$timeoutseconds = 300;//timeoutseconds limit
2 v$ E$ _& M: b) k1 e- O% z. V
//get the current time
8 N/ y9 V" k) r2 J; P
$timestamp = time();
( a& n! ?8 L& Y' e ]
//calculate the lowest timestamp allowed
0 a. i2 o8 x9 ?* E2 h% A" i
$timeout = $timestamp-$timeoutseconds;
. M9 K7 f6 n b: i7 F
?>连接mysql
! Y! G8 B- r( i/ O5 Z4 h! R( n1 A$ Q' f
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
i+ |! n0 l0 \+ ]8 z' w
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
" ]* f% S( J0 C+ U; u- l# [
mysql_connect($server, $db_user);查询数据库的代码:
S% k$ n' z4 O1 j
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
5 b2 |! a# N; d# U
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
8 m' L1 X* w, l# |2 @% N3 w& [
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
# O! I- l: t/ q
如果用户用错误信息的话,这样处理。
" j( s6 q. _: F- v9 c
if(!($insert)) {
8 O, K: ?. ]( I" R
print "Useronline Insert Failed > ";
% ~" F+ p( W6 e" j
}然后实现当超过设置的时间就删除该用户记录。
: i) V B% f# P/ [9 m+ \/ J
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
7 @. t5 P3 w* ]% C- x# r7 J
if(!($delete)) {
) T( t: i* e+ K3 r b( X. P+ G
print "Useronline Delete Failed > ";
: h. n/ X. q* u5 s0 w- M O; m8 A8 F
}下面我们解决数据库中不同IP的问题
0 A a! |! _% u1 f4 C9 Q+ S
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
% Z: ?$ W, H0 [" ]
mysql_num_rows(query);来统计用户,代码如下。
6 z. ^/ J' [ T9 A6 X) \0 f! l# q
$user = mysql_num_rows($result);最后关闭数据库。
' \! T0 H u& |1 h7 |2 J
mysql_close();显示在线的人数。
8 x# I% F* @. }5 m( h1 y
if($user == 1) {
9 @1 V Q- i5 \5 q7 u
print("1 user online\n");
# ~: Q& X5 q+ V: Q3 G- p8 e$ l$ b
} else {
8 `, M; g2 P; D4 @" k
print("$user users online\n");
7 E: o' w7 M: b* F- o8 d' x
}最终把上面代码写成一个PHP文件如下。
( Z2 [1 E; s N
<?php
( p) j3 V8 R* s5 Y7 B' k
//Put your basic server info here
/ s9 }2 }4 M' K. V! M/ `- H3 R
$server = "localhost"; //normally localhost
; K* `0 |+ d, v- h+ e$ R/ j7 g% l
$db_user = "root"; //your MySQL database username
$ i3 |1 ]8 N+ x' U' q
$db_pass = "password"; //your MySQL database password
' E8 O$ C* _, m) k, K
$database = "users";
& R+ L Q- q9 Y4 H( Q
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
3 a5 e$ s% E& R$ \" H {
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
6 {' u u; k7 P
// $timeoutseconds seconds)
- \6 b5 e# L' O4 h+ v5 c' L
//this is where PHP gets the time
" [, H" \! x2 b3 E' R
$timestamp = time();
) B1 b4 s2 t B/ s
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
* \, y. r4 _) D+ [! C4 h# |
$timeout = $timestamp-$timeoutseconds;
" u% x Z/ C$ c) W
//connect to database
/ L! ?; M8 [$ P( W1 Q# s# c# [
mysql_connect($server, $db_user);
6 K2 v, M& w, [
//add the timestamp from the user to the online list
/ x2 s7 I: q; |! D
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
% c. G( Y$ o( i; y/ H2 y3 a
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
$ ? m9 q3 p" \
if(!($insert)) {
: Z- g. R- o% l) o0 S% a1 f5 N+ {
print "Useronline Insert Failed > ";
! [7 G- \4 Z7 R5 g# {! M& }
}
2 l# q0 h2 g' S1 K9 t6 K; w; D
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
7 }7 W4 a( M. k# h
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
! r( T* y0 n9 z0 [" e
if(!($delete)) {
2 Y0 q3 F4 ~/ f+ f8 Y2 K, ~
print "Useronline Delete Failed > ";
- `. Q2 r" y* ]; @* F& E
}
* ]' h- t* ~$ z8 v: F/ y
//select the amount of people online, all uniques, which are online on THIS page
8 q. x9 F5 s/ B j* k8 q% Q
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
2 N; ? p( W/ g. s$ z2 M) M1 Q
if(!($result)) {
- v3 `% Y" j7 s/ v9 ]
print "Useronline Select Error > ";
3 t: H( ?& E% m, t5 V
}
' q/ h8 j$ |& v- g, _& M
//Count the number of rows = the number of people online
3 I/ K, X" X8 u
$user = mysql_num_rows($result);
0 m0 d; s6 _# _) n( f5 f, @
//spit out the results
9 R" x. i; {' |5 s! G' r: ~
mysql_close();
7 H" a$ G3 K7 W5 B5 e9 P1 w
if($user == 1) {
) o2 @) m+ U: y. h6 w3 u! s
print("1 user online\n");
5 y6 \5 b+ ^& H. c) j3 D6 S, b
} else {
( K/ ~8 p6 `% L5 B9 }
print("$user users online\n");
+ e, h+ `2 Y! s
}
1 G8 }0 C4 p. G/ p, W* V
?>
( d6 M. ]2 u# D7 A1 t# }
0 O, r8 F; a; c. h$ [( X ]
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
4 J' r S6 C) N! a* y4 | j
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
2 R5 e0 J' A2 D4 @
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
" f/ j- d6 N; f9 f k
当然啦,这两款主机也是相当不错的。
# q; b- n, M+ p9 c* ^, a
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
0 l' K$ U9 c t% a; ~
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
$ ?" n# a. v! ?6 C" U4 G8 P4 I- q
提供一下这个公司的联系方式:请见:
http://www.now.cn/vhost/
+ G$ q8 X$ j# t$ z
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话
http://www.now.cn/callcenter/call.net?LineName=55
! G+ f* F! W* b8 U0 r6 w% `
自己加QQ去问吧。
欢迎光临 捌玖网络工作室 (http://www.89w.org/)
Powered by Discuz! 7.2