返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
/ Z6 X4 |3 C6 B5 u3 g我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。( F2 x( {& h+ L, ?1 W" D
首先我创建MYSQL数据库表。
+ c8 t# P, k: o+ ^# jCREATE TABLE tablename (
% P1 k5 h4 W7 u" A( ofield type(max_length) DEFAULT 'default_value' (NOT) NULL
3 e6 n) z+ G+ x  |/ D}可以使用的SQL语句。
8 S& z$ i  d5 Q6 Q5 CCREATE TABLE useronline (0 d0 N4 J* [% S! j$ W
timestamp int(15) DEFAULT '0' NOT NULL,
* `* a- y2 g0 F% r. i- d" d; [ip varchar(40) NOT NULL,' q$ w+ n' C; n: N
file varchar(100) NOT NULL,
; X) `  F7 d! M; tPRIMARY KEY (timestamp),
* h; O! q& p0 g1 v! [9 E5 H$ [KEY ip (ip),3 s/ K; @3 m- s; U- w, \7 ]
KEY file (file)
- }% B, `& Z9 B, m4 n);下面我们是PHP脚本,首先我定义MYSQL的信息。5 K2 a. U. E( q# ]7 e+ O
$server = "localhost"; //你的服务器
) A& y2 _4 D9 T7 d: x$db_user = "root"; //你的mysql的用户名# |" A2 l3 ?+ F- U4 V! o* q! e3 l
$db_pass = "password"; //你的mysql的密码! I9 ~. }4 H7 q& n5 g; b: U* V/ a
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
1 @% l# i2 f2 [$ P6 N7 Q, a$timeoutseconds = 300;取当前时间。; A4 }1 u& g1 T3 L, u% X" `
$timestamp = time();上面的完整代码:
% _  F& ~) h: T% X/ b: e7 I<?php
$ `: P* {9 Q" C" A9 ]$server = "localhost"; //your server
; @# b; w3 S( m4 I; l$db_user = "root"; //your mysql database username
$ d) L1 Q' u/ o+ t# b8 d% _; g  r. v$db_pass = "password"; //your mysql database password if any& l- u( E  h0 T
$database = "users"; //the db name
& f/ ?" M  N1 c" _6 C' W$ ~2 ~$timeoutseconds = 300;//timeoutseconds limit5 f3 T3 P& l) g; B
//get the current time, @2 g4 ?" d+ }5 E9 y2 c% ^  x
$timestamp = time();8 I) M+ m) p: Y) Q) C
//calculate the lowest timestamp allowed
5 g2 c5 T7 j8 t$timeout = $timestamp-$timeoutseconds;; K$ c0 L$ F9 Z; _  `
?>连接mysql% j! \4 J1 c, A' {8 C8 q
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。4 J- u$ T" d/ z+ s7 h
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
7 J) ?2 A# Y5 ^, p1 {: ]mysql_connect($server, $db_user);查询数据库的代码:
! {# b5 `8 \  ~) G; Bmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
) T" A3 T3 {. ^/ x+ i4 p$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
" U5 Q7 {, {# F('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
  \9 Q  Q; A' y4 A如果用户用错误信息的话,这样处理。
% O" h" ]; S: ?% I) h% Cif(!($insert)) {4 L6 _7 J% Y$ U% U; f
print "Useronline Insert Failed > ";5 g1 Y/ K; ~; m' y, O! b- X
}然后实现当超过设置的时间就删除该用户记录。7 P8 M- N; c, J3 Y9 Q
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
- |: L8 x& M  n6 vif(!($delete)) {
2 `# s# `$ ]* Xprint "Useronline Delete Failed > ";
5 Z. Z& E* E6 O}下面我们解决数据库中不同IP的问题- |# E$ |; x) U- s3 y
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用$ p) `1 ?9 q4 Z- v1 B8 `, O
mysql_num_rows(query);来统计用户,代码如下。6 t  I& z  h' ]3 M* C3 w: x: X
$user = mysql_num_rows($result);最后关闭数据库。- W1 t# _' h, f$ W2 C$ s( f  C
mysql_close();显示在线的人数。
. f3 S( x. ], f$ hif($user == 1) {  M4 i' G; _1 C' W& A1 }- b5 ^3 J8 E
print("1 user online\n");" W7 J! S/ }$ _: B, l( [
} else {
: }# ]3 v0 ~3 B! J) f! R4 ]print("$user users online\n");% k# l9 J% w9 w. e; v" ?) H
}最终把上面代码写成一个PHP文件如下。+ E7 g- i2 ]# {9 R1 v2 U7 F) ?+ V
<?php7 z' X' ^- ^9 L9 R2 x% j
//Put your basic server info here
3 L0 w+ Z9 r6 M9 J4 c- ?$server = "localhost"; //normally localhost
' L# b0 g5 H  c- @$db_user = "root"; //your MySQL database username
* y  Y0 j# `! P- D- X$db_pass = "password"; //your MySQL database password. R3 ~" F& C6 `6 q! i
$database = "users";. Y7 P0 n3 s9 i" \. |( x8 L
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
  c" ^- e+ w( q9 V3 ~) ~' s// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
