返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
7 V$ D6 w' I8 F; R  F/ h我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。% M, q) ^9 i, @4 D
首先我创建MYSQL数据库表。
* O+ q- Q1 G2 I# g, ICREATE TABLE tablename (
2 G# k6 |; n( O, Ifield type(max_length) DEFAULT 'default_value' (NOT) NULL
4 z! T5 Q% j2 }9 ]}可以使用的SQL语句。$ }! O* c2 c  C) c* i
CREATE TABLE useronline (
7 c- z6 a5 O: T& R& Ztimestamp int(15) DEFAULT '0' NOT NULL,
0 S9 }2 B' E- ]$ Z" l9 j1 N! }ip varchar(40) NOT NULL,
8 k9 c" D2 x- h1 h! \# t9 Ffile varchar(100) NOT NULL,0 v( N, V  A! d  V% X3 r
PRIMARY KEY (timestamp),
) N8 L* H' Q4 tKEY ip (ip),
) h5 m% `, P4 e0 ~$ y( X$ {KEY file (file)
2 A( v. w8 j: G/ D) C& \);下面我们是PHP脚本,首先我定义MYSQL的信息。) n- n0 F9 D4 o+ v/ A1 @, `4 G* v& T
$server = "localhost"; //你的服务器
3 B. ]' I8 w. M3 k# G' L4 B% [: H$db_user = "root"; //你的mysql的用户名
2 c1 d9 R  m/ p. a8 F$db_pass = "password"; //你的mysql的密码
) @; r# r9 l) j. E+ N$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)# N" r" C* G' x+ f3 R* K. W
$timeoutseconds = 300;取当前时间。: ^/ W  k( A2 t! E# c5 q- x! s
$timestamp = time();上面的完整代码:; Q' H# S0 C9 t" R& i
<?php8 [4 {/ `1 H3 U& ~
$server = "localhost"; //your server% ~" Z  y* Z  m
$db_user = "root"; //your mysql database username+ }; `& f2 p: k
$db_pass = "password"; //your mysql database password if any% Z5 }* ~# _0 W( F: [
$database = "users"; //the db name
* h+ i/ W/ ]% s  B! _! e# S, u$timeoutseconds = 300;//timeoutseconds limit2 a( a7 T+ v" G& L0 D
//get the current time6 X3 }4 B% D* q. n5 r
$timestamp = time();
1 ]4 Q5 O3 e$ E5 y+ n//calculate the lowest timestamp allowed  c1 ^9 p# L2 g) F8 i5 _( g8 ^+ X
$timeout = $timestamp-$timeoutseconds;' W" w% R* ?' q( B9 Y0 _2 u
?>连接mysql
2 X/ M% C2 z  a) {& Imysql_connect('localhost', 'username', 'password');也允许使用变量形式。: i- _% m/ k) e* o5 D
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
0 M/ m: J- Q5 \+ Z) Ymysql_connect($server, $db_user);查询数据库的代码:- J6 |6 x0 n( O6 f  z
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
" B1 y3 Q* n8 U) I# D; W5 |/ o$insert = mysql_db_query($database, "INSERT INTO useronline VALUES. T; Z# h& k( M0 c5 b% G
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");, I+ X! r/ [+ g$ Q
如果用户用错误信息的话,这样处理。, w7 N9 z/ F8 U
if(!($insert)) {
# B0 C) G! R0 _4 m8 P" [print "Useronline Insert Failed > ";
' s8 y& \* j: s" N}然后实现当超过设置的时间就删除该用户记录。
# S2 x; ^2 G2 K$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。0 q" D* @# h1 f# x* i( _8 k
if(!($delete)) {3 h% Z8 F7 K+ C7 v: t, [/ `
print "Useronline Delete Failed > ";
6 A1 _- [  s7 t3 m* @}下面我们解决数据库中不同IP的问题
+ s3 W# w: f6 T! x! T' e$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用& ~, S2 D+ J* O5 I# I
mysql_num_rows(query);来统计用户,代码如下。! ~3 J! n2 G  A7 ?
$user = mysql_num_rows($result);最后关闭数据库。
  b7 i% d* x+ L- v8 E  Mmysql_close();显示在线的人数。
, g1 Z9 p1 B- C6 Tif($user == 1) {
: V: a9 o1 `+ b4 _: M* dprint("1 user online\n");& D$ r5 V& x$ [/ b& |0 Q+ c( y, y+ {
} else {  w6 d, |  d2 z& W
print("$user users online\n");
2 C6 u: r- ^/ {- v# I* g}最终把上面代码写成一个PHP文件如下。. P) A- y8 H2 V# e( x
<?php4 P$ `4 p' h4 x; }2 O) K
//Put your basic server info here* s* D9 Y& x4 q3 J
$server = "localhost"; //normally localhost
9 C$ ]1 C" a& c  n9 k$db_user = "root"; //your MySQL database username/ w& l+ P* G0 ]2 O
$db_pass = "password"; //your MySQL database password
/ q. [. L/ v" Z7 S% }$database = "users";1 M9 C2 V& w+ i- `' O. H& p
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are- k. d& }& t& [) c# x. `" D
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last; v" P% `7 B. g- I2 X
// $timeoutseconds seconds)1 W" @$ H& `0 J$ v& P' W: G
//this is where PHP gets the time
) T! b* z4 P! }, [' m5 e$timestamp = time();
" I" n5 s  W& B$ n//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
  B9 c7 U5 [( p5 x, L$timeout = $timestamp-$timeoutseconds;
. D; O$ w4 N) d+ c, L//connect to database# E8 h3 {; v1 x2 Z: w8 h
mysql_connect($server, $db_user);/ g% N8 b* Y, _9 B7 V2 V
//add the timestamp from the user to the online list4 A+ Z2 q' I" R! ^; r0 |' f5 h. W
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
6 c9 q8 |  H) U: z. K* X, P('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
5 C0 h; p: U& D0 h) z5 Oif(!($insert)) {
9 a2 E8 E( J: p  h4 ?- [- Jprint "Useronline Insert Failed > ";$ D# y& k3 k! v' B& p6 R
}
4 Z: J4 d3 |, h. n4 d* {//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
4 I, M/ X; n% z$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");1 L1 _! u5 t* ^; V/ J
if(!($delete)) {
6 `/ X' Q; k* \1 q! P4 J) [- K/ y" pprint "Useronline Delete Failed > ";
# Q6 S2 s+ W& }4 f; X# _}
6 Y; a$ f8 {; J2 J: A//select the amount of people online, all uniques, which are online on THIS page" s0 [7 T- T' C  e" b1 G
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
% O$ m( ?+ B# m- kif(!($result)) {
4 k2 x% y* s8 h! iprint "Useronline Select Error > ";* d+ i  F; J* {# o
}: e% q2 L- O1 p+ n1 Q1 }/ B
//Count the number of rows = the number of people online% a  Z$ b0 ?1 W% \  R
$user = mysql_num_rows($result);2 Y1 i+ p$ J, [% {
//spit out the results, c/ w; S% y9 m( z7 l2 ?
mysql_close();
3 j9 L( G( o+ ^8 B) Mif($user == 1) {
1 n' g$ s. C6 w& N  G# e4 u  jprint("1 user online\n");" y" V$ v8 r7 t& Q- y3 R) a
} else {; ]2 M' P4 w3 W
print("$user users online\n");1 ~- g- W5 z$ u# x4 C
}! q8 F$ U, |1 x9 z; {9 p8 }
?>
, b" N) u  k3 t; J& o3 z
  g8 l) B8 }8 h% K/ }3 Q2 h以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。5 J! N8 r( H; M1 |% U8 t) T7 H" o
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。) z7 T5 F- G* h3 n/ m. d) g
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
7 u6 o! F. @& \+ ~当然啦,这两款主机也是相当不错的。
# g. ?; N: D- o* g( [) X! U1 F3 V智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
( ~4 \! L  ^" f& h; ?3 ^标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
" c; b, s, J4 F, m% n提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ ! s/ r1 @( B9 x8 x
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
. r8 R5 t6 S: ~0 O9 C6 X) P! s自己加QQ去问吧。

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