返回列表 发帖

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
+ C3 ]5 G) z. H! P# L! u我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。$ G: G/ l; [; n
首先我创建MYSQL数据库表。: F7 O$ g$ H! A* W. M, k
CREATE TABLE tablename (- F+ l1 |( i* z, H
field type(max_length) DEFAULT 'default_value' (NOT) NULL
4 v# u/ Z) v4 f9 P5 ~) u}可以使用的SQL语句。/ e6 {/ }$ j( `' U' [/ Z$ w
CREATE TABLE useronline (
/ a2 y, u: _4 O( _1 b+ Ntimestamp int(15) DEFAULT '0' NOT NULL,
  w# D( }9 J) k8 L7 gip varchar(40) NOT NULL,0 }0 V; k% J! t( t
file varchar(100) NOT NULL,
- Q# s7 p1 @! i7 W; F5 cPRIMARY KEY (timestamp),) [9 C1 E, o* J% L( `7 S( K: P3 o1 k
KEY ip (ip),6 }4 |6 a4 |5 u9 C1 \, ^1 u  W
KEY file (file)
: {6 k4 c1 l  z; d9 }" u, {9 B4 {. M);下面我们是PHP脚本,首先我定义MYSQL的信息。: [7 e* I! P: e! W# i4 W
$server = "localhost"; //你的服务器( Q. J$ Y# |8 W0 L
$db_user = "root"; //你的mysql的用户名6 A, A, C# `- O( \) \
$db_pass = "password"; //你的mysql的密码/ S9 G& i( y5 s& m# u! q' |5 @
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
  h1 R. ^/ B: }. {$timeoutseconds = 300;取当前时间。
/ S. u' q$ e7 }, E$timestamp = time();上面的完整代码:6 B6 j7 i- ^: s, O5 E7 P
<?php
( Z3 y& B- k* P/ l+ {$ U3 B$server = "localhost"; //your server4 L8 q/ J( \: s! r
$db_user = "root"; //your mysql database username
% x7 ~$ @2 p& D2 _3 Y' M% B  b4 @$db_pass = "password"; //your mysql database password if any( {4 M$ @# I/ S" T  v) u
$database = "users"; //the db name
, A7 B# t! x# @: J( n/ Q) ]$timeoutseconds = 300;//timeoutseconds limit
6 ]' V- g2 w# z& u' n- m" F3 T1 A8 a//get the current time
1 \5 G7 T3 p$ v5 K$timestamp = time();
0 x) m5 x" y6 n//calculate the lowest timestamp allowed
0 F1 [1 _! a$ o$ t! k2 T# U$timeout = $timestamp-$timeoutseconds;
" B0 V2 n7 ^* ^/ J9 V?>连接mysql
) G+ c# K  d7 A- Z3 emysql_connect('localhost', 'username', 'password');也允许使用变量形式。, }- u/ c, M/ ~3 ~0 k. s
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
6 B# m: g: s# B3 [7 O/ ^6 {2 ?mysql_connect($server, $db_user);查询数据库的代码:
# X- u: O3 q( w/ m: L/ W3 Kmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
  ^1 g; u  }" f, m- J7 R% T$insert = mysql_db_query($database, "INSERT INTO useronline VALUES( {7 I! \3 F! n
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
# [/ A" a% d8 {  F* G2 E! V如果用户用错误信息的话,这样处理。5 W1 M/ G4 G% n- s! d$ i% v
if(!($insert)) {! d* X4 y% A# x) ]1 a
print "Useronline Insert Failed > ";
( @% `' C7 w6 B. p; _}然后实现当超过设置的时间就删除该用户记录。
% N! r( B" Q. S+ [3 v$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。6 }! _! ]# W5 N. g  a8 g
if(!($delete)) {
( f+ `7 J4 w2 ^; Tprint "Useronline Delete Failed > ";
' z0 j  U6 S0 g6 W  a: V}下面我们解决数据库中不同IP的问题
) l7 z" u4 w7 s5 O9 }7 ?$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用* D) N5 ]6 h- J) R0 y$ K$ Q  @, J
mysql_num_rows(query);来统计用户,代码如下。" I) A: Y  G* ~' U. r$ [' L
$user = mysql_num_rows($result);最后关闭数据库。* ?; W3 W: |& @, }6 c
mysql_close();显示在线的人数。% U$ X5 B: L2 O$ y% ]+ _
if($user == 1) {+ W' D0 [5 Y% q. Q' z# G
print("1 user online\n");) |- l- h0 \& o( O8 z
} else {9 T" y4 T& x/ v* S9 r3 M( j
print("$user users online\n");8 q, l/ K0 V+ |% n! }7 M
}最终把上面代码写成一个PHP文件如下。
8 h4 b' n1 K; [# y% o3 x4 v$ [/ _$ g<?php
, I3 h5 g( S, O, o//Put your basic server info here% `6 Z; v* ]" k* W$ a: R) j5 b  F
$server = "localhost"; //normally localhost
3 ~' }- Q) y: x3 J. W- S8 N# A$db_user = "root"; //your MySQL database username! V9 q0 d+ C7 x, B- l2 H
$db_pass = "password"; //your MySQL database password# T- }3 n  n) ?; Z% V5 X0 K
$database = "users";
7 p7 I% V0 L& U  T) u, ]3 e0 a: l2 {' q$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
% Z& T) C/ a# {. [. h// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last2 b. o% ]3 k: T- K
// $timeoutseconds seconds)* F/ X' @; ?( I! }, _0 a
//this is where PHP gets the time& h# D2 X, O1 k! u; w
$timestamp = time();  y- G4 _' \( x0 W0 W* D
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
6 _) J: u& e2 Q" l$ V. I$ A$timeout = $timestamp-$timeoutseconds;% i5 M  Y: v& a" p) L
//connect to database: Y' Q, L8 }7 \4 j7 M
mysql_connect($server, $db_user);
4 A8 y% w/ K: D/ E' C( L//add the timestamp from the user to the online list
$ a# m. O9 s9 T5 J$ `' u$ t$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
1 W, P0 M# D8 `  W4 m('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
! U" S9 k$ n$ M' ?if(!($insert)) {$ _2 W1 r8 |) Z6 S, j3 L6 v; R6 c
print "Useronline Insert Failed > ";* l, D3 ?* r" \
}
$ p& f4 ?, B( L, v//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
% e6 e; Q3 y% [7 }; x$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
1 z) C; j* [9 e8 pif(!($delete)) {3 Z; F; p$ C; l. L1 d5 E. ?
print "Useronline Delete Failed > ";2 u8 Y# R" e; `  }( y6 [! Q
}
4 D' ~  _4 V$ H4 M- u; j! N/ B7 j$ S5 T//select the amount of people online, all uniques, which are online on THIS page' n. M5 Q9 A: A% U5 A5 N
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");! ~1 ^* p$ p. n2 _" Z% o
if(!($result)) {
& p& q5 ], T' M6 gprint "Useronline Select Error > ";
  G/ G) s# c1 S, R7 A" _3 E}