! M0 W/ r- z4 H) z; L0 }// $timeoutseconds seconds)" S. n- L$ P% K) j! R4 `
//this is where PHP gets the time  O6 v8 k# p. J% n
$timestamp = time();3 L2 w4 \5 i8 g
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
6 z. f+ s8 o& V4 F$timeout = $timestamp-$timeoutseconds;
5 e( h% Y6 m1 }. w& j1 _3 t+ s% y//connect to database% `2 t/ p0 M8 ~' z$ D
mysql_connect($server, $db_user);6 F" o, u3 _9 H6 p8 B
//add the timestamp from the user to the online list
2 R. v2 e7 E, Q# e$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
7 E9 K6 d: d) ^' h('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
. V$ l3 s3 K6 B, B1 C" J8 b( p0 Lif(!($insert)) {
9 Z/ {0 u8 m6 ?3 t  Y0 V3 m( j# F+ q; Wprint "Useronline Insert Failed > ";  Z+ h' F' K7 O2 o2 P( j; F% a% q
}0 B  o% l/ y9 v" [5 Q
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
4 a  S1 Q2 ?2 Q* T- a: I- k) O$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
8 q+ r$ U4 m$ S- pif(!($delete)) {
# w, L: v, v9 r; }5 w: iprint "Useronline Delete Failed > ";
2 f/ f# p, R! W  }- F  X}9 O& b& f1 C& n8 P! l0 U
//select the amount of people online, all uniques, which are online on THIS page) z2 t( m3 f& n' E' H+ ^' S3 [! u
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
2 m  t9 x3 @4 s8 }+ }7 w! \7 |+ Vif(!($result)) {0 p$ q$ k$ ^+ u% k
print "Useronline Select Error > ";' v1 @9 |! A7 s' f' j
}
& e/ {3 q) s( J) R' v' S. z//Count the number of rows = the number of people online7 I! ?: X  W7 B4 y! F8 A& z3 d: F
$user = mysql_num_rows($result);
/ c5 m0 a8 [, f//spit out the results0 J5 b: ~( F, n( k) E3 n& t
mysql_close();
* V5 F$ R' D: o* F( @# ~if($user == 1) {8 [+ i0 C- t& k
print("1 user online\n");6 H( z) R; P$ @2 Z; |: ?
} else {! ^! [+ J/ c! x( N3 e! e( ~6 M9 @
print("$user users online\n");
: k' j% i  h% c! p0 O6 k, N8 P}. {" N8 N& z6 Y# |+ x( n
?>
0 z0 A( i' j0 m- S
2 q; m8 h  D* Z) \! e3 w以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。& S4 l$ e1 I" E) p3 j. w; s' Q+ X
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
+ J9 {0 r( \! X+ c9 Y# _! \我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
  z3 C! [0 N  o7 ^! `5 ]当然啦,这两款主机也是相当不错的。2 L: H6 E+ I& j. r! M0 T
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
4 ~7 H9 h0 F8 v; |8 D+ c标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年/ J# t* A7 U8 ?, t" A- F
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
7 b3 p" ]0 d6 Q. \* f* ]空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55( M( n- w: |1 q; J: V1 R- b
自己加QQ去问吧。

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