获得本站免费赞助空间请点这里
返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!+ P* Y' L/ T$ a, b- w
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。- G; l, `* G  _& M
首先我创建MYSQL数据库表。+ t4 T' K1 v0 C2 @% O
CREATE TABLE tablename (
& e% w4 @" B( \( Afield type(max_length) DEFAULT 'default_value' (NOT) NULL( p* }/ v0 L" B2 H8 O  i
}可以使用的SQL语句。# T# b- _( Z5 @; v
CREATE TABLE useronline (' [/ u* \0 K0 `6 q2 C
timestamp int(15) DEFAULT '0' NOT NULL,
6 |) H( n5 |$ \( e+ yip varchar(40) NOT NULL,
! D$ d* C& i: T- z- d6 G; mfile varchar(100) NOT NULL,
6 ]1 N( H, k. v5 e: [3 u# M* Y- aPRIMARY KEY (timestamp),
0 x# Y3 e' _8 OKEY ip (ip),3 N4 X0 n3 P/ s6 n) Z7 q
KEY file (file)+ q/ s  H. F1 n' l' T. _. A
);下面我们是PHP脚本,首先我定义MYSQL的信息。( E, ]0 R( R* t8 {% v
$server = "localhost"; //你的服务器
; r$ E$ Z" w5 a- m* W% r, `3 m$db_user = "root"; //你的mysql的用户名) V! _! @  w8 V1 j* k7 u. w$ M4 A
$db_pass = "password"; //你的mysql的密码
1 y! b& r- v; K$ S$ q$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)/ c' L8 [9 s7 Z0 Z
$timeoutseconds = 300;取当前时间。6 B- e3 g5 Q) C: h0 z- k
$timestamp = time();上面的完整代码:
5 p! o5 V+ u7 h" i8 K<?php
8 K8 b0 Q/ ]. Z  j$server = "localhost"; //your server
( Q% k% z7 U0 B6 l$db_user = "root"; //your mysql database username
3 q  H5 U' Q) r" ^0 z) r# s3 W$db_pass = "password"; //your mysql database password if any" w: W6 c0 y5 [, r
$database = "users"; //the db name
* J: X) F: P) O3 l/ w( b& N! H$timeoutseconds = 300;//timeoutseconds limit
! S6 `: L( c5 x5 w# E+ n//get the current time
* y! s8 m* @, D' P) u: b7 f$timestamp = time();0 n0 ]$ V3 x" O+ h+ K1 N
//calculate the lowest timestamp allowed
3 N* T1 f, ?% I9 p$timeout = $timestamp-$timeoutseconds;* u; o1 T- M/ y1 Q. r. z  R
?>连接mysql
1 J" }# U4 n! |1 }! r% Bmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
0 W# m- }$ r" J7 \mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
4 [1 w2 {* \8 Y$ Lmysql_connect($server, $db_user);查询数据库的代码:5 u0 `# }& z2 R& G! f
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。: n  }2 w! p' r2 i$ i1 I3 R. u
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
9 X! E2 y' d$ `('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
$ I" l" h! e: o) @+ P7 ^' p如果用户用错误信息的话,这样处理。
6 O, r/ z3 `5 u; `2 Cif(!($insert)) {7 c' l# W: R3 ^1 ~, p: b
print "Useronline Insert Failed > ";
- }5 a$ n1 Z3 D# V+ P+ p- D. s}然后实现当超过设置的时间就删除该用户记录。: W* `% ?# Y7 M8 C% ~6 S
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
6 \# S1 Y2 B4 t9 P& W% Gif(!($delete)) {
: K9 ^  r9 E6 p6 Jprint "Useronline Delete Failed > ";
9 f$ E* s5 f* q% y1 m}下面我们解决数据库中不同IP的问题& |" V# j6 C" E4 f( g+ C$ Z% e' Q
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
$ l0 |9 }% H2 y9 J& ^; ~mysql_num_rows(query);来统计用户,代码如下。( ]7 Q' `6 l8 y5 X5 q" G1 N
$user = mysql_num_rows($result);最后关闭数据库。
. |" h% K# o( p8 Hmysql_close();显示在线的人数。: A2 n8 ~9 ?7 S8 H( |6 q$ t
if($user == 1) {
( m2 W, r3 l" {. l3 s+ ?: uprint("1 user online\n");6 r" `* u; N5 m# s3 A: q
} else {" ?$ j' k$ _- N! C& N4 s0 H
print("$user users online\n");
$ _1 D. f) \2 |! j' [+ L}最终把上面代码写成一个PHP文件如下。7 b6 Q% E  Y  U" L
<?php; g. s; o) q& J! K  H% @8 M! Z# R, K
//Put your basic server info here) L' w/ X. I# F
$server = "localhost"; //normally localhost/ v" }3 Y+ ]. L# s7 i  E
$db_user = "root"; //your MySQL database username8 [8 e$ ^: t8 o) I6 p
$db_pass = "password"; //your MySQL database password/ |$ S8 {% P. N* [
$database = "users";
% Y) b9 C$ `$ T% z$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
! e0 e( ~- }: ^4 ?// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
, }0 b& H$ \" `// $timeoutseconds seconds)6 S/ N3 {/ ^. K# B6 i' c
//this is where PHP gets the time' M+ R* ~1 ?, K/ v" P. [8 a. \
$timestamp = time();! b8 ^1 v3 G% W+ E( k  h8 u
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
! I; k' d! O; x# h5 J/ i: E) m2 \+ s$timeout = $timestamp-$timeoutseconds;( P9 [3 f5 D3 \
//connect to database$ ~6 r" K2 z: v5 L- K6 N0 ~
mysql_connect($server, $db_user);3 j5 g7 v9 }8 L
//add the timestamp from the user to the online list
: K- s# l. I- m/ W* C% _$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
6 K8 B) f9 x; \0 u/ N* U('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");2 y: Q0 P' J5 ]* C# K$ M
if(!($insert)) {
5 s7 Z# U. `; _0 a% y* Sprint "Useronline Insert Failed > ";
+ c" Z0 \8 M/ g- Y/ Q) q0 D}
6 i1 D7 h! z$ S' ?//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.' U  ~9 A4 t5 w# A! d
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
8 X# L2 G8 r8 S' Vif(!($delete)) {  W" ?! n" C; u, C7 a
print "Useronline Delete Failed > ";
& [7 k6 U& X1 Y8 c8 Z: w+ s* p}
# J: o: ]; r) Z//select the amount of people online, all uniques, which are online on THIS page: O0 l4 m  d- x; X6 \9 ]5 p" S
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");6 g) U. A8 E# [& P
if(!($result)) {
! q  \' ~# I! u! aprint "Useronline Select Error > ";
- Q" c+ Z6 g) G" T}8 @' x( B+ o" {  O3 W# J5 ?* [
//Count the number of rows = the number of people online
$ I: x! g" }, V$user = mysql_num_rows($result);
& O  T5 u6 h$ N+ U) w+ Y//spit out the results
% d- ]" b. b% m$ _, Z; |3 Dmysql_close();
& z* `) U, p4 _/ v* |+ Eif($user == 1) {
0 g8 o9 R, k" ~( r* s4 ^# L+ \print("1 user online\n");, Y: F; W; ^7 J5 N* T
} else {0 g! O7 m  ^( R& `: X; L8 v
print("$user users online\n");! }. M5 b% l4 _7 O
}: h, G, l2 e& ?6 P6 Q
?>8 H( g# t$ ?( ?6 M# y+ x
! \  A: A- j' S$ \3 o/ I
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。9 H, T* z" V  E6 w6 y+ ~
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
9 J8 n1 M/ n1 I- }我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。$ ~- s# M, A; \$ d7 p8 Z
当然啦,这两款主机也是相当不错的。
/ A7 Z4 U, a" S智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
( k8 E3 n) W! U7 y标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年, G- z% f- J* V0 R' O
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ & z7 |/ T5 s# J- T5 B4 f& E! ?
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
& H+ J8 N: ^. w5 M/ J自己加QQ去问吧。

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