返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!* B2 R9 B$ \* y- G& N0 u* {9 i
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。$ _3 w# i, K+ T% L/ L/ ^6 \3 w+ [
首先我创建MYSQL数据库表。
: ?9 i. y4 I7 }" qCREATE TABLE tablename (/ B4 A/ p4 t2 K: k* ?
field type(max_length) DEFAULT 'default_value' (NOT) NULL2 k$ }' S5 [. N% ]
}可以使用的SQL语句。: O8 g  j5 V% `" N' C( I
CREATE TABLE useronline (+ M9 y9 V% T9 ]0 h- k* M, _' v
timestamp int(15) DEFAULT '0' NOT NULL," ~. Q& [  ^' i$ m
ip varchar(40) NOT NULL,
) E! s' I( N6 O1 O+ j# a, Rfile varchar(100) NOT NULL,
" U; U3 O- l! z, Q; ]9 W7 YPRIMARY KEY (timestamp),. o5 k2 B$ w3 ~$ I! q2 {8 g4 u, }
KEY ip (ip),. j6 U) l+ P* X+ ^! d; \
KEY file (file)& F8 j6 p! V6 z
);下面我们是PHP脚本,首先我定义MYSQL的信息。& Y0 z3 w7 _; ]% }4 }
$server = "localhost"; //你的服务器% u/ v4 X( f' N4 E
$db_user = "root"; //你的mysql的用户名
. x) e1 _$ S0 n5 T% U4 @$db_pass = "password"; //你的mysql的密码  D$ s9 x6 f* ?8 P  C2 y
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
2 }1 X4 u5 C* l% Y0 P( }$timeoutseconds = 300;取当前时间。
( ]. x+ x- p- E, t5 f$timestamp = time();上面的完整代码:+ D" V* \$ w* M* I: Q) m) O' ]
<?php
. c, x. v( j$ o, |2 v3 j+ y" y$server = "localhost"; //your server2 W! W. A- e5 m- }+ j
$db_user = "root"; //your mysql database username
% P1 R+ s7 j4 I$db_pass = "password"; //your mysql database password if any
' Q0 o2 Z$ |* z: V$database = "users"; //the db name
1 S3 c% y5 e9 v1 X8 n$timeoutseconds = 300;//timeoutseconds limit' }, R/ p7 c# X8 B/ ~+ D) h
//get the current time
* ^7 V. |/ [6 k4 T8 n' ?5 D! H! W$timestamp = time();
) \& c7 |8 e4 E; @" @1 ]8 X2 M//calculate the lowest timestamp allowed4 S2 f: B" J  y
$timeout = $timestamp-$timeoutseconds;
# G+ o! j, l8 [9 Z* h( p3 L( v?>连接mysql
: K5 v+ g, M  {5 R1 Dmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
4 |+ T) q' I, I+ wmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
; E! l* w$ ]. O$ o2 X- r9 @: a: V2 ymysql_connect($server, $db_user);查询数据库的代码:
+ X/ o. y( N% d3 ~: A. f( ~. D" Umysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
' b8 l7 z7 P* m' P; W- r$insert = mysql_db_query($database, "INSERT INTO useronline VALUES4 y9 u2 i$ u9 e9 {8 f& f
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
( T. w# e3 X+ |( `/ q# ?: z如果用户用错误信息的话,这样处理。
; F4 m+ C9 W& b- g5 q( fif(!($insert)) {
; D! M* T, }* l- t9 S; n0 N7 g, q+ rprint "Useronline Insert Failed > ";4 N+ Q! q9 S  i* C( O/ F, J
}然后实现当超过设置的时间就删除该用户记录。- M! d! o  \, O7 D" b  o
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。9 P0 [+ Z2 ~: u: Y
if(!($delete)) {
3 @. M7 k3 N# t3 |print "Useronline Delete Failed > ";
+ r; b5 W3 ^7 g2 j}下面我们解决数据库中不同IP的问题. h/ a4 l: U4 ]8 C( Q
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用9 i) v7 x9 d# R
mysql_num_rows(query);来统计用户,代码如下。) q. c- ]% R% v+ R
$user = mysql_num_rows($result);最后关闭数据库。
# [3 _, Y" D$ a+ e( Dmysql_close();显示在线的人数。
9 \- T- c4 R% h' J6 S4 M% mif($user == 1) {
9 {* L5 t* H, `1 h3 e8 o6 G. Lprint("1 user online\n");% p3 h! T( n( a* i/ Q5 p  s- k* R
} else {
! y3 B5 Z) C! u# r5 i3 ~print("$user users online\n");- z7 {. J0 h7 B) t% x, y$ M
}最终把上面代码写成一个PHP文件如下。
4 `3 P1 T" {+ a- r! e<?php
1 k0 X3 E) e- O6 h//Put your basic server info here
* x. v* Q4 O0 b  ~8 b$server = "localhost"; //normally localhost
; r% T4 N$ k# B9 X$ a' c5 ^% Y$db_user = "root"; //your MySQL database username
) W8 \! p( p5 k. j1 l$db_pass = "password"; //your MySQL database password
& y* q3 g' s0 y$database = "users";1 m' a7 z1 ^% S) Q
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
4 }1 P$ q+ e/ M! V" K/ K/ T" a// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last% m! b3 V: y' S1 [. g, ~
// $timeoutseconds seconds)" |7 }) m' v4 ?" ?5 V- R4 z
//this is where PHP gets the time
( ?. _  U: x( p! X/ \9 t$timestamp = time();
$ l  B; C3 F- Y0 j1 B9 B) [7 V% U//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed4 ^$ a. [' j2 F) k
$timeout = $timestamp-$timeoutseconds;
0 a: X) V' |; S8 z/ s( b//connect to database- T1 {* o7 J# j  H) x6 B* C
mysql_connect($server, $db_user);
: p. k; d5 {) V//add the timestamp from the user to the online list2 h+ C7 r+ a8 Q& z% n
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES( `" v$ \; M5 l" t0 z$ H
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
& W7 \# D, T' h# l- t# Rif(!($insert)) {
  r1 {% m4 G1 C, {; _3 V$ cprint "Useronline Insert Failed > ";5 X$ V' v/ }8 @. W% ~- ^
}
, k9 m) D& K$ R//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.3 \6 ]' L" [0 k/ w- t/ V
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");4 w) X( R: `; j* y
if(!($delete)) {
/ A, M3 R* f4 b: h& S  ^print "Useronline Delete Failed > ";
- x% v. l& |* Z! @; Y}4 [1 P5 `7 G# X. p; e6 q4 q7 b, i' }5 r
//select the amount of people online, all uniques, which are online on THIS page# @6 s! d; H% M9 D5 n
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");# t% m' D. B' D6 Q# ^
if(!($result)) {
/ C* b2 f; d% n: Y5 gprint "Useronline Select Error > ";
" b! d- p9 @0 l9 j; L! T9 o}; C& A" \7 W# ]8 J  _; x) v( B$ @
//Count the number of rows = the number of people online4 e. s. ]. H# r
$user = mysql_num_rows($result);+ |7 a- u/ H- B5 v7 u: q0 S8 U
//spit out the results' Q/ N* G+ H0 a4 {, K" p8 Z; T
mysql_close();, N  |& y. [" G. ?; |
if($user == 1) {2 P+ k. [: v0 E$ l* e) y, X
print("1 user online\n");- E; `& v* A  B6 Z5 D; o$ A
} else {5 X( D( n2 \3 b- U( D. P# j
print("$user users online\n");
6 S" z6 b2 ~" _5 ~6 w% F}' Q8 q3 ]) H4 W
?>
+ }) A1 Z5 `! ~
, G# B3 Z: H4 b) B以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
8 l" Z% I) u4 R' m% r; D  ~% }4 B时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
' v- G# Y/ j1 Q, {* i. {我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
/ q+ L. W) {) ~9 Y( C7 G9 e当然啦,这两款主机也是相当不错的。7 x6 W2 `3 Z' z& Z
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
( G2 U' i7 c5 `  d4 ^- I标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
! f/ X( ^( {! Z* X提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 8 k2 Z! a+ ~: L. r" e; g* |
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
. B" D# ~4 S/ D' S% ]4 S8 w- R2 O自己加QQ去问吧。

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