返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!& I3 o( K. S8 k  h* w) U  F
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。0 n- O0 h8 G; W) P- o  i" I
首先我创建MYSQL数据库表。
0 Z, r' u9 X. O2 |# ~+ oCREATE TABLE tablename (9 U! Q: I+ J/ L
field type(max_length) DEFAULT 'default_value' (NOT) NULL
0 j$ H! y  H; a6 q& g}可以使用的SQL语句。
$ A4 f- v' t6 S8 D$ N' Y0 DCREATE TABLE useronline (
4 N4 b8 e' O( Wtimestamp int(15) DEFAULT '0' NOT NULL,4 \2 f4 _* @9 y$ m2 d/ x8 p
ip varchar(40) NOT NULL,% W( c7 c$ B0 F0 h
file varchar(100) NOT NULL,
; J( Z. x" L" x( d$ {; }PRIMARY KEY (timestamp),
7 p, b' x' V/ F8 vKEY ip (ip),
7 O3 Y5 E# @, e, {! h- iKEY file (file)
* {% }$ Z8 y% e8 L6 r* d);下面我们是PHP脚本,首先我定义MYSQL的信息。1 n3 Q1 a$ ?9 o( O! f
$server = "localhost"; //你的服务器" r7 s6 @8 P) [! i2 x1 I
$db_user = "root"; //你的mysql的用户名" v3 O: R% G* R+ a% N" s% w
$db_pass = "password"; //你的mysql的密码
) i. ]; |  L& \; ]; X" f9 W/ S( U( P, H$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)' ~( d  ~7 t1 V" l2 K
$timeoutseconds = 300;取当前时间。
! f1 h/ P: V' f2 s! c$timestamp = time();上面的完整代码:
  ~# V! ?# o+ f& Z* M1 n* M; a<?php
- E! A8 J2 w7 X, v$server = "localhost"; //your server
! r$ j: m4 t8 m9 x$db_user = "root"; //your mysql database username) h5 K( B7 y' {( g& ^
$db_pass = "password"; //your mysql database password if any  P2 ?) L: S2 G5 I$ U
$database = "users"; //the db name1 \. Z  k- |1 M* P1 ~7 ?/ ^9 M8 d
$timeoutseconds = 300;//timeoutseconds limit" T) k( I6 [( S/ n( T+ |1 g
//get the current time
4 C7 \: ]$ F1 i- ^6 h! o, M' J$timestamp = time();% f9 Z, ]: {9 q8 Q( f
//calculate the lowest timestamp allowed! W4 j7 l, G) s+ f# a: ^
$timeout = $timestamp-$timeoutseconds;2 P2 C) D% C" B( W9 X& M* T
?>连接mysql
4 S9 a, l8 R5 I& R5 \( Lmysql_connect('localhost', 'username', 'password');也允许使用变量形式。# I( D5 \" W) p. W% Q1 t5 m6 Q
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
; [& @0 K, n1 h0 H* [+ o* Z- Wmysql_connect($server, $db_user);查询数据库的代码:
/ W% s7 d+ p# N  j" C- M* W' umysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
: t5 n  C% o. X6 {1 Y' d  ]$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
: [& A& Y* A8 r* p4 O% Y('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
& }4 }: u4 W% R; G) Q- _# j, f4 Q6 S如果用户用错误信息的话,这样处理。3 d9 t+ M1 f* }4 x) O( K* W2 B
if(!($insert)) {/ ?/ a0 A- c$ s
print "Useronline Insert Failed > ";
8 d4 Y; n# A' T0 v}然后实现当超过设置的时间就删除该用户记录。
+ S( E% j$ ^; F3 |2 b) w: Q$ [$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。6 a( E8 v( J6 U: {6 A# \
if(!($delete)) {
  Z1 f# a$ B( X+ S! H+ ?, s$ s/ i. \print "Useronline Delete Failed > ";
7 W/ }: m9 l( d; v8 y}下面我们解决数据库中不同IP的问题. J7 [4 x/ u. u9 i) y
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
. M  B0 R6 T) W  j1 dmysql_num_rows(query);来统计用户,代码如下。
) u% m3 O6 a( L- Z- f4 L$user = mysql_num_rows($result);最后关闭数据库。
, E! O) E2 H+ o& e3 D: Tmysql_close();显示在线的人数。
8 Q- B8 A8 S- t) g+ Z8 Tif($user == 1) {1 \  K2 A( b3 R6 G1 T* z' @
print("1 user online\n");- \$ p: I' U4 |
} else {
& Y1 e1 ^" a4 e' i7 {* d, jprint("$user users online\n");
: J* H  ^2 |& ^}最终把上面代码写成一个PHP文件如下。
: ^2 D$ ?% ?/ K4 L) [& d# Y<?php
$ D& @  L) d  J: M//Put your basic server info here" U4 I8 X1 ?/ }  N8 ^9 b+ P
$server = "localhost"; //normally localhost. p! s. D9 o' ~
$db_user = "root"; //your MySQL database username
" p6 B# B- k0 A* a$db_pass = "password"; //your MySQL database password  [* T% z- ?9 q
$database = "users";- a& I3 r' T* T" L9 d- J& K+ w0 Y
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are  K0 D, \' t+ K; O* m: e6 Z  u! d; I
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last* |. r& b# U$ Z! u
// $timeoutseconds seconds)) h, c  m. O+ q6 V- M
//this is where PHP gets the time8 P( ^) m9 j8 a) S
$timestamp = time();- w) K4 w$ H( c' J: @0 g4 M: A
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed4 Z. [0 {, ]7 k7 q7 P  g
$timeout = $timestamp-$timeoutseconds;
7 O! Q# c2 r  q( U//connect to database6 Q7 {9 o; W0 h$ i# p& A
mysql_connect($server, $db_user);
" v! ]( Z! G( Q* l0 y7 q//add the timestamp from the user to the online list& z* g' P* p! X, {8 l+ w- @
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
5 p* q3 K8 T7 ~2 z2 y" i('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");! n# T+ D/ Z* N* O: ]; K
if(!($insert)) {5 m7 F0 `7 _$ y+ {, A# T) g3 y& v
print "Useronline Insert Failed > ";: I# P4 s/ @" ^
}
, Y8 @; E9 Y# P- Q7 V0 d( @3 t//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.. W4 }3 n0 J; |
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");/ d' s! C( i* \; B% A+ t" ~
if(!($delete)) {
; ?, q9 l, ?# t* l$ n; Y. {3 xprint "Useronline Delete Failed > ";
6 o, f/ ^# \" p}3 |8 c7 [7 }( f+ @4 b/ Q3 e
//select the amount of people online, all uniques, which are online on THIS page' ?) i6 N9 f" {# `/ D% B
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");2 b, T" t' m, g( m3 U+ O
if(!($result)) {
, P+ D# w6 `* u' S; p+ z6 o7 r. Zprint "Useronline Select Error > ";, U4 p6 N; y. L
}
; O$ `* i1 |6 W* k//Count the number of rows = the number of people online
+ p( u' i; p% h/ M9 R5 @6 M$user = mysql_num_rows($result);, u# W) z- G, |, O7 D8 Z3 X
//spit out the results
7 `$ t9 I1 S$ Q8 Q; \: j; Y4 dmysql_close();
3 A# |9 ^" Q1 l9 H+ z$ bif($user == 1) {9 L8 ]9 ^4 A$ D& k
print("1 user online\n");; R, Q: i- m$ @% O
} else {
& O+ ~5 v+ m5 |+ Bprint("$user users online\n");
3 e; ]- ^5 Q5 F0 B+ e; O8 U}: V5 J& n& W2 n* V. t5 D
?>( a: t3 T4 B; X+ u
% S1 Y% R1 x0 r+ ^" g; T
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
8 Q  t3 ^& i5 w" L时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
! @/ Y5 o5 B1 r: q  k7 Q我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。3 A; }; N/ J3 d' R, K
当然啦,这两款主机也是相当不错的。
8 H4 s! l( M) l, K1 g智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年9 `3 j; P, `! {& {
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年1 r) S& a" A8 D/ V
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
. L. C  g# {4 h4 p5 a% @& Q- I" v/ r空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=554 I1 x9 H5 U. u" S( Q2 u9 w2 Q; i
自己加QQ去问吧。

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