|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!+ k K5 F0 |/ x1 Y
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
) L/ m5 ?6 d9 I v首先我创建MYSQL数据库表。
3 a$ E+ i* b4 F, PCREATE TABLE tablename (
$ B* `7 b' z# `5 L5 h3 mfield type(max_length) DEFAULT 'default_value' (NOT) NULL
$ F" j7 k# R% B+ F2 j}可以使用的SQL语句。9 j5 `& B; u2 j; I( Y8 e0 r" I
CREATE TABLE useronline (" N( T- I* l2 j
timestamp int(15) DEFAULT '0' NOT NULL,4 z+ p- }6 ~% j+ p
ip varchar(40) NOT NULL,: H% d9 @. q2 N8 l' y7 T( [
file varchar(100) NOT NULL,4 c3 Y( ?0 u+ k
PRIMARY KEY (timestamp),: e: u6 Z) @" ]* E: D3 i1 l
KEY ip (ip),
" ]* i. H$ b* I! o: M! hKEY file (file)
" O9 \6 h; \8 B; \);下面我们是PHP脚本,首先我定义MYSQL的信息。
# {. F2 s* u2 J: C8 L6 P9 I$server = "localhost"; //你的服务器
, k. `% B2 D' m2 e$ ]- T$db_user = "root"; //你的mysql的用户名
- `, I3 M: p, P8 }4 w: V$db_pass = "password"; //你的mysql的密码- N: q+ m5 [8 H; S4 q
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
+ o7 c: E2 d8 d* ]3 q, {, m$timeoutseconds = 300;取当前时间。& }. t$ _3 R; s" H4 w2 w* L
$timestamp = time();上面的完整代码:8 I# b3 |" ]# v \9 E' v W' Q
<?php
! g2 h) q# `' i6 [" w! k$server = "localhost"; //your server
; m7 G3 E! P+ P! S/ l9 Y# E$db_user = "root"; //your mysql database username! z( G$ z- D% y9 H4 `0 v! ]( W
$db_pass = "password"; //your mysql database password if any
+ h8 a; x6 T9 U* a$ f) G. W% A$database = "users"; //the db name0 m$ E$ e5 G' W2 [7 m+ a
$timeoutseconds = 300;//timeoutseconds limit$ c4 B) }( y/ \5 z( z
//get the current time
2 ^% Q/ w t8 u0 _$timestamp = time();
( o& I( ^# b: R//calculate the lowest timestamp allowed# i9 @# |! d: u) H$ [
$timeout = $timestamp-$timeoutseconds;
7 \1 g2 X/ P7 t$ g' B& m?>连接mysql
+ {7 `/ f U- P$ C j6 d# @) Cmysql_connect('localhost', 'username', 'password');也允许使用变量形式。% N- m) m1 J4 J' |1 e
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接8 @- m6 w# ~8 d+ i+ w+ u
mysql_connect($server, $db_user);查询数据库的代码:# V8 A* `( A0 d) t9 n
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。/ Z% r$ A& x# [+ T
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES! K: K) |! a6 t! |; g8 j. f) C1 `
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
% Y: A Y# l3 |5 I5 K0 H, s如果用户用错误信息的话,这样处理。; W) m [7 t3 i Y+ K1 I9 T
if(!($insert)) {: S1 j9 ^5 ]$ t- s( O
print "Useronline Insert Failed > ";
# Q+ m: }& k. u6 ~1 D5 d. H}然后实现当超过设置的时间就删除该用户记录。3 u# P3 Z4 `* p
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。( p: D% [% G4 x0 u
if(!($delete)) {) P) {/ c$ D. D# A
print "Useronline Delete Failed > ";( M k: z" D( u' c, D0 d
}下面我们解决数据库中不同IP的问题
. s ` A9 ^( P2 S$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用/ q, ?: `$ [: U4 [8 Q7 M9 S! ?; z
mysql_num_rows(query);来统计用户,代码如下。5 ^+ A. G }# @% @
$user = mysql_num_rows($result);最后关闭数据库。
: [. h* F& }/ {5 z1 N1 |3 cmysql_close();显示在线的人数。
# b" L2 ? g# h4 cif($user == 1) {
: Y2 c! f/ Q" x8 l# Vprint("1 user online\n");" E @3 _0 g# Q; x
} else {
& |- E! ]: s5 m6 s& uprint("$user users online\n");
% w9 {; s, c* B) u$ ]4 P: g: L# ^. `( s}最终把上面代码写成一个PHP文件如下。
8 m3 p4 X. L6 n/ I- l- L<?php
. d6 e! ^; N6 x5 K7 h//Put your basic server info here
5 @' x- \0 f1 z4 C$ J+ P# H H$server = "localhost"; //normally localhost
x; A+ z' C) F- W8 |$db_user = "root"; //your MySQL database username
, T7 g% ~- Z C/ n- C6 Z5 y' |$db_pass = "password"; //your MySQL database password
) \$ @" A1 k6 M$ G2 @1 {$database = "users";
8 ` Y' U6 e6 v, n3 f5 B4 z2 ~$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
0 I, L5 X& r1 H: Y; h& v, L// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
0 p& s' d5 t$ P3 C* S8 R// $timeoutseconds seconds)
7 Y2 {* M3 R5 Z! T: t//this is where PHP gets the time
7 S( n# W1 m: y0 }! I. G$timestamp = time();$ ~+ U: ?+ _! R$ m
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed* p9 R! J& k. q& P) R
$timeout = $timestamp-$timeoutseconds;
. X, ]) {+ S9 P! a' D' _7 h//connect to database2 C9 V y# V9 h' Z* E
mysql_connect($server, $db_user);8 I; s2 f+ ?; R) N3 h% o
//add the timestamp from the user to the online list
, ~& Z5 \& B+ X/ G! S$insert = mysql_db_query($database, "INSERT INTO useronline VALUES4 m% n( r; q0 |9 i% J
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");% K+ G& f6 G: F! u, M
if(!($insert)) {+ [; N. q+ H" [0 \( \5 Y/ o
print "Useronline Insert Failed > ";& }3 n, G( ~$ q) T) ^3 j
}
D: d9 R! e7 \/ t( q9 o: `//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
# m. g9 Z. E! H( J$ N" c O$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
) w! Z4 j2 B0 k% b! Yif(!($delete)) {
. W2 G( G/ o5 k2 y A. _3 Uprint "Useronline Delete Failed > ";
: g2 ]; r$ M) P7 m1 @2 u* m! d( b}
3 Z& t7 B/ C, t4 s2 J G* R" x//select the amount of people online, all uniques, which are online on THIS page& j8 p$ F5 |$ F& N( t. z, y
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");- k. q7 Q( b' A. U
if(!($result)) {- W% h, L% E2 Z: b3 K
print "Useronline Select Error > ";# A' k7 b- I1 M% C5 B1 K
}
* a5 a( C* U! W! t//Count the number of rows = the number of people online
J h4 W z+ L; O. z$user = mysql_num_rows($result);
: `8 F* Q& H5 i% G//spit out the results
8 \0 |, c0 c' c9 Nmysql_close();
. p) k6 ?. a& hif($user == 1) {
0 Q# t) _$ E$ x0 ^4 q# O. ?print("1 user online\n");0 g. {* M8 Z" u# D$ ~. D/ S
} else {) m3 K1 g! a9 S0 g: x: S8 _
print("$user users online\n");
) `9 s0 i/ i% X7 O+ G" ?/ x5 p, F}
, o( k6 Y) N" S, ] z8 V/ p# l' f?>
( a( e# K0 M" L. h # Y' K+ e4 C8 t
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
8 x. v" J; Y+ w; t- _9 `时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。1 \5 v: p( Z% a% n c
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。# z5 L" @" O/ T, ~
当然啦,这两款主机也是相当不错的。" O& t2 V' Z$ [/ x
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年( @) y3 u& i4 ~# Z9 l
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年3 j2 d% E: q7 L" _4 D" E7 d
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 9 }7 L; x2 D; m! x% K. c2 d
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
U% p- \# D$ J: I% D自己加QQ去问吧。 |
|