返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!" j" R2 z' G$ t/ q! k; M) \
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。+ B( t9 L7 @# y8 L4 B8 ^* s  a
首先我创建MYSQL数据库表。; V5 K$ N( I3 f
CREATE TABLE tablename (! z' K7 `: F9 y: |+ S# N+ C" {
field type(max_length) DEFAULT 'default_value' (NOT) NULL
- Y( N+ G! ^/ \8 z! _& x$ Z}可以使用的SQL语句。
( D2 h/ W& w7 d2 q) U; X) zCREATE TABLE useronline (/ G' n, K5 H8 O( L, U! Z) q
timestamp int(15) DEFAULT '0' NOT NULL,
! Q) S5 ?: L/ e0 `9 S. ~( q) Wip varchar(40) NOT NULL,, |9 x6 K1 G; X/ ~3 |
file varchar(100) NOT NULL,4 o& E* Q8 A$ c) i( v2 ~: ]
PRIMARY KEY (timestamp),3 o% F$ ~* {3 H( V' _
KEY ip (ip),3 a. b0 P1 X0 J. z  W
KEY file (file)) z+ F  X7 E5 A  L: ~' o6 _5 d
);下面我们是PHP脚本,首先我定义MYSQL的信息。, g# X/ N  m. u2 [
$server = "localhost"; //你的服务器
" ~! V! o" E- k6 D$db_user = "root"; //你的mysql的用户名( c3 N/ B6 b, h1 e
$db_pass = "password"; //你的mysql的密码6 x* z$ e% l3 R; z3 l' y. ]) R
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)) X  r1 D( K  k! I* D. v
$timeoutseconds = 300;取当前时间。
8 y6 Z7 P0 b; P$timestamp = time();上面的完整代码:
1 t( Z1 ~; p3 F3 }3 [! f<?php
' W- x. Z8 l! o" }0 b9 d6 W# b$server = "localhost"; //your server' {# X- e" y, B- |" i9 W2 ^# F
$db_user = "root"; //your mysql database username& K0 [7 m. R7 K. p, `: U' z* |3 Q5 F
$db_pass = "password"; //your mysql database password if any
) }, A, |- i3 _4 R5 D6 ?3 b$database = "users"; //the db name5 Z# U: U, b! O
$timeoutseconds = 300;//timeoutseconds limit
3 o) e& R! S* ^) V0 g& E& _//get the current time2 X4 U; r  G0 t8 Q9 q
$timestamp = time();* P* m5 A) R6 K, K- z+ T/ w- J
//calculate the lowest timestamp allowed/ f& t; \7 X) q- z" O2 B2 h5 d& E: l, ^0 L
$timeout = $timestamp-$timeoutseconds;
  z' r. H0 X. J8 Q/ e?>连接mysql* B/ k" B/ G- M6 h$ {6 h
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
7 Y+ _1 X) z- W2 Y6 P7 mmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接) Q& Z9 @  l! e) S, }5 K2 v0 B5 O
mysql_connect($server, $db_user);查询数据库的代码:
+ w" M' H: `- y" [. tmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。4 i( o6 t! a3 h( ], J
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES1 i; m4 L" I& Y" {# ?& V7 Q
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
; J* n% v6 r. z- r( j3 G如果用户用错误信息的话,这样处理。
* B% v5 a. K: ?" p. kif(!($insert)) {# r- p# a1 E, |9 z  D
print "Useronline Insert Failed > ";
, f' v" B) r" s4 [" M}然后实现当超过设置的时间就删除该用户记录。
! ^* ~: |# i- r, A) Q$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
6 M- Y5 p' S% O: R/ _% W; zif(!($delete)) {
8 z* g$ P: n; _! yprint "Useronline Delete Failed > ";7 b& G! L" e: B1 k
}下面我们解决数据库中不同IP的问题
6 A. m; ?7 [& ?5 A9 M- `0 D* G$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
3 L$ l" i: p* f& T0 T, X$ rmysql_num_rows(query);来统计用户,代码如下。
  g* c  ]6 ?; H' `: j6 k5 `; u1 `$user = mysql_num_rows($result);最后关闭数据库。
# j7 A2 ?/ O& S) G4 L. m( nmysql_close();显示在线的人数。
- x2 B8 R0 C2 j' O/ U$ Lif($user == 1) {' ~+ A7 S) |6 \* X) f
print("1 user online\n");2 ~: V8 G8 k! D. h4 @
} else {
% k& A% h4 {4 }: c3 a5 V* V9 jprint("$user users online\n");! e& a! m& }0 }% e6 R) k
}最终把上面代码写成一个PHP文件如下。
% q7 j8 @6 f. S/ n4 E# V2 i! S3 A<?php
5 [3 C& X5 F- o' \7 j# a% _//Put your basic server info here2 ]4 i/ L5 f% r& T$ g
$server = "localhost"; //normally localhost
8 C$ Z4 A# r! H8 x# {+ n$db_user = "root"; //your MySQL database username- G& Q. O2 g- n4 f! A7 H# k& z0 d
$db_pass = "password"; //your MySQL database password. D# L1 y# c9 I1 w# \& M
$database = "users";; Z  J* l: P2 |/ }
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
2 V5 @1 p+ ^- S, v7 M" S* N6 Y// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last+ \2 A4 G. d( y9 H( ]2 I
// $timeoutseconds seconds)
) R  N4 @+ Z8 e//this is where PHP gets the time
0 V8 d6 b1 M& Q$timestamp = time();" D4 B" C5 ]! P
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
. b& w9 ~& Y0 H6 W$timeout = $timestamp-$timeoutseconds;( @4 H  C& m- W( ?. Q2 I
//connect to database
; S/ L; P0 [4 A3 C7 _2 [mysql_connect($server, $db_user);
; d1 ~/ y) \8 t9 b' E* C1 S, a/ W( @+ U//add the timestamp from the user to the online list
8 O# x6 ]2 B$ A, c' a1 F6 N% D$insert = mysql_db_query($database, "INSERT INTO useronline VALUES9 R/ z, {/ h! [7 E' R& M
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
" K: H6 I  ~2 O, Vif(!($insert)) {  B2 }3 ]0 M7 W. Y; h, m
print "Useronline Insert Failed > ";4 n' s8 |  e) K" e7 n  I
}2 u+ u' b4 K# R- l
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
; c4 `8 m7 l2 w6 q  e1 W$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");5 v8 @5 s# D4 P, I
if(!($delete)) {% B: T) y. W$ Z. {% M9 u5 ?4 e9 ?
print "Useronline Delete Failed > ";9 W; F/ v9 [8 M8 {0 @
}
4 r3 _, D) H! C7 R! O//select the amount of people online, all uniques, which are online on THIS page
" R& r' {7 I! v: {! Q% [$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
8 w. k+ W3 y) D3 w# c2 |if(!($result)) {
" B7 N$ }+ K. Xprint "Useronline Select Error > ";/ E1 T7 c  ^5 B1 b
}3 F$ W& o9 w1 D; U' B
//Count the number of rows = the number of people online( Q  e2 E# X' G1 X4 C
$user = mysql_num_rows($result);  h1 C$ _) I& u" }6 }
//spit out the results
6 i8 ^* T$ Z% e9 P/ v$ i  dmysql_close();5 J8 J& B! H) Z& N: n8 u6 G
if($user == 1) {( u1 ?# [& f& A8 `1 P
print("1 user online\n");
! ]; e( v; i& Q3 w3 a  |% ~} else {" _' a4 l. \4 `, G# q- Z/ W
print("$user users online\n");. l9 T- k9 |6 b* z) P3 X
}
$ ], i) p2 K1 {" g" t?>
, R8 U0 w& X3 U( N' `3 u8 L  ?1 F: y, h) P: s+ l* s6 H
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
4 V) l0 j6 \# J时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
% g# E! j8 ^7 s% Y8 A7 x: e( ~3 r我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。6 S: F# N, W/ w; O( w* `
当然啦,这两款主机也是相当不错的。+ h) Y# K! s" N1 S+ M
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
( o: F+ `  Z- P标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
- S% A7 N; l% j7 b' u提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ # ?4 G  h+ ^6 H3 `- I
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
4 |2 j8 f0 n# t" K7 y自己加QQ去问吧。

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