返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
5 |" v9 O3 }' a0 L  [. k我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
2 O6 ~2 \! c4 i* L: u* _首先我创建MYSQL数据库表。
+ t$ \  f* [2 x  o. m' SCREATE TABLE tablename (3 Q5 w* D! ]/ b  G& _* m% [
field type(max_length) DEFAULT 'default_value' (NOT) NULL
' y$ |. {) B2 m' R}可以使用的SQL语句。6 w+ i( \7 X# O0 O7 @8 E) Q
CREATE TABLE useronline (
% T8 N4 G+ n! `! F7 etimestamp int(15) DEFAULT '0' NOT NULL,
! u7 G1 W9 u' _# X$ a9 aip varchar(40) NOT NULL,
1 p  }, b5 I+ y! `: z7 ~( Zfile varchar(100) NOT NULL,5 u& T( i, n' m9 P! N4 I. A
PRIMARY KEY (timestamp),
+ c* g! H( X5 R& z7 IKEY ip (ip),
: @/ r0 k/ J' z0 Y1 @KEY file (file)" n0 n, `, L& r6 z9 i
);下面我们是PHP脚本,首先我定义MYSQL的信息。
( N+ P7 E3 t- h$ M; ~* r6 [$server = "localhost"; //你的服务器
( H3 J; b- X6 f0 X0 i  w" R& `$db_user = "root"; //你的mysql的用户名; J& b0 X$ p# p
$db_pass = "password"; //你的mysql的密码
* T: s* U  B; `$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
; |% A: q7 K. E. g8 @/ L$timeoutseconds = 300;取当前时间。4 `; Z4 K  Z8 H' G, d6 p
$timestamp = time();上面的完整代码:
2 P5 L) \: C7 i% D# a% s1 w<?php
: O2 m* A! Y: D1 y4 C! v$server = "localhost"; //your server
: e) P& f9 \" \- H' A$db_user = "root"; //your mysql database username8 }! w- W4 P" A. Y) q/ {
$db_pass = "password"; //your mysql database password if any9 c6 G4 d: X" q* @
$database = "users"; //the db name
; K4 h, D5 O+ k0 R& b( L" |' N$timeoutseconds = 300;//timeoutseconds limit! ?2 H. r2 Z: u; `& Y: ~$ w
//get the current time0 h9 {3 V/ j; ?8 x' {
$timestamp = time();
  d4 e1 B" W% w- N* D- [! o//calculate the lowest timestamp allowed
+ L. Z. r7 ^' s/ a6 l# P9 Q; ]0 z: R$timeout = $timestamp-$timeoutseconds;
( I  m$ t$ r0 P, |6 E- |?>连接mysql
1 `- m% l2 A* G/ q" smysql_connect('localhost', 'username', 'password');也允许使用变量形式。: i/ Y+ }# t' P' n& c2 _
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
7 [% ]* h/ Z# M9 r' f7 r  fmysql_connect($server, $db_user);查询数据库的代码:6 F8 H4 j: o0 \; g. s
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
/ e+ _; G6 {3 H& R% [- P0 @$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
! s! ?! S) Z' }('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
/ M0 G/ w* F! G如果用户用错误信息的话,这样处理。  I: m  o1 P8 m+ n& ~, ~9 j
if(!($insert)) {
8 U7 F2 A0 N' q4 L4 K8 kprint "Useronline Insert Failed > ";
, A8 Q, M, N& V2 ?; d+ Q0 D# `}然后实现当超过设置的时间就删除该用户记录。
8 T! j+ c" p1 P) F( w$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。: I: T0 m! j# j+ h+ S, h' R
if(!($delete)) {; r$ ?4 B. p' E3 p; H2 K) C4 B
print "Useronline Delete Failed > ";
; a( `: q4 i9 J6 u: n( f}下面我们解决数据库中不同IP的问题; _2 J0 o2 W& N& I7 u5 C8 A
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用3 B* I' O* R: f; ]1 d1 q% P
mysql_num_rows(query);来统计用户,代码如下。0 C8 j3 G& p2 v8 ~( c# V. ^/ h
$user = mysql_num_rows($result);最后关闭数据库。
5 k; ^; `, \( D4 fmysql_close();显示在线的人数。4 w- [9 c" h9 w" N
if($user == 1) {$ B% k* s6 U  `8 ]" d
print("1 user online\n");2 H7 A% y) R* O  q
} else {1 f5 a7 i* u: z( }1 V; e; C
print("$user users online\n");5 s% A4 i$ A- Q9 k; b
}最终把上面代码写成一个PHP文件如下。
( a. _& r2 t0 I8 _# E+ h! \6 Y<?php& O* j! Z" i' \9 e  Q' j8 ^
//Put your basic server info here
3 a& H) M0 I% x! {$server = "localhost"; //normally localhost$ C! X  M8 u) W# A! o! X
$db_user = "root"; //your MySQL database username) f$ s: }% L: T$ c( f* M5 N2 d) A2 F4 ^
$db_pass = "password"; //your MySQL database password4 t( n& p& _9 X( V2 b
$database = "users";
5 r6 \4 j. R! I- }4 `& R$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are% Z' q9 K/ {  Y; M
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last1 V' a) g" x1 `' o: d
// $timeoutseconds seconds)
0 P6 M& I& X8 h# S* J7 w//this is where PHP gets the time+ [7 y& R. J% i9 J) w. w" C
$timestamp = time();
  K# q4 B6 M9 C- l1 {( h//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
$ Y7 V+ z3 n1 f/ y* I4 C$timeout = $timestamp-$timeoutseconds;
. o) s- K' Z5 t9 R0 ?3 d//connect to database
' w. e9 g8 v! r1 Mmysql_connect($server, $db_user);
, G# D# |7 [7 J! U$ x: q% J//add the timestamp from the user to the online list
7 E/ i& T. X$ W7 C, R& \. c- t! k$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
' h0 ]; V2 T  L4 L('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");& C+ t( B! U& M, s( C( v7 C
if(!($insert)) {& y0 v: [% o' N9 @2 L6 w; I, @
print "Useronline Insert Failed > ";
0 @8 ~% G$ B) l/ A2 N1 ^}
( Y! l6 O8 v  \! t/ p7 v//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
/ o  S7 r; r# A2 P$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");( {. |) Z6 {# U4 M
if(!($delete)) {
$ b' `- O8 W( o# q9 @* r4 _: f6 u- nprint "Useronline Delete Failed > ";" j/ d7 y- U8 v0 `9 X. ~2 }! H' \7 h) d
}! a- z+ N$ T8 q7 r5 E6 m4 v3 F
//select the amount of people online, all uniques, which are online on THIS page
" Q! ^: S/ m& E5 B$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");) d- J3 g# [/ g& S0 a3 U' A
if(!($result)) {# j9 }7 y, v; k
print "Useronline Select Error > ";
( n' c; Z7 ?8 F+ a# F}
9 ]1 t( v0 g. o; J8 Y  K, T4 c//Count the number of rows = the number of people online+ e2 V: ~+ e( l
$user = mysql_num_rows($result);" M8 R- Z5 X4 P9 K1 P
//spit out the results
: c. x9 p( ~2 x* J  {" ?mysql_close();; x! A6 W: q/ t5 w+ d2 x% f
if($user == 1) {& w; \' e* Z$ h7 c( F7 t2 U
print("1 user online\n");
) a+ _8 x0 y% t  m. h} else {2 M3 Z& ^, f/ R; x& _! R) v- ^
print("$user users online\n");
  M% w& u  H& q5 R& E}: o4 B% a0 l& q' ~& s
?>
0 p6 P& z8 E# Y/ t5 F3 k2 w' N1 o; p! k9 n" X2 d  x: n9 |# g
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。) {8 K& n& s; V+ [, ]! U: Y% J# t) d
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
' {6 D. B: N/ t" T  O( f9 l我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
$ j) a, y% b' C% m% [& \当然啦,这两款主机也是相当不错的。
, w+ p, f3 I9 h, h0 X1 i智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
9 B1 P6 R4 W% ?标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年' Z# ^' ?1 F. n" \5 D3 c
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
. N5 E- ]2 \9 n. c8 C* C5 Z9 M空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
$ r. l1 H* E, O3 o# e自己加QQ去问吧。

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