返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
7 t6 X/ U* |& \: f# o我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。( w% Z; J  Z( z1 O( {
首先我创建MYSQL数据库表。: t, p8 D) t. w: B7 Q; B! r
CREATE TABLE tablename (
8 j) F& n! I- @3 gfield type(max_length) DEFAULT 'default_value' (NOT) NULL/ B: c6 D4 s6 f8 Y0 _1 H' g- |
}可以使用的SQL语句。
; z' Q* X( g1 |( {( s8 s8 jCREATE TABLE useronline (% o( N8 Z, Z2 i( _" X2 A; k
timestamp int(15) DEFAULT '0' NOT NULL,
9 C: \5 ^+ N5 Y+ j  qip varchar(40) NOT NULL,# `% j+ N; h* c6 `4 t$ m! t
file varchar(100) NOT NULL,
4 \& f8 j( S8 T% Q) \8 {5 Q9 y5 YPRIMARY KEY (timestamp),
5 A+ M0 H8 s# w. _7 N0 aKEY ip (ip),/ x0 t& h9 E6 a5 G1 p. {7 j
KEY file (file)% P5 H. E5 |1 Z  ^* v1 `8 t2 H
);下面我们是PHP脚本,首先我定义MYSQL的信息。
/ E) q* f" U7 j7 |# h5 R# f$server = "localhost"; //你的服务器# w" G1 W/ X5 a* B
$db_user = "root"; //你的mysql的用户名
1 [, v8 d! b+ x3 F$db_pass = "password"; //你的mysql的密码9 a: s7 b; l4 B3 Z- r
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
) U* x6 _! ]; e$timeoutseconds = 300;取当前时间。& z" K0 D" [- U7 y( i* ]$ A
$timestamp = time();上面的完整代码:/ v4 a/ V0 A- X
<?php
3 i& u, m' `& c8 N, ^4 d$server = "localhost"; //your server
" Z$ L# p# i! o) D$db_user = "root"; //your mysql database username
1 o3 k5 p- ?8 Q! b' F8 _1 S0 x$db_pass = "password"; //your mysql database password if any! V1 O- A* t4 h% J  m! M/ \
$database = "users"; //the db name1 _- }' v  Z% [) R7 B; y) U" v/ ~8 G
$timeoutseconds = 300;//timeoutseconds limit2 j6 R" N* G& w# b% H
//get the current time
; h( L( L7 c; k/ N7 U$timestamp = time();
% V5 F9 q, k1 G1 _0 h' Y: J- o8 H//calculate the lowest timestamp allowed% C! L& t5 J( \/ G9 b; U+ K* b
$timeout = $timestamp-$timeoutseconds;+ ~. D! M- s5 {- P
?>连接mysql  N0 x, f- p/ a
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。: r' p3 H9 |1 |$ f8 ?0 l5 U
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
) o6 y9 t' A, dmysql_connect($server, $db_user);查询数据库的代码:
; W0 h9 W, t3 @+ dmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。6 X3 F0 B6 B0 K( v) g( S* W6 \5 K2 I6 r
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES  b  f: f( ~, i- B! j  x
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");+ w! e) A* o: G% l& z% R& l+ ~
如果用户用错误信息的话,这样处理。
4 Z( Y& l6 f# \" e: ]+ Yif(!($insert)) {
$ d# o. @6 W  ^8 y3 Vprint "Useronline Insert Failed > ";/ W3 w% p  Y. J# S; F
}然后实现当超过设置的时间就删除该用户记录。
3 d% d1 j& T3 F5 l) Z$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
5 I  |; n, E& E4 Q( b/ Z( dif(!($delete)) {
  {. I. M0 ^& W' b! h, oprint "Useronline Delete Failed > ";
7 v% ]! x! V- R) \}下面我们解决数据库中不同IP的问题
1 f2 \( r1 A8 ~5 |$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
1 Z+ R( _8 U( kmysql_num_rows(query);来统计用户,代码如下。
# V9 E3 \7 G% ?$user = mysql_num_rows($result);最后关闭数据库。% ]) t! f4 c2 M  {3 x8 o
mysql_close();显示在线的人数。1 v2 ?& n' ~; G8 b% k6 G! M
if($user == 1) {
4 k% t) O7 v* Rprint("1 user online\n");
8 a* G9 w. ~9 k- y) q2 b; K} else {
' f0 R6 H( q/ [# |! jprint("$user users online\n");
$ [/ {5 w# R- ?) Z# a0 Z/ N) h7 G* G}最终把上面代码写成一个PHP文件如下。( v) X# T1 @) I) q' z
<?php: {( F* x1 r5 W
//Put your basic server info here
; i# c+ s$ E5 _3 T5 P' O$server = "localhost"; //normally localhost& O7 q* x7 {; y) G# V
$db_user = "root"; //your MySQL database username
0 ^* J2 o7 I  m$db_pass = "password"; //your MySQL database password
8 Q- G( R, r; A* b6 {9 f$database = "users";
) n$ [; D* m1 M  N0 w: h  R' E! Y$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are$ X" b2 M$ Y* R
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last/ J1 h7 K2 y( ~. E; u
// $timeoutseconds seconds)
) i1 K" L7 }9 H" K2 h2 j* [//this is where PHP gets the time( C6 o9 o& h) ~6 F  ~
$timestamp = time();
) p* G8 D* o. Q8 Q! b3 A//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed% [5 `& K+ N) C# @1 R
$timeout = $timestamp-$timeoutseconds;7 n. M2 W! i1 {% `
//connect to database3 z* D9 E3 N/ |4 H* e
mysql_connect($server, $db_user);
2 O5 t3 w3 y* b$ e//add the timestamp from the user to the online list
: K: ?9 O: C4 Z# }& g5 a$insert = mysql_db_query($database, "INSERT INTO useronline VALUES4 ^1 U; V9 w1 u
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");/ [* x1 c0 [' D" `$ w
if(!($insert)) {
+ n( f4 ~/ p0 j  {print "Useronline Insert Failed > ";
+ H& v; j' h" g9 K+ c2 j* w, D}
& y  H* I9 G: Z* k% z! b( m% b1 U//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.- C* a1 ?9 ^- ]8 ~* P
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");7 Z7 I2 t5 n! U$ H* y
if(!($delete)) {
, ]3 `& |# X3 g3 b) X0 O  ~print "Useronline Delete Failed > ";& l  z9 `) j; i
}
2 d( r8 }. n/ B" ~+ J//select the amount of people online, all uniques, which are online on THIS page
+ c! Y* e1 i6 i  v$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
4 V: o! T* ?' d1 r1 E7 x; Aif(!($result)) {
/ G: A8 @' ]% S" mprint "Useronline Select Error > ";
5 f# w5 p* I9 S' V) X}% L% x4 K0 x% K0 V9 c
//Count the number of rows = the number of people online
' @4 H: z/ v" N% \, O- X( P$user = mysql_num_rows($result);
/ n3 Y- b+ ?3 m; }6 s6 a//spit out the results4 t; Z7 D9 |. S- }! W4 E- G
mysql_close();
) E4 |7 l8 V0 n  sif($user == 1) {
  s( a0 c! g5 _4 |+ z9 X  @- ~2 Eprint("1 user online\n");
4 y$ ^+ O6 p# z* d0 ~) a" _} else {
5 G' _/ [" g/ e. O! Nprint("$user users online\n");
! \9 U5 V3 X& [! |7 V  i% p}6 C! X2 P0 y8 w2 [
?>$ @, w( ?+ j! N

$ I) `7 e* ?7 F3 G) _( H* D以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
: G% I/ g* i8 T' n7 h时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。( ?( j1 p; T& R- v
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。: q3 H+ a2 F/ i5 s& q- p; J3 z
当然啦,这两款主机也是相当不错的。6 j# @4 m9 v# `# q! u1 v! I5 L
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年8 g/ s, H0 f5 z& p( W; e: H. g) A) c
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年& S: Y7 ?5 z1 G9 r& z. z; P
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ / h* U/ _( p) c! U" u+ f0 b
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
8 z0 L; d2 F0 T$ h/ E4 a0 t' @& l自己加QQ去问吧。

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