
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
# \/ a0 H& t3 P' E我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。2 @5 X3 ?' [9 W2 X1 t- U! m$ H
首先我创建MYSQL数据库表。
5 H& A5 D1 o I4 HCREATE TABLE tablename (
( e$ k/ q; u* ~8 Vfield type(max_length) DEFAULT 'default_value' (NOT) NULL
& T# c* p, Q# O}可以使用的SQL语句。
* ?( g5 B! e" [: q+ v- [0 @CREATE TABLE useronline (( L9 O! U. h4 s
timestamp int(15) DEFAULT '0' NOT NULL,1 P) j9 i; f& e6 y: E' k) `
ip varchar(40) NOT NULL,- I0 j/ {7 F& e: I# K+ _
file varchar(100) NOT NULL,7 h' i3 q7 v) U2 V) Y) }) {
PRIMARY KEY (timestamp),3 @$ c# B# b/ k; ?0 t
KEY ip (ip),( y7 v, q, \1 F: d
KEY file (file)+ Z: _& Q. ~/ F
);下面我们是PHP脚本,首先我定义MYSQL的信息。) f" J7 }# e# h* v, o
$server = "localhost"; //你的服务器3 w- u# @: F& ~4 G) Q6 G* w
$db_user = "root"; //你的mysql的用户名; Z& M( H% v2 `5 X( h. z4 }' s# B: E
$db_pass = "password"; //你的mysql的密码+ i0 k9 F+ D/ Y$ B: A
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
' o- x. w# U4 V$timeoutseconds = 300;取当前时间。
, ]) X" O- ^ P' g( u4 k/ p. N/ z$timestamp = time();上面的完整代码:4 n) f; x3 C) d- F
<?php" b* S$ v0 ?) V, J0 O. P
$server = "localhost"; //your server: l7 S, [' d" ~+ _
$db_user = "root"; //your mysql database username2 d) z! }! @: p. Z
$db_pass = "password"; //your mysql database password if any% |9 h' r& {) E- i
$database = "users"; //the db name- |4 ?6 a" r& B8 q) B
$timeoutseconds = 300;//timeoutseconds limit
% ^* I5 D- P9 N1 g7 Y//get the current time
: a0 a, L0 \, O6 n$timestamp = time();
$ V( e: F; w) W1 b1 D7 `//calculate the lowest timestamp allowed
/ V5 x' B2 F# h0 V3 m6 x) z$timeout = $timestamp-$timeoutseconds;
/ W1 K* }& `: I7 i* Q. g?>连接mysql
0 k( \2 W7 v5 B" S! ?mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
: }" X3 {5 A% O, u& gmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
6 K0 T/ ]' t4 j2 \, Lmysql_connect($server, $db_user);查询数据库的代码:
2 N4 ?. W7 N) }mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
' D: n8 b. Q8 {3 Y- r2 T: U* W; ]$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
4 o/ L* b. n2 r/ F/ W8 z, m('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
+ g1 g1 r* h6 o; f3 l如果用户用错误信息的话,这样处理。9 {9 Q, ^ @9 i$ j; Y
if(!($insert)) {
: Y9 o, q, i3 a+ n) l3 uprint "Useronline Insert Failed > ";
, ?6 J' F3 r" o9 y: P}然后实现当超过设置的时间就删除该用户记录。$ ^% _) `( D$ Q( P p$ t
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。$ D, `2 [# W! t9 K3 }: ~
if(!($delete)) {
2 b2 V4 y5 U8 p1 y Q3 Yprint "Useronline Delete Failed > ";
2 R/ p5 ]4 l l}下面我们解决数据库中不同IP的问题
, q+ P. o; R( P5 [/ w$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用" z! n N8 x* z
mysql_num_rows(query);来统计用户,代码如下。
- E1 v1 Y9 M) C9 `+ Z- w! m! e$user = mysql_num_rows($result);最后关闭数据库。$ ]; c) T$ o2 _" b4 v" _
mysql_close();显示在线的人数。4 K' s; A1 K4 H- k
if($user == 1) {# u: ?1 A0 K; r/ J$ d* p! o/ G P4 i
print("1 user online\n");
$ `( }+ C9 [. F6 \! F5 I} else {
8 Y& s. B, Z: ]2 Y/ w5 bprint("$user users online\n");
Y! g. z' v8 S- M$ E' S, d}最终把上面代码写成一个PHP文件如下。5 V" u1 A" b! P& [: _3 t# `* o
<?php
8 Z- {' H/ V% Z1 a8 ~//Put your basic server info here
" B v! ^; A0 z# a7 Y$server = "localhost"; //normally localhost5 A4 b& h! Z" B, H+ l8 v) r
$db_user = "root"; //your MySQL database username6 q6 s7 |/ z$ ?# I1 S: K
$db_pass = "password"; //your MySQL database password6 J8 \2 l3 ]+ I" @9 d/ {. F3 E: e
$database = "users";
8 f! a" E* k, b% v$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
/ o! t$ T i0 ?, [* n- v, m// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
8 i ?! o" o3 W' I% J; X// $timeoutseconds seconds)
4 d9 K! l; \% W( @! B//this is where PHP gets the time
; k8 y) w% B7 M$ v# y+ L9 O' J$timestamp = time();
' q. S; M Z) q; A//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
X; x9 O+ _% N$timeout = $timestamp-$timeoutseconds;* d- a% Y7 T5 F+ b* Y
//connect to database! z1 {& E8 r# A; O3 `8 R
mysql_connect($server, $db_user);
& O& \1 A" P' P" l7 H5 i//add the timestamp from the user to the online list, }6 n' t6 k9 F9 i: J/ [
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
T! c+ h, D+ i1 |! K('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");, G4 F6 v; F% S! s: p" q9 D' y5 I
if(!($insert)) {3 U+ @4 r# M* I
print "Useronline Insert Failed > ";' M9 v: D. c: Z2 G9 {
}
( i9 D! C# D0 U//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
O6 b# c$ \$ k1 \$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");7 u- M- w/ S8 p! p% r, N
if(!($delete)) {9 r0 i9 O& i+ V& r! b0 w) l
print "Useronline Delete Failed > ";; u2 B5 V6 N- [- P7 G
}6 Q6 W, @- S. o$ r) i' L( X
//select the amount of people online, all uniques, which are online on THIS page
7 R+ |+ W) g5 _ U# k# l$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");4 B8 d2 o: k9 x' g
if(!($result)) {/ n3 r/ U! I- ~, i, Z
print "Useronline Select Error > ";
# f" B! V# K& O7 i7 v. M6 f}
( U! [; b! n4 _' _, ?//Count the number of rows = the number of people online
1 n+ S* S/ B& L0 X2 a; N$user = mysql_num_rows($result);
" [* K. q: v; y//spit out the results
2 J# ^/ s3 E" ~; c0 J! lmysql_close();
& T% o$ v9 h& P8 Lif($user == 1) {
' D5 G7 }6 ?) |' `6 W+ D: A! v8 Qprint("1 user online\n");
! o# D1 J7 {* U/ S: P5 ?3 _} else {
. t( q3 a6 a( U0 R) Hprint("$user users online\n");
' D3 J3 ^$ \0 E2 o2 [2 K3 m}
. t! U* T2 g" f$ f* {?>
! |0 D/ ]4 w" h- b7 y& J % l7 X; j) F8 l; d
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
) K X N5 u/ I4 Q& g. `" D$ c% o时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。6 }+ e& V) C. O0 K# ~9 e* t- n6 V
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
& n! @4 ~6 c& `; z1 u当然啦,这两款主机也是相当不错的。$ C' {1 c/ F8 n5 g7 a' a, L
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年% b0 u0 l* c% _, c9 g: I! r
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年& \. s; u l1 U s8 ]7 Q
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
9 ^; ~# }' |; e% ?4 d1 a7 G7 b$ W空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55* |) A# V" I& [) ]4 m7 t2 p
自己加QQ去问吧。 |
|