返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!3 d9 d' _# }8 w6 X# E! c8 w+ m4 k
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
/ @% G7 K0 g5 W/ O首先我创建MYSQL数据库表。
+ i7 J+ H, Z) \$ uCREATE TABLE tablename (
* F3 J. L) P' }field type(max_length) DEFAULT 'default_value' (NOT) NULL  W: }5 V5 z  x5 n- h0 k2 e
}可以使用的SQL语句。% q# S3 ]. A' T) T- q- U0 h
CREATE TABLE useronline (
: ^# k, ?' i. z8 W4 g" r% x5 etimestamp int(15) DEFAULT '0' NOT NULL,
& ?0 u9 j" k: {6 T# D4 Rip varchar(40) NOT NULL,8 {% p' B3 h1 E) m
file varchar(100) NOT NULL,
" l) l' J) R0 m3 u* {PRIMARY KEY (timestamp),
' B) o; @6 P" i. p4 {KEY ip (ip),* b* i* n9 P: g7 J# M& f1 t5 P. M
KEY file (file). @. J* x0 M' Z
);下面我们是PHP脚本,首先我定义MYSQL的信息。1 p& O+ |. p) X0 v$ o8 {
$server = "localhost"; //你的服务器9 Q/ s- |7 s' X, l; s
$db_user = "root"; //你的mysql的用户名& k' f8 j) Q6 s. e
$db_pass = "password"; //你的mysql的密码
6 C, R9 e# f  d; H$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)1 h3 r% A8 s6 {, @
$timeoutseconds = 300;取当前时间。. ?% ^: i3 L. q, e; }# x9 \5 S
$timestamp = time();上面的完整代码:$ J3 U8 C' A# f1 G( N
<?php
  N( z& ~4 H. c: C- \) p$server = "localhost"; //your server" _4 T, M% C7 ^) E
