返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
6 y) E& S4 `; Z  b* `# [我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
) {: W1 m0 H8 v4 p0 @6 `首先我创建MYSQL数据库表。
8 e' q; V4 }4 M- ~CREATE TABLE tablename (
( ?; N; a' B6 pfield type(max_length) DEFAULT 'default_value' (NOT) NULL
8 ~' c% G4 h1 q) O9 o}可以使用的SQL语句。- z5 i4 D5 U6 U6 R3 b8 q
CREATE TABLE useronline (# u1 E; k% S0 b! V( M+ G
timestamp int(15) DEFAULT '0' NOT NULL,
- m- @$ k  z' o# f% y8 uip varchar(40) NOT NULL,
* i* K8 @1 g/ |/ ^; A; d' n! h: I7 Vfile varchar(100) NOT NULL,
; ]. F3 g( b4 j+ fPRIMARY KEY (timestamp),8 X* ?' T$ E3 U1 t5 i0 Y
KEY ip (ip),
" m! x# ]& q! a3 RKEY file (file)
- K& Z/ ?. c1 h" ?5 t( P* F);下面我们是PHP脚本,首先我定义MYSQL的信息。% o0 g# s0 G9 p. q7 a$ o  V% S
$server = "localhost"; //你的服务器
5 H& w9 I( r5 a* Y, z; U1 y$db_user = "root"; //你的mysql的用户名
+ F4 K9 R/ @, f4 O5 {4 u5 q$db_pass = "password"; //你的mysql的密码2 h! v1 u: \5 `
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
9 h1 d  {/ |  u$timeoutseconds = 300;取当前时间。
( |9 z% e- z  v8 j; \5 L: j$timestamp = time();上面的完整代码:! Z& @% |; W2 c6 E3 w+ Y
<?php& g) H& ~% a$ d/ O/ Z# R, j9 ~" k
$server = "localhost"; //your server) ?1 y0 V- z4 K7 g5 D0 O+ C% L
$db_user = "root"; //your mysql database username
) }* X' J% t+ |0 [$db_pass = "password"; //your mysql database password if any2 S& j5 I- g! ^/ D. f6 q# R
$database = "users"; //the db name# ^! h9 `7 ~* n' u/ n
$timeoutseconds = 300;//timeoutseconds limit
8 T. o- J% [! b8 L$ N% `//get the current time
( `. r3 v% t- |1 f' K$timestamp = time();: C6 U! ]4 V3 F9 M
//calculate the lowest timestamp allowed
. G) x$ q2 q6 x$ s+ X& u$timeout = $timestamp-$timeoutseconds;; {2 E+ k0 }( z: x! T8 w) W
?>连接mysql
' ^6 O# o* X# D/ C" g! ]0 smysql_connect('localhost', 'username', 'password');也允许使用变量形式。- S, J1 d# `& d6 G) E# ^) K
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
3 B1 ^( r7 R! c) g  k7 m( ~mysql_connect($server, $db_user);查询数据库的代码:# L- y3 B% h" l4 s# n5 H. j% z
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。1 T+ u3 B" P3 ?& w) N, s
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
! c; l" @) H" U('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");& r; ~& E5 b' k, \" g  c. H& U: J/ B
如果用户用错误信息的话,这样处理。+ M; R$ r. f- K6 ]3 y8 E
if(!($insert)) {, w9 v/ }% l/ V' X7 m! N$ O' _
print "Useronline Insert Failed > ";
+ w3 p3 }7 Q- j5 q; a- |}然后实现当超过设置的时间就删除该用户记录。
6 u1 B( Z3 H" O  ?( C/ g) f$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
4 h, E8 p/ J/ q! c% aif(!($delete)) {
  M6 c1 W; o# _: d% Q" Rprint "Useronline Delete Failed > ";
, x6 f3 @2 s  N1 p1 F+ j}下面我们解决数据库中不同IP的问题
- \' w# p0 v4 w5 J$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用2 x8 e& q8 e5 h- T
mysql_num_rows(query);来统计用户,代码如下。
3 S( J% H8 c3 e( C% a: n& b. _$user = mysql_num_rows($result);最后关闭数据库。( S  S5 a0 n1 |4 k
mysql_close();显示在线的人数。$ o/ \) w- s$ d/ w+ I5 `
if($user == 1) {
1 O; c' V3 S& u# e4 `# @7 eprint("1 user online\n");9 F  S3 [& z! ]; N( p* x
} else {0 k: A1 z7 E9 W
print("$user users online\n");
+ o# v: b, K9 P: }- `# ?+ m}最终把上面代码写成一个PHP文件如下。5 _: E5 q+ o8 p5 V' U7 B1 F- _+ \6 l  z
<?php1 w0 |2 \2 A% v
//Put your basic server info here( W' p5 H' n' r1 K2 O0 K/ d) Z7 a
$server = "localhost"; //normally localhost5 A& ]2 ?; P6 W: l
$db_user = "root"; //your MySQL database username
" h2 {  d4 G1 S+ }( k2 ]$db_pass = "password"; //your MySQL database password+ X# w- D/ l- l, N' p
$database = "users";
$ g" |" h0 @3 `2 [" L$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are- m) U  }- H( m2 y7 D
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
0 f, S4 E* M& Q4 x9 D8 l2 S9 W5 ?// $timeoutseconds seconds)
( ~* m0 E# ]" X- s- b* \+ C( T& K//this is where PHP gets the time
: f1 i. t) }8 u$ J) N: U$timestamp = time();) J$ }" R* m" B1 _' `
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
* v' g. T. Y$ N$timeout = $timestamp-$timeoutseconds;9 U  ?. ?1 j) w& q; Q, @
//connect to database7 I+ a4 Y% I8 p& {2 Z& x6 S+ ]
mysql_connect($server, $db_user);
# R+ e7 G6 _9 U6 A: v! \//add the timestamp from the user to the online list8 @, O/ \7 t. X7 _+ A
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES8 v6 u6 \1 V! s3 N3 C
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
0 g5 M" M- x2 Y7 e- Gif(!($insert)) {$ ?* A. _5 F9 l$ T3 P. n: [& M
print "Useronline Insert Failed > ";. A) n9 x. }+ L# o
}
8 {7 V; V$ N8 p. d, C//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.' D" P* {4 }; m8 `( e! l/ ]9 J
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
8 j: y3 \" i; y7 ~6 kif(!($delete)) {7 ^7 ^% F4 V1 l- [/ `4 }4 F5 S
print "Useronline Delete Failed > ";  f8 Y; }0 v% B8 G3 C8 {
}% ~; ^  |+ D, D
//select the amount of people online, all uniques, which are online on THIS page
$ b! y6 H* n4 P7 H. N4 o$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
$ N+ K; i5 M1 J2 u. V, U" Cif(!($result)) {
+ ?8 y$ X: C! u2 R% L* nprint "Useronline Select Error > ";5 b7 d5 {# _4 R* q% d# k
}8 {# U/ x. d! r- |! `
//Count the number of rows = the number of people online
# x1 O8 a( l+ \* x' {$user = mysql_num_rows($result);
$ v2 L1 \) I, t+ ]( t+ \; x//spit out the results
3 n* I  X% a/ b5 y* @2 |7 \mysql_close();
9 a2 Z" }, N! }0 a/ K( ?5 nif($user == 1) {& V, m' E& C, `2 d3 Q
print("1 user online\n");
% ?. ?% Y; I# C$ Y} else {- f9 b. x0 ?7 R( F- a' d
print("$user users online\n");
" l$ Z2 P0 v7 t, k4 e: f- Q" y}: \( V0 i% F; J2 I( N+ }- n; G# B
?>
8 |, Y% W/ N8 K8 H- N+ J5 J4 g  B  D
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
1 M% ]4 y$ |* n9 S4 |; H时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。) Q' q2 h2 @* n$ J5 Q# w
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
2 ~7 [4 T9 b9 Z, w+ {当然啦,这两款主机也是相当不错的。1 e% N" W: F- _# P
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年" M7 _: ?, e: R2 Y4 d  T0 F
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
2 K& F9 |% e9 ?! y提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
  a3 ?+ n9 u2 w% o空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
3 j/ `' @5 F8 F4 h2 @# |自己加QQ去问吧。

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