|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
2 `3 Q3 ^8 z+ b我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。" h5 N; C: @; W: w
首先我创建MYSQL数据库表。( q& ~( j3 d: v6 g6 {' l: k
CREATE TABLE tablename (
% Z2 v$ j0 s3 \5 b6 |/ Tfield type(max_length) DEFAULT 'default_value' (NOT) NULL
t' e( S( I, A& ]: t}可以使用的SQL语句。
- s0 v) ^) s) D. \; n+ j9 b" YCREATE TABLE useronline (: z3 M) l6 F9 \& N/ ]
timestamp int(15) DEFAULT '0' NOT NULL,
3 q$ y( S4 K& iip varchar(40) NOT NULL,) B$ i7 s- S. f; O
file varchar(100) NOT NULL,& G7 z* [7 u' ~$ L8 \; @
PRIMARY KEY (timestamp),0 A( H3 Y4 s- g6 ?
KEY ip (ip),
0 k' l5 w8 J. _. \# p1 sKEY file (file)
8 T, B3 ]$ [) p( R6 Y+ {+ v6 {2 X);下面我们是PHP脚本,首先我定义MYSQL的信息。
& q" ~7 X- n4 R" k7 [) n* f$server = "localhost"; //你的服务器
% B; R5 _2 }) L" T# Z$db_user = "root"; //你的mysql的用户名
3 h! V' z2 W2 i$db_pass = "password"; //你的mysql的密码
% r B: ~3 i8 q i) u: }* I2 A$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
% m: ` a$ _ S* D/ ?& n7 D$timeoutseconds = 300;取当前时间。+ M! ?5 M; R) q
$timestamp = time();上面的完整代码:
2 e% c7 @6 t& v3 K9 u! Z, m7 |<?php% ~! ^, Y% Q2 v
$server = "localhost"; //your server
7 L: E+ B" o1 M( k" E. t: w1 d$db_user = "root"; //your mysql database username
; |5 E! l0 {0 ~) N- i$db_pass = "password"; //your mysql database password if any A- x i+ s' B( i1 U0 l1 M
$database = "users"; //the db name
8 t1 ?+ m5 P1 v( v" H! e% z$timeoutseconds = 300;//timeoutseconds limit
/ x6 g8 R$ o* [+ J# m' j* c//get the current time7 V M8 s. w- n# f5 t7 Q! {/ X
$timestamp = time();
2 K9 ?: o( p, P2 m! V//calculate the lowest timestamp allowed9 k9 @2 L9 g6 K* m' ~
$timeout = $timestamp-$timeoutseconds;
& `3 w, K, F8 I6 z( M$ q?>连接mysql
0 Z/ K4 I9 |+ J( Y% \1 k' P. kmysql_connect('localhost', 'username', 'password');也允许使用变量形式。# }" ^$ A9 S/ X/ h# z. ]) r. p6 {. G
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接& p5 v7 P5 z& K/ n2 Z8 Z9 x
mysql_connect($server, $db_user);查询数据库的代码:7 p7 e9 o4 n6 l3 q; B4 y4 e
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。% t, |. L/ t2 G) A h
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
. ^5 c! W' X1 ~2 N( g+ g3 v: s('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");/ L, r& _' F# v+ `& P3 P" F8 n& K) G
如果用户用错误信息的话,这样处理。% o5 W" f a& D C
if(!($insert)) {
; Y& ~0 o# `# ?2 w/ X3 Aprint "Useronline Insert Failed > ";& P6 Y# ?8 L- c/ z# q# [! J
}然后实现当超过设置的时间就删除该用户记录。: ?' i' `& G N* a/ s
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。& n/ H# k: z8 P+ S
if(!($delete)) {
; e0 k- O) o% ^% [ m# t: W+ }) F: qprint "Useronline Delete Failed > ";
4 @. W* H' U& U7 D; o}下面我们解决数据库中不同IP的问题
9 s0 R T- a8 m2 k, D' R h. _$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用. h& Y& k/ t1 W8 ?- i$ Q0 ~
mysql_num_rows(query);来统计用户,代码如下。
+ M6 M0 q! {* a5 Q, y7 d5 N# r9 T! Z$user = mysql_num_rows($result);最后关闭数据库。
% x8 m5 z! m2 U( D) tmysql_close();显示在线的人数。( ]2 o# s% \- ^* c8 J- Q4 h
if($user == 1) {
+ F- _# Q& L$ i& o' k d9 e( Eprint("1 user online\n");
- o% Y8 @% {' C' e" K} else {
& x- G. m1 a0 w. L" C+ _( N& Jprint("$user users online\n");
7 T. n, w2 x; I7 b- ?- l1 R+ i- ?. b}最终把上面代码写成一个PHP文件如下。
/ j ]6 @( e1 J<?php
& [8 s3 Q# F% f2 \! X# M//Put your basic server info here
- w) E* c" B4 s4 B$server = "localhost"; //normally localhost
( j8 |$ z; ~" U( ^; B$db_user = "root"; //your MySQL database username
4 _$ i% q/ B: d* r7 L$db_pass = "password"; //your MySQL database password" `3 s3 g7 ~! V3 j w
$database = "users";: `) n0 ]( z7 \8 Q2 \
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are; m# q* `% c/ j3 D* i5 v |2 }, S/ j
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last% H7 C- u! L$ P# ?7 f7 a6 o) V
// $timeoutseconds seconds)( }/ F- D/ y: d
//this is where PHP gets the time) Y$ g' c. e8 \
$timestamp = time();
' Q9 T ~, Q9 q5 k; }. t' D//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed" L. B- h' l7 H" [1 Y _, X2 o, T! C- C
$timeout = $timestamp-$timeoutseconds;: Y+ N+ }7 z- \$ ?! L' x6 I, x j
//connect to database
, {+ V& D$ f6 P, L. d+ J! K8 Y: }mysql_connect($server, $db_user);
) B% W! J9 R5 g//add the timestamp from the user to the online list8 S* I5 X: w3 {8 @% E( g
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES; Z9 g( ~/ J9 `. V: Y
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");! R( A) ]1 W+ M) y0 I
if(!($insert)) {
, u- D0 T- y% Eprint "Useronline Insert Failed > ";4 t: m9 K( a& m* T2 p9 k
}) M# X1 }' q: W" j9 |
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
$ W- ]& i s( o. x$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");' ?. E- x: I7 }# O$ g: K
if(!($delete)) {
# O2 C S% Q5 o. V* Cprint "Useronline Delete Failed > ";
4 ?. b. t5 _% y6 \}
6 ]' M: b( w- q2 S//select the amount of people online, all uniques, which are online on THIS page
`$ f+ l+ Z4 P6 R& b$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");5 D" P9 |; x! S; e$ t+ @( A
if(!($result)) {
! O, n+ ^0 _* V5 [4 O# Zprint "Useronline Select Error > ";* v. O; n8 f! T7 w5 {
}
x& k Q' b$ N6 Z% G) z/ D//Count the number of rows = the number of people online( P# ^- C( Y \: B* t/ d, x) w
$user = mysql_num_rows($result);5 ~ f7 f4 Q4 G% Y5 `: v
//spit out the results* o1 D) b! I* e$ T
mysql_close();7 q: z% o2 A9 h5 I/ L R$ U
if($user == 1) {: w3 C Z/ A; e/ I' V4 X- F
print("1 user online\n");
% J5 X0 ^3 R& D8 w# ^: j} else {8 D H2 X! Q% f! q" Z: U1 E; U/ c
print("$user users online\n");7 E! k8 Z8 H4 z0 n- V- v
}: u: W. h" e3 v. S
?>
' l9 ^: w# |4 B9 q' B u J! E) `, V+ c/ e
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
' @ ^- e! a& S# X2 a) ^# \ q. w2 T时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。" r: @' |) h l5 ^* o
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。( g, v) ]- E2 [4 e5 a6 g4 Z3 O) W
当然啦,这两款主机也是相当不错的。$ y3 h, G8 Q8 O; y
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
( N) e3 w9 Q* w v; U标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年: p" Q$ `2 C3 q8 Q8 _
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
/ T, E" y1 T3 H! e空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
, k7 k, `. j* t' A. s自己加QQ去问吧。 |
|