3 Q% q& r4 l% a2 x7 e//Count the number of rows = the number of people online, S* {' Q: L& }2 M7 s' N; z: @
$user = mysql_num_rows($result);5 D, C- T9 f. ?7 w5 {
//spit out the results
( V" n! B! `. [$ D$ vmysql_close();
/ R# I8 f' d6 c* uif($user == 1) {
1 e* Q. N9 A1 Z9 E# J* t7 }. iprint("1 user online\n");
% {+ Y" F. ~1 T, e, `9 ~+ o' ^} else {
4 ?1 G0 w& H; v4 b* cprint("$user users online\n");
+ [- y9 ]* T$ f7 q2 O$ |}& ?+ p$ _9 C  m
?>
) t2 O) V  U  H8 Z# z
" s% c: p8 T. X) n* p$ _以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
; A# Q9 J' X$ l6 f时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
$ M" X7 e( X- c: E! |/ W! i/ S9 r我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
( t. F6 n! T$ i9 K/ o7 y当然啦,这两款主机也是相当不错的。7 S" x- Y6 q- @7 X+ f
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
# ]1 v' {2 v) d, \' i/ G标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年2 w8 U/ N7 D4 n' v7 M4 {
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
1 D6 L9 g- O7 _8 x) G  W4 p4 j空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55" z9 O6 G/ s, b9 Y2 `! A) I
自己加QQ去问吧。

返回列表
【捌玖网络】已经运行: