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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!! t& S$ e6 r7 H  z" V4 _8 O: Q
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
1 [/ Q7 m. h2 ?# `: n首先我创建MYSQL数据库表。( l5 k0 z  E. v$ i) r* D- s( q& e( w* ^
CREATE TABLE tablename () M) e' c( v' W/ b) B
field type(max_length) DEFAULT 'default_value' (NOT) NULL$ ?8 b, h$ i: E. J0 L1 b( Z
}可以使用的SQL语句。
5 a. V% G- [; Y; gCREATE TABLE useronline (
6 T4 [- O* d9 \+ p: I. u. Ctimestamp int(15) DEFAULT '0' NOT NULL,
- H: w2 \0 {$ X! j* i7 ^2 eip varchar(40) NOT NULL," P; ]* O3 Y! w, W8 e, }
file varchar(100) NOT NULL,
8 f6 s0 \* q) \6 M# g& jPRIMARY KEY (timestamp),
3 q! I0 f& L1 [KEY ip (ip),
8 p& t; n/ r, J* `! F1 qKEY file (file)& X3 r' T9 X" j" p1 ^
);下面我们是PHP脚本,首先我定义MYSQL的信息。
2 o8 p1 m/ L0 e" \$server = "localhost"; //你的服务器* R7 A8 |  G# `: E3 x
$db_user = "root"; //你的mysql的用户名
+ }+ p! z% E  H; D  k: V$db_pass = "password"; //你的mysql的密码4 G" f2 R, B2 {8 C
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数); j$ N! z+ u& E$ u6 _
$timeoutseconds = 300;取当前时间。
" d, m6 g  W  g' t/ k! w$timestamp = time();上面的完整代码:
: ^5 @5 `0 e; p2 O! W) p& M- [1 w<?php
9 z7 f; v# n( w; m; V; D# n$server = "localhost"; //your server
& B: s$ ?# N! C$ P$db_user = "root"; //your mysql database username
) T1 [& R- v9 W5 e$db_pass = "password"; //your mysql database password if any
: L3 g* C7 ^8 `4 ^* X* S, N8 o. Q4 v$database = "users"; //the db name
9 {* G2 N! i. I$timeoutseconds = 300;//timeoutseconds limit+ q+ r6 [2 {3 r# ~$ x7 P
//get the current time# V7 `5 a; Z8 l. z7 i& Q
$timestamp = time();" H6 ]0 u5 U3 X* {9 |" O3 D7 V8 L$ d; t
//calculate the lowest timestamp allowed0 J$ f+ ?' `! l) c0 w  c+ K6 |
$timeout = $timestamp-$timeoutseconds;
/ A% P# ~" ^( S1 v?>连接mysql! Y& ^; W1 j" F5 g$ d" D
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。) }) h1 f& h6 z+ ?. q
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
) p3 ~" p. G; Y( x% A5 l8 @' Xmysql_connect($server, $db_user);查询数据库的代码:# }( w: f  y# v
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。7 Y& r% l. W. h* D; p8 n" i: `' C
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES1 s0 p4 P0 M6 y
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");2 J3 T6 a2 V& [" c2 ]8 ]
如果用户用错误信息的话,这样处理。
( h: ]) y! `  o; H( S2 \if(!($insert)) {
4 Z  ^+ X. i6 A% P& Qprint "Useronline Insert Failed > ";% C/ M+ B' G  I( B9 C
}然后实现当超过设置的时间就删除该用户记录。
% d  W/ K5 ]) S4 q6 `5 i$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。$ N/ v! P3 O2 ?( i
if(!($delete)) {! i8 H4 _5 j; ]) C' C! f# H2 v& x
print "Useronline Delete Failed > ";
* i4 K* s0 I$ d* s: J}下面我们解决数据库中不同IP的问题
" z) d! r$ Y4 i3 _* x9 l8 ]$ y$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用  |, T: B. X2 B5 b. b
mysql_num_rows(query);来统计用户,代码如下。6 [. d: t  F1 n; {5 k$ E( L
$user = mysql_num_rows($result);最后关闭数据库。
# b% T% i7 {/ d: |; P: ?+ |- }mysql_close();显示在线的人数。) n: G; ~5 n0 j1 E+ ], M
if($user == 1) {
& Q: z1 s) R! D# o, Vprint("1 user online\n");: v5 P1 E) C0 x1 O8 i3 `) g
} else {
; S6 p8 r' w- [% x5 G) H' }8 Hprint("$user users online\n");% a& j% ?' Q! X+ c+ K
}最终把上面代码写成一个PHP文件如下。$ a  c3 C( ~1 U9 N0 u4 W
<?php$ z( S! p9 v% e. d$ q
//Put your basic server info here, e, q' B9 P9 ?0 Y- n( }0 t" i
$server = "localhost"; //normally localhost
, E1 {8 v$ D+ {  b$db_user = "root"; //your MySQL database username
) e: J0 |& b6 W1 c5 {* |$db_pass = "password"; //your MySQL database password
: K) w$ |1 s( _: o6 e/ l( \1 ]/ s; B$database = "users";
# [; e8 W& g- e) P/ O( J$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are7 h! g  K/ K$ \9 v
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last& q- T" e/ A8 q
// $timeoutseconds seconds)+ w! |- t. r& R) w. K
//this is where PHP gets the time
: V& z3 |2 |3 z. o% B$timestamp = time();- r% l/ ~' x1 v9 N7 W
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
, K- D% _- q/ r5 V/ }( E+ U$timeout = $timestamp-$timeoutseconds;+ r  U: r" W1 t: }* I. P# v
//connect to database6 F( m+ f: o( l
mysql_connect($server, $db_user);" g9 \$ b& A/ Z& u8 I( \
//add the timestamp from the user to the online list
! w* ]" {0 Q  D4 p$insert = mysql_db_query($database, "INSERT INTO useronline VALUES1 l" N% P; m- U
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
* \/ O0 \) l3 A4 |4 @0 r, Wif(!($insert)) {
3 ^+ t% u7 _9 w! R+ cprint "Useronline Insert Failed > ";6 m4 E1 |6 `, g  }1 u; n
}
: z: f% \! G$ G; K# Y//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.; t# s& _# H, l! n$ Q6 o6 \* q
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
/ D* w; A) {7 k7 |1 O. Dif(!($delete)) {
: {. _. K+ x& d( L+ w! A! Q! |! Y5 }print "Useronline Delete Failed > ";
' }4 I8 z$ z$ M4 z0 J8 C5 o}
* S- D) Z, a+ f, D: Y8 _: z$ B9 c//select the amount of people online, all uniques, which are online on THIS page4 i! ^0 u' }2 s6 W0 j; `" f
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
7 H, l' E& P% ]9 kif(!($result)) {
5 i& L9 r9 N- }) P7 C8 bprint "Useronline Select Error > ";) K0 @0 e$ \5 m' ~
}
8 Z+ E' Z- k# N1 c6 p9 T; f//Count the number of rows = the number of people online
+ Q5 O  W& o* s. W. U7 B$user = mysql_num_rows($result);
4 o' R8 L- |, _/ y; ~//spit out the results
2 Q; y: p7 u8 F$ n5 v9 I8 lmysql_close();3 q3 q$ ]- l. U+ T
if($user == 1) {- ^6 T" N0 ]  J1 @/ j  `7 K- n
print("1 user online\n");, y% O, K  f+ M1 _6 q
} else {! f) c" `8 _. s9 T( a5 U
print("$user users online\n");4 p9 y) [$ q! U9 @% r
}  p0 B; F+ E  D+ G' l
?>
' Y" b+ ]4 F+ K0 d, \, t
# @1 W9 M( D4 ]7 J以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。& z+ t/ Y5 k* Z- c$ n$ Y( Y, ^  ?
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
4 k7 B+ Z( {3 N! [- i6 t我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。7 F( P, m# G0 x7 P4 b% {6 ^
当然啦,这两款主机也是相当不错的。; r6 A- Y2 O9 x5 f$ ?1 l1 d; J2 \
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年' [2 O3 D. m' K. R
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
6 H, h9 R0 ~& Z4 _/ g提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ ( I; A$ I& p+ p
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=552 @2 P5 ^. L  U4 ?8 G9 f
自己加QQ去问吧。

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