返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!3 a" X/ ]4 X' J/ m" _$ x  h( F
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。7 }6 w5 g7 s$ A
首先我创建MYSQL数据库表。
7 u. C$ d! ~- [CREATE TABLE tablename (+ X* F& H/ ?* \5 s" u2 t) b
field type(max_length) DEFAULT 'default_value' (NOT) NULL* m4 z/ ]2 y: f( I
}可以使用的SQL语句。/ J4 b( c8 Q" a' P/ r
CREATE TABLE useronline (# f! W5 v* Q4 H) U
timestamp int(15) DEFAULT '0' NOT NULL,! K+ k2 c/ z# U
ip varchar(40) NOT NULL,
+ ^0 y9 ]" P8 \) G9 ^5 Qfile varchar(100) NOT NULL,: B9 M- N5 x" |5 c
PRIMARY KEY (timestamp),9 j1 t9 V5 _$ m: _
KEY ip (ip),
# J7 T& o$ T6 Z* S( W7 T+ SKEY file (file)1 a/ M& J: ^5 _4 |
);下面我们是PHP脚本,首先我定义MYSQL的信息。
; a. {1 |8 V$ B# W4 ^! J# L$server = "localhost"; //你的服务器
9 Y3 \. y1 r/ Z9 P4 ]$ m- U* ]+ j% Y$db_user = "root"; //你的mysql的用户名% I* i: e$ a+ P! {' \
$db_pass = "password"; //你的mysql的密码# H9 G4 X  c; h
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
% }6 _" ~$ M4 q5 }. [% w$timeoutseconds = 300;取当前时间。
9 i+ g& ^, z8 q# s! m7 A7 Q1 t# z# G$timestamp = time();上面的完整代码:
+ l4 U% q( ]3 \  r5 H9 H2 e  \<?php
$ e0 q/ A1 G/ E! I& p+ d$ t; l8 e& t8 Z$server = "localhost"; //your server' F$ E0 Z' I  K+ u$ V' p, j
$db_user = "root"; //your mysql database username; x* I. e: G: t- }  v
$db_pass = "password"; //your mysql database password if any
. ^) L8 K. m8 D4 B# _0 o$database = "users"; //the db name
. _6 m3 o, o- M3 u+ Y$timeoutseconds = 300;//timeoutseconds limit
& o" r8 b# E" Q  w7 D7 [" C//get the current time
7 a( N2 L7 O" ]0 W! C$timestamp = time();
/ Y3 z; E% v. e1 x' Q  c//calculate the lowest timestamp allowed- Y9 n0 e8 r" U" X! w
$timeout = $timestamp-$timeoutseconds;2 j' p8 l) p0 R' c( s' L; C6 l5 C/ Q8 h
?>连接mysql
) e% S( t0 X8 R! l. }; l. C3 jmysql_connect('localhost', 'username', 'password');也允许使用变量形式。; C& E  A9 c7 x; c
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
9 C' ]1 y. I2 Dmysql_connect($server, $db_user);查询数据库的代码:
: q0 X4 e# ]+ v$ [, vmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。! T" ^( z5 o/ F7 ?: `  G4 e
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES4 A) s6 ]4 i1 O. y" F
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
2 F5 _4 ~1 B4 D0 S9 J5 K6 B如果用户用错误信息的话,这样处理。8 L$ ~' b4 I. l' Q1 F/ q- Z: i# y
if(!($insert)) {: F+ B0 Z- |# y# E
print "Useronline Insert Failed > ";
3 K1 ~" V0 P1 m' g" v* A+ g}然后实现当超过设置的时间就删除该用户记录。
5 J+ M) N" t7 a" z" |$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。6 y! \8 U& o( v1 H$ K3 E
if(!($delete)) {3 C* h$ ~0 Q( A* t4 x
print "Useronline Delete Failed > ";  f6 \4 o& M7 d7 y% t+ v
}下面我们解决数据库中不同IP的问题  r! R9 i' x1 r( Z: m" m
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用& v( r6 j9 @% ~; P1 n1 a
mysql_num_rows(query);来统计用户,代码如下。8 H( h5 v- n% x
$user = mysql_num_rows($result);最后关闭数据库。
: ]/ T$ {9 Y2 @mysql_close();显示在线的人数。
9 i) ?; ~8 a, g9 |& {if($user == 1) {
  T6 X/ L6 Y5 _: ?print("1 user online\n");
( i) }. X& P2 R* u- H& s} else {
  _; D. [) y: q' z8 V; A( M1 X$ Nprint("$user users online\n");
8 |- _7 T$ B5 x/ J$ b}最终把上面代码写成一个PHP文件如下。
- `' u. Y' R2 w( l/ x4 S% o0 W  M<?php
, U& n* Z0 X4 p( c7 Q  \//Put your basic server info here
+ J) \7 f8 ]5 Z2 b# V% r! ~0 V$server = "localhost"; //normally localhost
, ^, y$ u4 g8 o" s; s% s$db_user = "root"; //your MySQL database username
5 R( ?/ C4 q  c; \( s; A$db_pass = "password"; //your MySQL database password6 u* ?! u( E' H7 {  Q6 Y$ ?
$database = "users";
6 h) [# W, |' x( B6 O  B: f' ~+ b$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
0 t; m, L4 c0 R  N" m5 T4 n// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last% D1 A2 j' r' S# o
// $timeoutseconds seconds)- g" e# O5 E4 u/ n, E0 x
//this is where PHP gets the time: K- ~- A" T, U$ }0 d
$timestamp = time();  T8 t! ^6 @2 T/ U- H: Q
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed% t( q0 v, l' s6 r3 t) x3 U  p5 E
$timeout = $timestamp-$timeoutseconds;% }; u' ?0 P; H0 v' m" `/ c
//connect to database
+ n. R% B% n+ t1 Z( D9 \mysql_connect($server, $db_user);% `% b0 k, ?6 S/ e* X
//add the timestamp from the user to the online list
0 t2 @! v2 q2 U! {' B3 y' n) q$insert = mysql_db_query($database, "INSERT INTO useronline VALUES' I5 f; R- [# G  V8 k$ R3 S
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");, c$ q) z8 Q, D) @% I# }( I9 x/ c
if(!($insert)) {9 u( R; O+ w8 P& g/ J
print "Useronline Insert Failed > ";8 K3 T# d2 A7 x
}5 U3 l/ p) y) w
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
# ]+ `+ v6 \% }4 B& v$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
. S! J% _; \+ E! c3 ]. n( _if(!($delete)) {- [5 p3 e& U0 C) }# ^0 Z4 _
print "Useronline Delete Failed > ";
& n( X" s" G1 L+ U}
- {' R) r' Z2 n; ]8 z1 ?//select the amount of people online, all uniques, which are online on THIS page
6 V2 e3 m7 c- ?* E& T, ]* a: |$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");4 s( r3 h5 g- j! w
if(!($result)) {
) Z" Y! a3 J- x( x" Eprint "Useronline Select Error > ";
+ Y: P' x! P$ a8 d1 b, U& F$ ~}9 g( S) k/ Y+ K: i% I! i& Y7 e! q  p
//Count the number of rows = the number of people online% p6 P2 H0 x7 ~* m& c) n
$user = mysql_num_rows($result);- M3 T! B1 r. I) F
//spit out the results
" ^- v, O2 B% M" R% p3 lmysql_close();
8 x; ?( I9 F2 T, t  ]4 m8 W0 Aif($user == 1) {
+ j7 S" i8 a6 G6 B9 |, ?' a9 G  U( xprint("1 user online\n");2 r7 u9 T; [6 c. q/ i8 p
} else {8 ?& W3 X8 t# [5 }( t
print("$user users online\n");
1 y, A# H6 ^) v: U# \0 R0 ?}
& p- j0 I# r+ G: |8 X3 `?>- s6 h  g2 @/ t
! i8 Y; C, J4 a3 ]& x$ z
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
: B; Y( Q$ L* g% C6 Y+ {. E! J时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
$ D: h& T+ W5 `+ a) ~5 M  K我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
6 y: }. i# ~4 t* `1 R当然啦,这两款主机也是相当不错的。9 `0 t% K1 G% l, [8 K2 h/ {0 y
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年1 h3 u; w/ v" |- u7 y" k
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年1 D( I  q( G2 t3 E
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ / N) U" X% `6 a4 U
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55/ r$ {" r$ |" D3 y
自己加QQ去问吧。

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