返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!  X. `+ |' F* @7 m( ^: M
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
/ D; z/ h4 L' W' h- i' G3 O首先我创建MYSQL数据库表。: O/ B9 Q# L2 \9 D
CREATE TABLE tablename (1 H# K, {1 K4 [# F# I/ i; }
field type(max_length) DEFAULT 'default_value' (NOT) NULL
* A7 z2 K! g$ M; }: B+ ^5 q}可以使用的SQL语句。( {0 m; m: ~1 @0 C3 i( d/ T% t
CREATE TABLE useronline (
  Z5 X) e6 y: o& Z' s, j/ }" Utimestamp int(15) DEFAULT '0' NOT NULL,
2 E8 ]% y3 O1 O# v  k9 V# [ip varchar(40) NOT NULL,
5 H1 |& A& t0 _file varchar(100) NOT NULL,
, O5 H# i* g( g: f- N) pPRIMARY KEY (timestamp),
% r  Y4 V4 G/ eKEY ip (ip),
- _. W3 b$ N9 L% V7 yKEY file (file)
) O: g: n. o$ t# U; L& v' P);下面我们是PHP脚本,首先我定义MYSQL的信息。* a0 I! s: x% P; ~
$server = "localhost"; //你的服务器
$ W4 M- d, r4 Y) [. q) @$ a. i; k$db_user = "root"; //你的mysql的用户名1 A+ u5 J. i6 ?7 x
$db_pass = "password"; //你的mysql的密码( P3 D( v' A, G" f: K
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
- j6 X- h  J* W# [$timeoutseconds = 300;取当前时间。$ N! A; d  @4 L* [
$timestamp = time();上面的完整代码:
& L+ M. d2 T+ ^, ^- V* d4 ]+ L<?php6 A) T8 r( C' E% m5 U; j1 P3 B( c
$server = "localhost"; //your server
* g, d4 I) I3 j. S! w% J  q2 @$db_user = "root"; //your mysql database username
3 U, t# J% S2 T+ T  i$db_pass = "password"; //your mysql database password if any5 s& _1 v4 e5 u* l& ~# S$ h
$database = "users"; //the db name
, L# H3 h5 E) f7 \6 K# `: i$timeoutseconds = 300;//timeoutseconds limit5 D5 D. G$ R8 L& n0 _( d+ o/ E
//get the current time
9 R3 g+ F! S! l$timestamp = time();
/ ], R6 _; P7 m/ v. Z//calculate the lowest timestamp allowed
% o; X1 ~9 o/ D# \$timeout = $timestamp-$timeoutseconds;
4 A& n, U8 g7 b  N?>连接mysql6 v3 c- G: p5 _' k$ M& i
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
7 c& M# s' P2 g4 B: B& v  o$ wmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
+ H! U0 L1 W3 `/ l! Tmysql_connect($server, $db_user);查询数据库的代码:
  L6 T! T# x; {' dmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。- A- z4 G8 a' e- ~, e* j
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES! \* w4 ~" R3 u1 Q, k% S
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");; w4 h9 x- K; T5 M+ U
如果用户用错误信息的话,这样处理。
" B3 d9 U* A: c" W2 y! O4 Fif(!($insert)) {  Z1 ~5 F" T$ L' w
print "Useronline Insert Failed > ";
+ G: f$ e4 M# i( h5 N6 n( k  A8 p}然后实现当超过设置的时间就删除该用户记录。* z  u; l+ V% K" C" X+ b% r! M
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
' h- `' t9 D, x' C, [( W2 x) nif(!($delete)) {
9 }" m( m' r) b5 q7 e# Xprint "Useronline Delete Failed > ";. _7 W. S' z! I  X8 s/ C
}下面我们解决数据库中不同IP的问题
7 m! Y: `5 C6 V" }8 Q/ w/ G$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用  y3 s( r$ V+ x% O; Z* Y5 q
mysql_num_rows(query);来统计用户,代码如下。* J2 J1 _) U/ L  R  p+ e+ i
$user = mysql_num_rows($result);最后关闭数据库。
& A# s' R- B7 p. T4 D& Q" _mysql_close();显示在线的人数。
3 {0 @& z, U$ ?) \2 G% Rif($user == 1) {
/ Q2 i* o; \, y, }/ s1 D# iprint("1 user online\n");
- ?/ N  [4 u! v- Z# F9 h} else {& M* I$ z9 v! Z4 B' r- P& c
print("$user users online\n");
- D4 o+ x; Q1 G" [6 s5 j}最终把上面代码写成一个PHP文件如下。3 N; @4 b$ @( W% P
<?php
2 D' G' b5 ]* q3 a. g- f//Put your basic server info here/ {7 i7 i; q3 R( ]2 w7 @
$server = "localhost"; //normally localhost7 ?) ^: _6 v& e3 p+ `9 F% e) ]9 h
$db_user = "root"; //your MySQL database username7 g' y) a: a; F9 {( D( M& }
$db_pass = "password"; //your MySQL database password
% W' P3 s5 s6 Y' t$database = "users";
+ g- V- U! O& N1 v2 Q$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
: s. m& p- U. o" k// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last1 ]$ {. X& w$ c6 D: v$ C
// $timeoutseconds seconds)
' I( B; _) d9 [  t//this is where PHP gets the time
! U% I( G( @8 \! c6 T; c- b+ R/ f1 u$timestamp = time();( N& R: e- w" ^4 ]! h; [# ~8 n- u
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
; M- J9 Y; D* B! k( {& r# ^$timeout = $timestamp-$timeoutseconds;
) ?6 ~& _" D+ ~- v$ w2 q+ c//connect to database  t  y7 M4 ]& B: ?. ~
mysql_connect($server, $db_user);
- q- m6 w- x, J9 p, d0 H- y//add the timestamp from the user to the online list
" T- p  N' d3 A7 P, `$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
# r5 b$ X: P* O" g: P('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");6 S$ K; s4 M, U2 V
if(!($insert)) {
! I, r, Y8 P9 r6 o/ w; q* r3 S/ N. q! mprint "Useronline Insert Failed > ";
* l* n) h) B9 D* X}4 ?9 |7 t0 d2 e
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.1 x& G+ ?7 |4 Q" u) N$ h2 a; c  @
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
2 O+ m! V* I/ r* i7 a1 B! dif(!($delete)) {% _' b2 b3 r4 Y: F
print "Useronline Delete Failed > ";
; t& i. ^4 S8 I& q}; S; s  F& I- [5 i5 v  C  M
//select the amount of people online, all uniques, which are online on THIS page/ J" F/ |% ^+ H6 H$ W; E. W" {
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");/ S+ v( y  L- G% s
if(!($result)) {& |% ~: i( b- ?% q1 l
print "Useronline Select Error > ";) @$ V- H. }8 y' a1 {3 O6 O( b
}& |+ l* P% }6 _, g6 s
//Count the number of rows = the number of people online' m% M2 v/ h3 |# B8 i" x: @. I
$user = mysql_num_rows($result);
5 C' j5 _( w* x* j( l" ]  F//spit out the results
  j6 W2 l0 i; I5 c" H* A$ hmysql_close();
8 W( m  m6 W- X6 v* vif($user == 1) {4 r! e% A9 O5 q* O
print("1 user online\n");
- |7 i, [, m: q3 m6 M} else {/ @6 K- y6 O. ~) z
print("$user users online\n");
" b% n" E! Y& N6 K0 ~}8 M# j" B# [, s3 U' C5 i
?>  z$ [) Y$ M& F% E0 n, w

$ R! Y  \& k0 c8 {) m' u+ r$ x' `以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
& c$ b5 W+ ?! }7 \& W! g时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。; `" z+ n! |$ v
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。7 b# V4 t( z0 p. g6 h  e. t
当然啦,这两款主机也是相当不错的。+ o; N  U  O  O
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年1 l9 G  M& w) Y8 p# ~0 _
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
: k6 w& k) Q. G/ S) s$ g4 t提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 2 B0 H2 X3 S0 E+ {5 U$ h5 P( f
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
6 ^! H* E/ Y5 H! M7 _$ q# E自己加QQ去问吧。

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