获得本站免费赞助空间请点这里
返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!0 C/ v/ ?' |! S# M$ N7 g7 q
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。! n4 K* g4 W- Q! z! p  h
首先我创建MYSQL数据库表。
8 B1 Y$ t+ \0 E* u) ]* YCREATE TABLE tablename (2 B. v5 X1 C4 i
field type(max_length) DEFAULT 'default_value' (NOT) NULL
8 W0 M: X# }- }0 a' s}可以使用的SQL语句。$ W+ O+ c, j+ a8 w4 N: h! r
CREATE TABLE useronline (# e& m7 p6 n  N+ m3 G& }
timestamp int(15) DEFAULT '0' NOT NULL,* }- i1 s6 u; @/ [0 c8 A) [
ip varchar(40) NOT NULL,6 P% E/ q7 o8 `* t7 z& i
file varchar(100) NOT NULL,
2 `5 C/ s4 E7 Q$ M3 u/ s4 }  bPRIMARY KEY (timestamp),
! ?4 _: [, B& y5 ?" E% AKEY ip (ip),
% o3 |  n5 A* C0 b& ~% b; kKEY file (file)
3 v; P' u8 J( n0 D. }3 |5 H);下面我们是PHP脚本,首先我定义MYSQL的信息。
; G8 F9 J' Z6 S3 @; A$server = "localhost"; //你的服务器
- k9 C. i" S3 g; T+ O$db_user = "root"; //你的mysql的用户名
6 v$ X& i# I7 m1 l6 v1 G6 X1 |$db_pass = "password"; //你的mysql的密码
2 a) W0 a0 a( z7 G$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)! n2 K" z; r4 w. q
$timeoutseconds = 300;取当前时间。
; P! T0 p4 _+ ?2 l: y! A: H& c3 B$timestamp = time();上面的完整代码:
7 ~7 F8 s- }# P0 t& u<?php
& G3 L- [3 B; a- I$server = "localhost"; //your server3 b2 D' A. \2 m
$db_user = "root"; //your mysql database username/ r4 y8 l, D# a% P" I& |/ c' M  p5 V1 Y% C
$db_pass = "password"; //your mysql database password if any
( Z, ?) Z' ]  g4 {$database = "users"; //the db name
# J% P) ^# d& o! V  [) R: C$timeoutseconds = 300;//timeoutseconds limit
1 Y2 I' D' m( L//get the current time& {4 Q& E& b4 v' X1 @8 w  ~2 H) C3 O
$timestamp = time();9 x7 S: J4 H3 X: X
//calculate the lowest timestamp allowed
2 r- X# }1 s0 o$timeout = $timestamp-$timeoutseconds;7 t# W/ c5 J1 s7 Y7 S
?>连接mysql
  _. C: G* w- J1 K. U2 _7 smysql_connect('localhost', 'username', 'password');也允许使用变量形式。
' w' T# c' Y$ ^( L+ p7 k& h# lmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接6 `8 p8 H0 N+ ~) W! Z/ F
mysql_connect($server, $db_user);查询数据库的代码:
4 }9 V; o- W) w# hmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。9 w) U1 O) p& z; J& W; G2 x
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES  {# h; @, v, S$ @% B
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");% x2 N' z% [3 L4 I  V
如果用户用错误信息的话,这样处理。
8 `" X( f9 W8 K2 O, f6 K4 W- t' e2 t+ xif(!($insert)) {. d9 X5 M6 n% n; w3 s' f/ E. B
print "Useronline Insert Failed > ";
( P& i1 p  f$ y}然后实现当超过设置的时间就删除该用户记录。+ q7 L9 A7 n0 T+ g
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
# i- T! Z, F1 {) mif(!($delete)) {
: W6 H" s9 G' `9 ?$ q) tprint "Useronline Delete Failed > ";$ N& u- T$ y9 t3 N2 A
}下面我们解决数据库中不同IP的问题0 `! m3 R4 o6 G
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
+ ?9 a0 s- J/ E. V8 \9 A8 ^mysql_num_rows(query);来统计用户,代码如下。
  w/ W' j- N7 F! P; a$user = mysql_num_rows($result);最后关闭数据库。
! V7 O. ]0 y# K8 w! hmysql_close();显示在线的人数。, G1 H5 L, b% A" O( v5 P# I
if($user == 1) {
. q5 `2 z# v  P; m2 K) c' Kprint("1 user online\n");
# i" Q4 c8 Z" O} else {
! e2 x3 b  W5 e6 ?2 R( ~( O# u7 R: }/ zprint("$user users online\n");# y6 l8 F; h- O' Y1 R
}最终把上面代码写成一个PHP文件如下。9 l+ T+ O" q' X: p
<?php9 s8 w: q" w0 T" ~
//Put your basic server info here! \0 z2 U8 g" Q3 M0 {. R
$server = "localhost"; //normally localhost
9 p# P! P% }7 }6 x4 g, ]/ s* g' `$db_user = "root"; //your MySQL database username0 o$ e* A7 ]+ E0 x3 S, |
$db_pass = "password"; //your MySQL database password, K% D* [, J1 t! U$ q! `
$database = "users";! D7 w# d  R# Z- n
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are' N; Q  Q3 b5 O& G* X
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last: O6 b; W; `, ]8 D& |8 u
// $timeoutseconds seconds)5 G: V6 H( w" ]8 e4 s3 o
//this is where PHP gets the time  n: m* H! A7 M$ M& ]
$timestamp = time();4 ^6 _. X3 k) H# q
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
4 M4 }. g2 S6 H4 [" P' y# m$timeout = $timestamp-$timeoutseconds;
/ H# c6 c0 u  H//connect to database: K& d) S! ?1 A" {1 p6 m$ k) o4 _  p
mysql_connect($server, $db_user);
" v8 J( ~8 B  g" y: L//add the timestamp from the user to the online list
# F+ i3 V1 g0 H$insert = mysql_db_query($database, "INSERT INTO useronline VALUES4 z: y, u/ }) |( q5 |3 S
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
6 O8 u7 j) \% X/ l& z4 s5 rif(!($insert)) {& {3 s/ L: b3 }" K7 J* W
print "Useronline Insert Failed > ";
4 W3 T0 j% j; n% _( \}! n& q; M8 Z1 y- `, B# }8 c& e
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.5 H3 [: \  U  B4 W3 ^5 M2 i2 j7 X, X
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
$ W# ]# i& A! \" W3 Jif(!($delete)) {
* `+ T3 _' @( @print "Useronline Delete Failed > ";
; ~' P2 u! b/ g4 l1 b/ N}& W* V' d% R6 @5 r; f
//select the amount of people online, all uniques, which are online on THIS page
, @! V, B( \1 s0 ~3 q$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");' A4 [3 F- i: L: }" @* s
if(!($result)) {
6 `% u/ M1 ]- X+ |0 [; D7 Zprint "Useronline Select Error > ";
2 _' l- A6 ]2 f8 G, x. C}4 Y9 C, ?  w) W4 z7 r
//Count the number of rows = the number of people online  k; I) }/ K: p/ L2 `
$user = mysql_num_rows($result);5 o4 Y$ i" Q1 e$ }0 T3 G5 z
//spit out the results( l# K; n" C4 Y4 ~, z* O
mysql_close();- {# L9 {6 J1 ^% P* k
if($user == 1) {/ B) D: x/ S! Z; G
print("1 user online\n");
" v$ x# R& K5 G} else {
! x! h8 s6 q% W; _1 @. r9 @7 J4 rprint("$user users online\n");1 L7 U9 d& H" K- G/ S0 r1 J' V
}4 A* E+ r" W+ N% b2 T1 c; g* H- N- m
?>
) B& Y& G9 t9 c6 `& p3 I2 L: Z% w% e$ [5 v7 x9 b6 ?7 @2 t5 W+ E
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
) W0 ]" x7 Z8 q/ ^% ?* R; Z! Q时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
/ ~. ]! w, q5 ~# z7 z8 N6 u3 N7 ^+ d$ O" M我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
' F) p# @4 U0 `, [8 X! f5 o当然啦,这两款主机也是相当不错的。
; J% ~* \0 H' F2 k# _智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
2 \+ \8 O, b2 d. q6 `标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年5 X( d$ ^0 [: b' N
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ + |( K  B2 R! W6 C, V& s( ~4 T: ]  z
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
# ~, a- |! g6 Y7 T5 J5 _9 F自己加QQ去问吧。

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