返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
4 C$ L) x' h& _6 m6 o, n% F/ J我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
0 n- E- B7 z. V! r. F首先我创建MYSQL数据库表。
! q+ L0 Z8 Z( C7 ZCREATE TABLE tablename (8 Q: E" [% j+ {! Y3 [
field type(max_length) DEFAULT 'default_value' (NOT) NULL
% i2 g4 m% U( _% f/ o8 A}可以使用的SQL语句。7 [8 r$ g8 H  g4 X8 l* h* S! h
CREATE TABLE useronline (
: P& J6 e1 \! i4 x+ atimestamp int(15) DEFAULT '0' NOT NULL,/ n2 J0 E0 N, t' E* A) F/ \. z: D
ip varchar(40) NOT NULL,( P' }4 _9 G% W* |
file varchar(100) NOT NULL,5 K/ k% I/ H/ c5 ?. K
PRIMARY KEY (timestamp),
  b! k$ I. b" i* f0 e0 K. D$ Q1 v: AKEY ip (ip),
. Y. F! v8 {) C3 o  f! l7 `KEY file (file)
2 ~- o0 Y* b) l' `7 F. Q8 j+ G);下面我们是PHP脚本,首先我定义MYSQL的信息。3 R& F5 ~; F: C$ p% n
$server = "localhost"; //你的服务器
8 g) j# @% d9 Q4 q  {$db_user = "root"; //你的mysql的用户名
; s5 g* I& y% W3 t$db_pass = "password"; //你的mysql的密码1 [' C0 X! Z/ j9 t  n5 w
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
2 c2 q4 _; _0 k; E8 C$timeoutseconds = 300;取当前时间。
6 W! [3 I1 {) q% m! f$ c3 y$timestamp = time();上面的完整代码:8 w* b# F. u7 x$ a. q
<?php
2 M+ m* B  U2 ]/ J4 A$ H% [. h) j$server = "localhost"; //your server8 d/ D- P$ m: v5 ?1 I
$db_user = "root"; //your mysql database username
3 p5 F6 ~4 |$ m8 _+ W8 \, v. s  Z$db_pass = "password"; //your mysql database password if any
9 _# N6 V0 {, ]9 r$database = "users"; //the db name% e/ R; e7 i1 Q* o8 X# V, \3 ~
$timeoutseconds = 300;//timeoutseconds limit
1 o( _! r  O1 W' j1 i  I//get the current time8 O! G7 H7 n" ?1 \- o
$timestamp = time();8 r" Y0 Y1 V( ^' z
//calculate the lowest timestamp allowed
7 m+ C* ^% g+ z! V' o- W$timeout = $timestamp-$timeoutseconds;8 f6 z* w& \5 Q3 W6 C
?>连接mysql# J$ O5 p( |; H
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。2 u' F2 V# _- A6 g& O1 A
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
) N2 P, x3 d( L6 |# E/ jmysql_connect($server, $db_user);查询数据库的代码:2 Z) d0 E; R+ x3 o4 f( ~8 A6 C
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。) \9 y0 M' o0 w. g( t
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES7 i% V6 J8 O/ L. A1 q, `
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
3 q' F7 v4 [. M/ E+ s: i( a如果用户用错误信息的话,这样处理。
9 Q% T0 {+ p6 W/ w; dif(!($insert)) {5 C! i7 c) b5 C6 u+ J
print "Useronline Insert Failed > ";: z- D, m" L* ?; \
}然后实现当超过设置的时间就删除该用户记录。
; h' P. r. ?0 N& R$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
3 \" s, N0 J9 X! A. gif(!($delete)) {
9 m/ {' l' B  O% }- [' lprint "Useronline Delete Failed > ";
1 k& \0 d8 _$ e9 V* O0 `}下面我们解决数据库中不同IP的问题, Q4 b$ i1 H. |$ b
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用& |& X# C8 V) u! L( ~% V1 z
mysql_num_rows(query);来统计用户,代码如下。
/ U3 F2 @& ?# u: V$user = mysql_num_rows($result);最后关闭数据库。9 V! [3 N% Y/ W* d
mysql_close();显示在线的人数。8 j4 C' O1 Q/ Y* \/ z% r- ]1 {6 @) L
if($user == 1) {
- K4 ~6 x% ]: x: y6 iprint("1 user online\n");
3 L, F9 e. \8 S} else {8 o+ |# @4 R/ E5 r
print("$user users online\n");
/ \  s0 n4 C& N7 n1 a+ u- ^}最终把上面代码写成一个PHP文件如下。
9 {3 @+ j: ]2 I0 l, A( M<?php
6 g) ]) P" F3 J$ u' R//Put your basic server info here
- R7 ~6 _, Q# _- f$ o$server = "localhost"; //normally localhost$ l5 P7 d- p; x) ~7 r. D) P
$db_user = "root"; //your MySQL database username& A. b  D5 w  a6 ~! A0 i) `
$db_pass = "password"; //your MySQL database password
( t1 e. U% v# f  k$database = "users";
" k, u( X( Z' y0 s- J; g; x$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
9 t) s1 I; O* n+ U: I: ~0 m: @7 a// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
/ ?: }: G' a$ p; ?/ A7 l// $timeoutseconds seconds)
/ z2 [9 V5 ]+ g7 H$ ~//this is where PHP gets the time
4 `# _- t7 E6 b5 g  f$timestamp = time();; Q& Z# u# ~6 E" s/ T* N' M9 p
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
$ t  U5 m5 j9 X$timeout = $timestamp-$timeoutseconds;  Z' O% Y7 K/ Q
//connect to database/ Y" R4 e1 S% ^8 u
mysql_connect($server, $db_user);3 W/ ^$ \$ ]2 z( V8 G" G
//add the timestamp from the user to the online list
! P3 h' t8 R3 L/ i: f$insert = mysql_db_query($database, "INSERT INTO useronline VALUES; x2 {' A: O+ t3 [
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");6 J0 ]8 w5 W0 f( T! X
if(!($insert)) {% k/ y0 u  I7 A! }
print "Useronline Insert Failed > ";8 K% _' z4 d6 N9 [/ a5 [
}) c- a1 p% D6 S7 |* ^9 Y: I2 M$ d" ~; `
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.! Z% U9 c" e7 K' D% C
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");3 f$ |+ V/ p' v/ E; a! K9 I) n
if(!($delete)) {$ t. ?3 \/ w; c
print "Useronline Delete Failed > ";
6 Z- i# h' a$ e4 g}+ u, W) k' k4 x- \
//select the amount of people online, all uniques, which are online on THIS page; k) ~$ s$ k" a3 R2 c: \( y
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
- N7 _1 q. r$ L8 {: j) C- uif(!($result)) {
/ r- R+ Z3 O' s% Pprint "Useronline Select Error > ";" z% L0 U, m7 O% X% T1 L2 S
}
" a+ @" ^! k; M. b//Count the number of rows = the number of people online
" l. g/ c5 X, d4 ]3 I$user = mysql_num_rows($result);( Y+ |8 `' j9 v  _* }' m
//spit out the results- K8 K7 k1 K  p' P
mysql_close();$ N2 q0 l  c9 B
if($user == 1) {2 P9 [0 h# U% w6 h
print("1 user online\n");* x; p9 Q3 C0 D" o
} else {" P2 a+ J1 E$ f( q- h* {
print("$user users online\n");
( ?7 J5 M# Z, _2 Z7 D0 t% V, q2 I}
) A% S2 v( B5 D1 _/ O+ R: E' S8 c?>1 ?1 d  m0 F, g6 M) n0 ?2 x$ K
- ~! ]' h+ T. C3 _; B- }
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
( m3 ]+ i+ `8 N4 Z" |时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
- [1 @. N% A, }* u我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。. r7 f+ O4 o6 B& [; g
当然啦,这两款主机也是相当不错的。/ Q+ p. i6 U' R7 v( ~
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年4 x; w% [6 L3 ?- H- @- u& Y# W+ p6 K/ R
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年' y- }# j) E" p2 V9 |7 O0 C& x% _1 O
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 4 |) R0 @! N5 O  S' J* m
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=551 I* ^% V" K, M& \: q
自己加QQ去问吧。

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