返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!. ]1 v4 e# N4 F1 d8 K- ?" Q
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
6 Y- Q/ d" x7 d1 ~9 n& F9 j  q) v首先我创建MYSQL数据库表。! _" @9 K3 i# r0 n; Q$ S: n
CREATE TABLE tablename (
+ Z' u) A1 v! b* e: E' yfield type(max_length) DEFAULT 'default_value' (NOT) NULL  }+ h) g& {8 @& g6 `
}可以使用的SQL语句。' J8 t% \( e6 ]0 }+ P
CREATE TABLE useronline (
. Q: i2 W2 r# B3 p" R2 s7 Wtimestamp int(15) DEFAULT '0' NOT NULL,: m1 c& \! s# m7 K' ^. o. c
ip varchar(40) NOT NULL,
( r- X# P3 C: L$ ~4 |file varchar(100) NOT NULL,
2 g* Z/ r+ o' \: c* A2 y9 v4 p' S$ h& DPRIMARY KEY (timestamp),3 @; i/ ^2 y2 M
KEY ip (ip),
, r0 y( m( h% |; H+ x! K8 B, r/ }; s; HKEY file (file)' U) X7 F: }6 G% U7 h8 o' |
);下面我们是PHP脚本,首先我定义MYSQL的信息。
5 ~1 E- c9 r1 ^3 {$server = "localhost"; //你的服务器
' I, D/ y/ `/ g  D' T$db_user = "root"; //你的mysql的用户名2 w) k2 J) `: J5 @0 h
$db_pass = "password"; //你的mysql的密码  v) Y2 k; [% t7 R
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
3 i5 j2 l: ^. X8 R. P$ B+ ?8 K$timeoutseconds = 300;取当前时间。
4 y- W& D% D; D+ C; O3 d2 b6 s$timestamp = time();上面的完整代码:: T7 X+ C/ c$ ~. L+ O9 r( [
<?php$ ^% g3 ~/ S+ X8 z. i( e
$server = "localhost"; //your server
+ k9 J6 N5 W' ?$db_user = "root"; //your mysql database username: N9 }4 i2 ?8 ~+ m& O
$db_pass = "password"; //your mysql database password if any
' L6 |7 E  ]/ g- x$database = "users"; //the db name
9 O$ g% s) p" e3 V' U5 T/ ]3 _$timeoutseconds = 300;//timeoutseconds limit  y& m/ D9 T8 S! h0 [& F# I
//get the current time
% T( c) v1 W. l- F* s* n$timestamp = time();2 x. ?' a. w7 Q
//calculate the lowest timestamp allowed
2 g: W' K' ^$ Z1 p# M  J: X. h$timeout = $timestamp-$timeoutseconds;$ V! x; y: M( R7 ^% j8 n
?>连接mysql
  e/ v6 `$ a! p; Umysql_connect('localhost', 'username', 'password');也允许使用变量形式。
! r3 h: I6 V8 U2 d& v1 S3 v) y$ Xmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
' R8 v7 N3 R" E6 S( _7 @" i. J$ Fmysql_connect($server, $db_user);查询数据库的代码:
. A* Z. B  n& W& d! ^% C1 G; Omysql_db_query('database', 'query');我们只要有访客就要增加一条记录。0 D  Y- @; d; P. b2 a0 }3 V
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES/ c; w2 `! o/ W) Z1 t1 s9 W
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");. `) e* V+ Z8 D# v' a
如果用户用错误信息的话,这样处理。
7 K9 s0 Z: b2 L9 u0 Xif(!($insert)) {
, K/ |% D& g& j  t4 Hprint "Useronline Insert Failed > ";
+ J2 _0 U6 G: z% H: p( h1 M4 @}然后实现当超过设置的时间就删除该用户记录。
7 c* U7 x+ N; i; }, n9 e$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。1 A: E* ]. u# R$ n8 F
if(!($delete)) {9 f* d! q' X" @
print "Useronline Delete Failed > ";
* W' T  K2 e8 ]' f, Y7 O$ ~}下面我们解决数据库中不同IP的问题
. N7 v! ?! T" l' d/ u$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用3 S9 P& q* c) B/ h: Z+ m2 q1 r* e
mysql_num_rows(query);来统计用户,代码如下。
$ F+ j8 |$ f6 D" k( G! Y6 E$ ~$ ^$user = mysql_num_rows($result);最后关闭数据库。% x! F# m0 g% ]
mysql_close();显示在线的人数。! H' b/ z# |. Z* N/ ]2 T# v4 I
if($user == 1) {# P1 N1 x, [7 i0 ^
print("1 user online\n");
2 i1 |8 Q4 N5 E0 f/ ?1 _! m} else {1 E4 n( B4 Y( H
print("$user users online\n");" j- S6 c1 W/ s2 _" J4 {, X8 f1 U
}最终把上面代码写成一个PHP文件如下。
4 }4 Z8 }6 b# D( I4 o5 G<?php
3 A0 V4 z9 l1 H  z6 H# o, i//Put your basic server info here
* B6 \$ z& x0 X$server = "localhost"; //normally localhost' e9 H8 e  z' X0 r, m
$db_user = "root"; //your MySQL database username6 [8 R3 F9 w& L
$db_pass = "password"; //your MySQL database password
6 j3 ]5 W8 k4 p$ ^$database = "users";
) v# v5 p6 L) |1 i) M8 K. v$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are. U# n# R) W# V$ ^8 t
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last$ T" B( W, ]% J/ g2 L/ a$ Q2 o" i3 G
// $timeoutseconds seconds)
2 J7 d3 u: |2 r4 p//this is where PHP gets the time
8 t+ p) g% |+ ^& [1 l$ o0 `) X$timestamp = time();! n, M  u' i2 S- i- }% H
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
. I( p$ [9 R7 v0 u% c' d1 {$timeout = $timestamp-$timeoutseconds;
  J7 m" S, N* e7 N//connect to database9 r8 k" T4 v: k2 M
mysql_connect($server, $db_user);+ ^. J5 L# r4 j, N6 K# p& K5 v' q
//add the timestamp from the user to the online list
9 V, |% A5 r; }( u9 r- w9 J$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
9 c. n1 c$ H: M8 h, K5 p('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
* K8 J0 T& Q, [; H) h% Q+ ~7 kif(!($insert)) {
( b7 a/ |9 g  Y: hprint "Useronline Insert Failed > ";/ N0 Z/ E) P9 t: b! T1 W
}5 _( N9 h, q6 ]; Z5 q+ e/ V+ \
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
0 Q# p: A5 z6 |" @: `: N$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
) x( Q9 W3 H$ _9 `0 Lif(!($delete)) {
& i. z- n9 v( @' d' ^4 lprint "Useronline Delete Failed > ";* B+ D4 K+ r# E! @" b( M' O9 v/ E
}
4 l- [, I0 p: Q* O; p3 ?4 a//select the amount of people online, all uniques, which are online on THIS page
6 P7 f; M% v# p3 M$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
* J/ N" d) O: b8 s6 j; Aif(!($result)) {' v6 ~% S" p2 O2 V5 q! h
print "Useronline Select Error > ";
4 n" g/ \7 [8 t* }1 \6 S* Q}
, @4 g( U4 W+ X& r' D) J//Count the number of rows = the number of people online
7 l, g7 V% x% U$user = mysql_num_rows($result);( t% e9 z. e' x* t( a8 V
//spit out the results
4 A8 G+ V% C& _! H. x# wmysql_close();; M) u* u( Q8 i+ a) L. f  V# ^
if($user == 1) {3 [) R7 l2 C' j  c6 A
print("1 user online\n");
1 `) v2 h7 e( Z. t} else {
8 c: l, C0 v/ t/ x# A- yprint("$user users online\n");9 [, Z3 d0 A  A  ^
}- _  y6 n% U& @
?>
9 q4 d, B: n* Y) z0 a5 y+ Z# P' @3 Z, m" s/ ^- t7 J
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
& |1 w! N" K1 M: m  |4 a( U时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
: Q3 V  d. {4 J" y' {5 q我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
1 a/ B$ M4 N$ ]1 M6 T+ x6 Q当然啦,这两款主机也是相当不错的。
4 ]1 d% Z: C2 }" d2 Y" r: W智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年0 E& p# _+ `9 E9 c' O: {6 v
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
# p# G1 j& r  f6 H( g0 k' {提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 2 l' |$ @7 {; L7 B# A. w3 L
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
* A* [/ }4 P. d自己加QQ去问吧。

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