返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!4 D; u! T3 _" }" S
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。7 m2 \" X! H8 q* ^; G
首先我创建MYSQL数据库表。3 G9 t* P3 s7 C( ?& ]' a
CREATE TABLE tablename (
$ M5 Z  d6 m# i# Gfield type(max_length) DEFAULT 'default_value' (NOT) NULL
! F+ }! W4 ~, P}可以使用的SQL语句。
8 ^  ^- r( m' Z3 f, a$ \0 J1 |CREATE TABLE useronline (4 ~( I1 X/ b; F7 _
timestamp int(15) DEFAULT '0' NOT NULL,
) i' N+ z$ B" m- vip varchar(40) NOT NULL,
, B' A1 j2 \& ], I# F2 n3 _: Gfile varchar(100) NOT NULL,
, N) J% B9 @! q/ Z' o/ p* Q5 QPRIMARY KEY (timestamp),
3 t4 |2 L1 B% w5 _KEY ip (ip),, x8 F# ]+ C  _2 i' j5 b1 P3 E
KEY file (file)3 b7 Q( Z# c' ?1 ^
);下面我们是PHP脚本,首先我定义MYSQL的信息。  X7 W9 h* k9 C! E' `8 `
$server = "localhost"; //你的服务器2 m7 p. Z2 f. p; _5 F
$db_user = "root"; //你的mysql的用户名
- k; A5 F  y& v- P$db_pass = "password"; //你的mysql的密码
" n+ k& Y1 }4 k4 A5 I  s) v$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
" Z& u/ p; M: _8 [6 C$timeoutseconds = 300;取当前时间。
# n  H" R2 k* z  T* G$timestamp = time();上面的完整代码:( @* q* [( A" ]; u* c
<?php
8 g0 L; z7 K# T9 \* R$server = "localhost"; //your server
' {- _( E- F. p9 D0 T  \, h$db_user = "root"; //your mysql database username" u2 h% q  S) I, d$ Q3 P
$db_pass = "password"; //your mysql database password if any: W7 M2 k3 V# I; R, K  Z- ?
$database = "users"; //the db name
& r$ X  _/ e) X" N$ R* w) {5 c. V, g$timeoutseconds = 300;//timeoutseconds limit. _4 H' S( b; h" F
//get the current time
# Z6 h- v( @6 l5 a$timestamp = time();
& {) L% Q) I/ O//calculate the lowest timestamp allowed
! F1 O3 B, \6 Y' T4 n6 G$timeout = $timestamp-$timeoutseconds;
, I# c- `; ?: h% d( ??>连接mysql
+ {: V, J/ f+ U8 X( cmysql_connect('localhost', 'username', 'password');也允许使用变量形式。* q' ^7 z& g' g8 w
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
! ]1 }' B( \) f5 W4 X" Vmysql_connect($server, $db_user);查询数据库的代码:
/ l3 q- q9 j+ J+ E+ f+ Xmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
# o2 v6 T! N2 T! N$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
6 m5 Q$ n" ?" E/ S3 p2 \$ C; v  r('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
# V4 d# t# h+ f. k9 u) U! l( S如果用户用错误信息的话,这样处理。% @  U, j9 a9 D# I7 h4 a# A. O
if(!($insert)) {
; ]5 F! a7 m% @. F# q4 B8 j* Iprint "Useronline Insert Failed > ";: R/ U" z/ e$ f5 M. f6 `; l
}然后实现当超过设置的时间就删除该用户记录。# M* P: T: e) `( H, ?3 G. ^
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
$ z7 M& y+ h- f, q/ Wif(!($delete)) {, g' s* P. C! `+ e1 s7 X
print "Useronline Delete Failed > ";, s- l4 t6 S1 D
}下面我们解决数据库中不同IP的问题! h, m# c. A! v, |
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用- k3 U* C9 J' g' o5 V
mysql_num_rows(query);来统计用户,代码如下。
9 u* B$ V& }- u, d  f# g- m* x) y$user = mysql_num_rows($result);最后关闭数据库。
6 G* `3 r  Z. x" V2 t: `; p. `: Fmysql_close();显示在线的人数。* d5 f% [$ P7 D$ Z1 J
if($user == 1) {/ }: t" K# v" ^' a, p# o
print("1 user online\n");1 t3 |" v; l( P+ c9 e& K& k* j
} else {: F3 B8 R8 m: m! s
print("$user users online\n");
( ], M, p. G! H! v% e( p; r}最终把上面代码写成一个PHP文件如下。
& O' d% @! A3 R* L: x' l5 l<?php
+ o5 |* m4 l7 s# |/ g, O5 D//Put your basic server info here2 h  V! l2 O5 B
$server = "localhost"; //normally localhost
7 c& ]$ ]. U% l3 H' R- j. d$db_user = "root"; //your MySQL database username
9 \* L4 N+ M! _% a  |$db_pass = "password"; //your MySQL database password
2 U  |8 i: y* {/ j$database = "users";
' T2 @1 H7 j, m# ~4 m1 q$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are+ i" A) I- J/ k. Z
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last; v8 L& i$ ^$ k4 m, f
// $timeoutseconds seconds)
6 ^" b. ?7 Z( k- x4 q. Y//this is where PHP gets the time% G/ B" b, q4 L3 J" }0 A
$timestamp = time();3 M. C( y% A3 g( c  l% r" G' o
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
& O7 B8 h# K+ E" G$timeout = $timestamp-$timeoutseconds;' O! P  e; ~4 F1 ]  s
//connect to database7 d. \% o' M  m! }4 R
mysql_connect($server, $db_user);
! ]' |; o( h3 v- k$ o/ ~//add the timestamp from the user to the online list
- c9 @+ D! B+ m7 W* o) P. Z: O( w) [$insert = mysql_db_query($database, "INSERT INTO useronline VALUES3 ]8 j/ S& W& p' a; |
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
; `. L; Y5 q+ ]& T  S7 Z8 _if(!($insert)) {
/ S  G2 n+ f* `, l) Mprint "Useronline Insert Failed > ";3 ~3 ~2 J2 r/ l2 `- O9 |
}* E( k: V) Q9 F6 l5 f( R1 g; A3 e; ~
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.! M/ j% A- c0 k* U1 S
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
# {3 e& S( c4 a" @3 ^if(!($delete)) {
/ |: h. }# `9 P/ V1 F1 wprint "Useronline Delete Failed > ";4 H) ^- r: G8 h5 A2 ~
}. o, H. Q& s1 t9 ?. D5 e2 |
//select the amount of people online, all uniques, which are online on THIS page
" h5 k4 A8 t* _' U& B, F$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
6 ^) Z: r+ R, ^+ Cif(!($result)) {
4 ?* B( g) j! l7 \print "Useronline Select Error > ";
0 X: B- h7 s8 I+ J* l/ E}
6 K8 U1 t2 P6 N4 {2 e$ P' L0 k//Count the number of rows = the number of people online9 S9 I! t9 W% r( f  u$ a+ P+ B4 a
$user = mysql_num_rows($result);+ \2 R2 _/ O. n/ o( h
//spit out the results% a0 W( T9 L! U5 B) o  o
mysql_close();
& L) Q4 e& W* N& J! Jif($user == 1) {$ b! z/ O. b1 h
print("1 user online\n");
" y9 |- R' G( B( I  [0 B  }} else {: r" d9 m6 q5 L
print("$user users online\n");
( B" P6 S  q7 j6 f5 ]}
% E( V3 s8 n+ G9 I$ L?>1 U, Z6 b+ y% ^, V' i

& M  x- r/ ~% o/ B以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。6 Y& @5 e( t) W5 I; o3 E9 C  |
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
2 H! Y+ R" ^* t0 p; C' Y5 t我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。7 I3 J1 o; V1 {4 B1 W
当然啦,这两款主机也是相当不错的。" o" \, v6 i( T( g
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年- c4 w; x* H0 Q, {
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年! f/ t2 o: s5 g* R' A+ t7 j. j( Y
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 8 Z' t7 v3 q6 m( }
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
0 Q7 |( @% W* V3 s- s自己加QQ去问吧。

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