返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!/ Y4 m" ~0 n' l% g/ O
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
4 B" x9 p2 N7 f' `! ]: ?+ V首先我创建MYSQL数据库表。  i6 n/ r2 x  ]+ M& M2 ?6 Y) J, b
CREATE TABLE tablename (4 `' U6 f: L7 V0 F' V' K
field type(max_length) DEFAULT 'default_value' (NOT) NULL
5 A5 n" Z. T8 `3 C7 y  c" ^}可以使用的SQL语句。
; D8 y5 ^& e9 y# U& b$ p2 O  |CREATE TABLE useronline ($ h1 `- g: q. y, g
timestamp int(15) DEFAULT '0' NOT NULL,  p0 X' d' l  X
ip varchar(40) NOT NULL,% b5 `: G) U+ k# z; m
file varchar(100) NOT NULL,
7 s$ i# T$ ]! `$ DPRIMARY KEY (timestamp),' q" r7 u2 o( h: d( V  i
KEY ip (ip),4 R+ k$ l; B* \+ n. X2 m
KEY file (file)
) Y& \! s4 ?: E. J% W0 t/ n  @- V7 O);下面我们是PHP脚本,首先我定义MYSQL的信息。
6 G; L$ r; J: X8 Z" ~/ ^" I$server = "localhost"; //你的服务器
" n. J+ N/ p" A2 Z- A7 m3 L+ S$db_user = "root"; //你的mysql的用户名: c1 B; n0 ?6 I2 U3 C! g
$db_pass = "password"; //你的mysql的密码' a3 F9 m" G0 ^) v6 n6 a3 T# M
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
6 B: U/ ?/ `6 a: X* g$timeoutseconds = 300;取当前时间。0 p% ^$ R! Q) Y8 o% v  r
$timestamp = time();上面的完整代码:
" q- x, K! v5 n; N: c* T<?php& p) f; |! _5 p' o7 L! W: b
$server = "localhost"; //your server0 B0 Q8 s3 R. t: i" r* f) q
$db_user = "root"; //your mysql database username
* r7 C. k7 S: s3 b/ p( J$db_pass = "password"; //your mysql database password if any" S7 i, E7 A' L; X
$database = "users"; //the db name3 @5 A. z, K1 R7 V& u( o" j9 V
$timeoutseconds = 300;//timeoutseconds limit
8 O, H9 m5 O2 N) K4 c& _$ c; F//get the current time! [& [+ z. g$ F* M6 G' @
$timestamp = time();+ U6 o! [+ M$ F$ Q) q5 F" C
//calculate the lowest timestamp allowed3 H: v) P8 [3 t; J5 v" N
$timeout = $timestamp-$timeoutseconds;
4 ~0 P7 _- j. d9 }( M, S/ G9 j; U?>连接mysql& P2 ~! s0 I  f8 Y. M
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
0 c6 g4 y) t3 n7 v& ^0 P& c) ymysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
- W0 X3 x) x9 ^mysql_connect($server, $db_user);查询数据库的代码:) ^6 Q3 u" q3 e0 Q
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。. W' i7 \9 |0 D7 Y* `
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
: k# Y) y+ G7 ^  n: d: E('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
- y9 ?" i$ M6 v) U如果用户用错误信息的话,这样处理。2 Z. S" j" ^) M/ t+ L# m& ^( w( n
if(!($insert)) {
$ g7 m* m( E& Jprint "Useronline Insert Failed > ";
* Q6 {" O3 |" z5 q1 B" Q}然后实现当超过设置的时间就删除该用户记录。: l' o' a" W8 F( v
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
+ y- s, N" i. }  W8 E+ P# iif(!($delete)) {
% x4 D: `$ g6 h# k; t! L6 y& _, ~/ lprint "Useronline Delete Failed > ";+ f, w. k6 }' \  M
}下面我们解决数据库中不同IP的问题: `! R0 E1 C5 L- V  M! q( W& W% }
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用3 s3 M0 @! ~# Z( t! C
mysql_num_rows(query);来统计用户,代码如下。
" ~  Q7 J6 x, B: s- c" \$user = mysql_num_rows($result);最后关闭数据库。$ i3 I* x7 N6 M) |
mysql_close();显示在线的人数。
5 `: c0 T5 m" a' Sif($user == 1) {
8 \1 o9 S' k8 F4 Aprint("1 user online\n");
# z! R6 l- U! f/ @1 [' @2 u$ [} else {% {; Z2 j4 y( D5 N' C
print("$user users online\n");( _3 H# Z* g, N! n4 u$ R
}最终把上面代码写成一个PHP文件如下。
* V$ `- r' L; D+ Q" ]0 Z3 E<?php
/ q1 P: ~; Z$ q/ t//Put your basic server info here
+ q6 M* n1 g3 }, L0 ]: Y! }5 t$server = "localhost"; //normally localhost
0 U) u. z6 x0 d3 p9 Y% J1 c8 j$db_user = "root"; //your MySQL database username( z; r9 P6 f7 R) i
$db_pass = "password"; //your MySQL database password+ s( i* G1 `5 C0 r/ v! B
$database = "users";2 M) v2 S; C" V1 u+ V" [8 ]3 D
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are% \0 v+ r& M+ |' u% m6 O
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
) B' _3 Z) C+ t1 S4 b% m2 I// $timeoutseconds seconds): \  |) \9 u( o; F2 W5 o& w1 A
//this is where PHP gets the time+ |. V! e$ |5 `4 h  J& r" o
$timestamp = time();. {% }9 }( Y2 x' [; a8 ?6 l) x
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed9 l* E7 M# }# W2 ?! ~  ]
$timeout = $timestamp-$timeoutseconds;) h, e6 ^, D: i9 f7 E
//connect to database
0 V6 S8 j  S% ?* @+ @! Y+ a" Jmysql_connect($server, $db_user);1 \) X8 M, @7 q* N7 q, s4 p$ Q
//add the timestamp from the user to the online list
$ f/ B$ H# p  ~6 D7 y$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
7 `8 X: `3 Z" ~( @('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");2 S* t) l2 ]5 L; I: E6 ?5 n
if(!($insert)) {
1 U! T. `' |4 U3 E1 Dprint "Useronline Insert Failed > ";- [2 h7 r1 Z# O& a! u
}
  M- c1 _! u9 L$ z% r) K/ ~8 Z0 m//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
1 @+ w$ m4 T! _5 @) D7 j$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");4 d% d4 N3 s& P! b6 }: e
if(!($delete)) {
2 x/ I8 A6 [& Y" u! ~7 [, M9 Bprint "Useronline Delete Failed > ";
& [/ y% `1 k4 a; c2 Q. J0 e8 s% g}
. x6 r8 ]. b+ R' g5 ]" X//select the amount of people online, all uniques, which are online on THIS page5 D4 x- b$ i3 Q: Z: \; g
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
+ l  D  Z* _0 R+ M; E; hif(!($result)) {
6 }+ n4 R& a3 {; j% ?1 yprint "Useronline Select Error > ";
, M, y$ C( Q/ `; L% I. r) z$ x1 c5 s}7 K! z: z& o4 b! t8 O
//Count the number of rows = the number of people online% o3 |* {6 f$ E+ b; T2 N  O
$user = mysql_num_rows($result);
' S  k* I2 ~* d# |9 k! H7 A//spit out the results
- r) m* H/ i0 h! fmysql_close();
' Z8 h) ~1 c$ b5 x& c7 a# u: Fif($user == 1) {
" f) {1 s! c) |2 G$ Zprint("1 user online\n");
' T* a. ]$ A" L" U+ s, Y) ^} else {( d6 f! ]5 Z6 P$ y& e
print("$user users online\n");
6 f5 h* ?9 S$ |}8 n$ t! T9 `. G: j
?>
; G0 B4 r0 c6 l  n3 j6 p* f( g& T/ S1 V
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。& z9 A3 n- E& `9 {6 [! x6 c% Z
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
# i( t2 g$ i4 u  j我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
& y: `$ \, }; Q8 D4 }) ~当然啦,这两款主机也是相当不错的。1 L/ z1 z0 S! d# B
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
( b8 m1 t* s2 ~+ b, ~) w8 l标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
; c  Q2 n' y  z1 [% J( g5 d5 e提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
# c" _3 U2 W4 T; ^5 W, b空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
% {' u1 R* T- }* \9 d( V自己加QQ去问吧。

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