$db_user = "root"; //your mysql database username1 F& D/ |6 d* j$ E7 u1 }
$db_pass = "password"; //your mysql database password if any3 C8 W. {0 c& t" ~) T* j+ r% A
$database = "users"; //the db name
  W% W; H9 `" U2 q9 D$timeoutseconds = 300;//timeoutseconds limit
$ j9 O0 y6 p" [: D//get the current time4 m6 I! }0 v! X( s* y" x5 O+ e/ c
$timestamp = time();! A) e- Y* ~( \/ `9 z/ V# E
//calculate the lowest timestamp allowed$ m3 b1 j- O4 v0 ~8 w
$timeout = $timestamp-$timeoutseconds;3 |2 R) I! z$ o: R; Q
?>连接mysql
: Y) n5 o$ l* ~( P3 Smysql_connect('localhost', 'username', 'password');也允许使用变量形式。5 x: q# t, @$ j, |+ O
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接8 R& n" {, N5 X0 U6 }
mysql_connect($server, $db_user);查询数据库的代码:1 K) q: S# J1 M& ^4 \# B- F) ]
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。0 {- F9 {9 o7 t& Q2 y1 q
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES1 V8 [% {4 f9 o" x. n
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");* s9 H. r8 t* M. P1 {- j5 v
如果用户用错误信息的话,这样处理。
% `: o4 [7 R+ b! K6 m" }if(!($insert)) {' J+ O( K' G# z2 _, o0 R
print "Useronline Insert Failed > ";
# z' z" x9 ~0 N+ \: m}然后实现当超过设置的时间就删除该用户记录。+ x5 k( v( Z% [0 w/ ~; k' |) v- X
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
( g2 }0 I  i& C" W% p+ a& S0 mif(!($delete)) {
& }- K  i& [( l3 l* gprint "Useronline Delete Failed > ";% m3 I0 d$ L0 J
}下面我们解决数据库中不同IP的问题7 ~6 h9 G. P$ m; U* H* q
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
/ N! t8 K) M) P: @( O0 S, i; rmysql_num_rows(query);来统计用户,代码如下。' M5 U6 p& m; g4 {( R
$user = mysql_num_rows($result);最后关闭数据库。3 |) g) E/ l; ]+ r9 h& a
mysql_close();显示在线的人数。, N( Z" c. s  c6 F
if($user == 1) {
' c- v6 I; y5 ]+ `- lprint("1 user online\n");
8 `# j# f, J* ~  v+ f} else {
6 v) u! I; b8 s7 A1 g; \print("$user users online\n");7 {/ Z8 i- o3 ?: E/ X4 S4 @8 |
}最终把上面代码写成一个PHP文件如下。
" h, r( W& L4 u6 {% B0 [<?php
0 ?5 y& m/ ?1 k% q//Put your basic server info here
$ d9 _, {! a2 K$server = "localhost"; //normally localhost5 _( q9 C2 o3 a2 c. q- Z
$db_user = "root"; //your MySQL database username' g" B- g8 Q2 l/ ^9 N1 u* I0 ]
$db_pass = "password"; //your MySQL database password
+ [5 n' a% M. @1 F& y- T9 {$database = "users";: o4 V. B  I# M9 ]- R
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are) ^" Z9 Z" C/ `0 e7 s5 h
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last- r% A7 T; f' q  t4 D8 J" D, v
// $timeoutseconds seconds). n7 g% h) [& B  t' S5 S
//this is where PHP gets the time
( Z: K" T, r4 Z2 C* V8 ?$timestamp = time();5 P3 D( D' a1 d& `; q& D
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed* o! N0 U# N- w4 h9 D9 Z1 L* \+ D
$timeout = $timestamp-$timeoutseconds;
3 W. G7 Z& _5 H6 Y//connect to database
7 |8 A: R' n" U" R, Fmysql_connect($server, $db_user);
) H% [# x+ L0 g* a5 ?//add the timestamp from the user to the online list
9 L0 h$ ^$ o2 t1 u; m$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
9 M. Q3 N8 o- i, n, w('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");. M; z7 o- R/ c1 H$ b
if(!($insert)) {3 A, P- h2 L! i7 P& @
print "Useronline Insert Failed > ";
' q- v6 }# Q. L  h0 l, K}
  y9 e) V1 i" q//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
& G* Q& }3 _1 W  x% R$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");  _% j/ q$ w* h4 S2 @
if(!($delete)) {# h9 @" E! D$ y; G- Y6 O
print "Useronline Delete Failed > ";7 u! G' d: y0 W7 g9 |4 ~, l9 F- |
}  h1 q& Q6 u3 [- W. z( }
//select the amount of people online, all uniques, which are online on THIS page
/ u2 S/ U( s' K! H0 X$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
% n1 C$ w$ s# P8 U& ]# I9 qif(!($result)) {
  h0 P2 u) `& x9 c8 N* t% p+ fprint "Useronline Select Error > ";
* `" p9 K$ [  j}
/ |/ C& `  s9 e, {+ A//Count the number of rows = the number of people online
/ S$ L! N6 L! z& R' |' Q7 U" E$user = mysql_num_rows($result);
5 U  M' J$ e( L- g6 J1 V8 V//spit out the results
. N! h0 \, z+ z0 Q; y3 o9 C  Vmysql_close();
& v4 t" G; J/ X7 Zif($user == 1) {
% |+ y& |8 |, c5 c  ~7 wprint("1 user online\n");4 u+ F" u$ J. y: E% }" j5 _
} else {3 z5 p/ z4 N# V) @+ q
print("$user users online\n");
  _* B4 _5 X6 b6 C, c; z# M}
9 w7 v# F! r. [3 m' ]?>
: I2 f0 A, [. ?% \# \' G+ M2 u, L' t/ ~! o6 Y1 O0 X: C4 ]
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
6 {: x/ y5 K, X! i4 M/ g# y" ~时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
0 @' `3 m: O: H我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
- U+ e0 @0 E  ~2 a' Q$ t& w当然啦,这两款主机也是相当不错的。
, [) W4 s: C$ y' k; E9 m智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年+ G. B* O2 D& Q3 N3 H7 m
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
4 u: l- e- Z; @1 G提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ . T# b, H* N, u1 l4 \
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55- c3 W, a+ _& y" x+ V
自己加QQ去问吧。

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