返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
" h( u  K9 `% E我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。5 a/ O% _* _4 E7 z8 v
首先我创建MYSQL数据库表。
9 a, d# l  x) s3 M+ p+ ]. mCREATE TABLE tablename (! \7 T" Q/ _) e# ~
field type(max_length) DEFAULT 'default_value' (NOT) NULL* T& M7 j: a& _* M3 E+ ]. b! p- ?
}可以使用的SQL语句。& P% H( l2 ^! r% f
CREATE TABLE useronline (( s0 _8 \/ b% A# j# i1 s5 j7 i& J' W
timestamp int(15) DEFAULT '0' NOT NULL,# J& _- o" M7 a
ip varchar(40) NOT NULL,1 o7 t; u; j9 R* @! \0 M
file varchar(100) NOT NULL,. O; O" v4 A+ y' q
PRIMARY KEY (timestamp),
1 l( c1 G9 \9 l7 H, n7 i/ PKEY ip (ip),
4 G* H! |. K7 q; p8 N7 [% |KEY file (file)/ A) A  v2 |9 P" d; i( l
);下面我们是PHP脚本,首先我定义MYSQL的信息。
3 e" h" \: e/ ]+ {1 S8 K  ^$server = "localhost"; //你的服务器+ J! F, A  L) u7 e! U3 [) b0 S4 F
$db_user = "root"; //你的mysql的用户名
6 T$ c/ w# v$ l& g% L6 b8 p" p$db_pass = "password"; //你的mysql的密码! M1 `* f0 o4 C
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
& G. E" |8 A4 U# ?$ t$timeoutseconds = 300;取当前时间。- G4 e6 T" k; L
$timestamp = time();上面的完整代码:
: {2 X6 n- B$ x3 I$ V, M<?php0 }- h8 F7 ?* |! l9 z% k/ E
$server = "localhost"; //your server
3 N7 U* @6 |8 i6 ~: ~3 l$db_user = "root"; //your mysql database username
& l) B0 m: E* e! w4 f( Q" ?- ^$db_pass = "password"; //your mysql database password if any' O3 q/ r! F3 D: D7 a
$database = "users"; //the db name/ p) P$ Q& I! I; {! }$ n% [& C+ G& z
$timeoutseconds = 300;//timeoutseconds limit
' ~  y9 m! p% L2 t5 ^) z/ K//get the current time4 s1 I- A) p% z
$timestamp = time();8 E0 `/ M1 Z! L# P. j+ m8 B
//calculate the lowest timestamp allowed- K3 z6 L4 N0 b) r& _$ t
$timeout = $timestamp-$timeoutseconds;' ^- G& @9 d# L7 G* G* O
?>连接mysql* H& k. P$ Z4 e. g
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。. l; G& J3 K# n
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
  J$ u( y% B" l0 omysql_connect($server, $db_user);查询数据库的代码:- T' i4 E/ l9 J$ o; _7 O
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。- [) E4 e2 W; K* q
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES* O' h2 _+ s2 A+ \5 s7 ~( B
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
9 g2 I4 \* u7 y/ k. }如果用户用错误信息的话,这样处理。+ D- Z) V5 \% b. ^
if(!($insert)) {7 `/ o8 m  s( N1 c' f7 {, Z- G0 H
print "Useronline Insert Failed > ";
9 p* L( I& a: v0 ?/ t8 v) q* }}然后实现当超过设置的时间就删除该用户记录。
+ T  E0 i( H  q0 l; o$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
! F" K! J: @, m4 A8 E* tif(!($delete)) {
0 [, M6 w+ G& [1 ^0 Nprint "Useronline Delete Failed > ";0 P/ r4 l* X# \1 n$ W2 @, T
}下面我们解决数据库中不同IP的问题* L( H1 l6 N$ w0 f5 l, p% w  f
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
  u3 v$ C6 S" O. k! v% I# Fmysql_num_rows(query);来统计用户,代码如下。
7 @8 b( Q7 N8 w8 a7 l* [" z4 v$user = mysql_num_rows($result);最后关闭数据库。) O: V  |& w) i# x+ n
mysql_close();显示在线的人数。
& n6 }- R' ?  `$ vif($user == 1) {
  ?+ H( ]1 o- O9 sprint("1 user online\n");5 l: I5 b- W& ?8 D+ M1 V" i9 `: U
} else {
5 G; T2 y  q* J+ g7 o1 nprint("$user users online\n");! K( q! T3 Z8 R
}最终把上面代码写成一个PHP文件如下。
+ t1 I1 o+ M- Y6 a  y* L9 [4 f<?php  c/ ~/ M7 q7 c/ z2 z
//Put your basic server info here
+ q* i+ K* j8 ~. \$server = "localhost"; //normally localhost  o' G  w6 F6 Y. {! p) P# r
$db_user = "root"; //your MySQL database username8 e) h$ O! U* n$ @) m+ r7 e
$db_pass = "password"; //your MySQL database password
! q* t0 ?1 ?: \5 P$database = "users";
( h9 Z6 C1 c0 g0 Y$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are0 G, s6 i' Q' J. O
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
5 x8 |% [) F" ^7 }8 a  c' B' q// $timeoutseconds seconds)# a0 `6 W2 m3 b% S
//this is where PHP gets the time
$ A) y/ Z+ k8 \3 P6 y5 B) \$timestamp = time();
$ i( J- l3 v4 [1 p6 H//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
+ e3 i) @6 F9 W& ]$timeout = $timestamp-$timeoutseconds;
7 c  r) q/ x6 w0 d//connect to database
5 T+ U7 V' Y0 x* F3 R% Rmysql_connect($server, $db_user);$ a; m) F5 r7 N9 q0 g
//add the timestamp from the user to the online list; p5 V! U) Z1 r
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES5 O. z5 n) i# z& n1 E; _, }; K  J2 n6 h
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
. `, F* b3 D# K; U- m) v7 Gif(!($insert)) {
/ c- r  Z! \+ f4 U( B1 W2 Q) Uprint "Useronline Insert Failed > ";
" f: @: s* t6 ~. p' B% p}+ }" ?1 N& W4 M& H4 y/ I  H2 L
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.1 w: b( W, Z2 ~# S3 C0 ]
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");  g$ j! D1 Z0 n
if(!($delete)) {: k  F- _! Z' y1 E# b2 y& s8 F
print "Useronline Delete Failed > ";
+ x  Q3 u! O4 c$ z/ a/ Z5 Q' ]' Z}# a3 P" r5 d% j
//select the amount of people online, all uniques, which are online on THIS page
! d/ x2 P& u- R$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
- x! N8 L$ X1 aif(!($result)) {
5 w4 l% L  r  j9 w+ b3 Nprint "Useronline Select Error > ";
; K0 @9 w8 C( u0 g6 t1 Q+ @4 p}
" o. B* K7 b8 P- w% {' Q6 m4 j//Count the number of rows = the number of people online' R+ k. q2 d+ m6 v  {
$user = mysql_num_rows($result);6 g: d6 v+ p) X* p0 R
//spit out the results
$ [7 R& R* h- M3 lmysql_close();
' l: V1 E0 `, i/ }/ ?  F/ Q, |5 B- C3 eif($user == 1) {
8 u/ p1 U9 ~5 i" [+ m  zprint("1 user online\n");
- ^, A: R9 b! }6 z  Q6 E5 F} else {
/ ^7 C  K% b( {8 O2 Rprint("$user users online\n");# ?% B2 m' ]# y* P- z0 [
}
! k7 I4 v  |6 z% J?>
7 m& l. L" J2 b# D( \) T$ J
5 `4 L8 n1 j' i8 \; I8 ~* K以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。% e" _# k6 j% c( a! L
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。. G7 Z* w% e6 ~/ P. v6 \- o: B1 z
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
$ f9 \$ W/ G- s, D/ l: h! `当然啦,这两款主机也是相当不错的。
3 c6 D) w* w; b6 T) w智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
7 D/ I6 l$ s/ {* q+ \% c标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
9 {; `# G9 O% A0 t' v$ \6 l9 h* ]提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
- @. A$ Z7 U& e3 u/ A4 F4 q0 d空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55& _  j1 ]5 q6 Z7 O, D, [; z" A
自己加QQ去问吧。

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