返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
5 M) s: c- M% b$ B我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。& ]. K5 E! C$ m' B/ {
首先我创建MYSQL数据库表。
- j* K1 w' V! M. p- ?; OCREATE TABLE tablename (
4 L2 i$ F0 o, L$ Nfield type(max_length) DEFAULT 'default_value' (NOT) NULL
1 A2 K/ s+ [/ }4 ], V}可以使用的SQL语句。
; c  [$ R9 G  C% q7 cCREATE TABLE useronline (& i* N$ T( \+ d( e( ?
timestamp int(15) DEFAULT '0' NOT NULL,0 ]6 d2 V* i) Q/ x0 i
ip varchar(40) NOT NULL,$ W* }" T( ~( F1 g, ], T  Z% |
file varchar(100) NOT NULL,
( z* w& f, X. p0 c: z! cPRIMARY KEY (timestamp),' R) W: O3 v0 O7 N
KEY ip (ip),0 |+ B( C+ W( G% t' ~& K6 x
KEY file (file)' U- D/ W& x6 z/ O
);下面我们是PHP脚本,首先我定义MYSQL的信息。
; a7 V- `% n5 D8 R# C. d. A3 |7 _$server = "localhost"; //你的服务器; g0 `# U% ?$ D' y, d
$db_user = "root"; //你的mysql的用户名! y( l+ M2 y0 x
$db_pass = "password"; //你的mysql的密码
2 x4 V3 Z# I- o* R. ~$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)( v$ m0 m5 c. F9 p: M) h1 w
$timeoutseconds = 300;取当前时间。
( i$ j! p! y2 Y6 T+ m$timestamp = time();上面的完整代码:( Y2 `" A7 a4 r7 A6 |4 x
<?php9 o4 `3 H) H5 y4 \' F0 H+ P
$server = "localhost"; //your server
; I" I: [* L4 x9 k$db_user = "root"; //your mysql database username
8 C7 a" d2 B* }6 U: r3 \$db_pass = "password"; //your mysql database password if any7 G9 U% I! V1 L1 A0 s. {% w
$database = "users"; //the db name
* I. a9 Z% u% z% M$timeoutseconds = 300;//timeoutseconds limit
, D6 p/ F, `% e' o6 H//get the current time8 R9 n& l' y" d& G
$timestamp = time();5 n. U9 j# p' N& g, c: b6 J
//calculate the lowest timestamp allowed
6 b1 `4 z8 \2 q6 u7 y$timeout = $timestamp-$timeoutseconds;
1 b7 Q" R; y& q: D?>连接mysql
9 V, B; z# O, imysql_connect('localhost', 'username', 'password');也允许使用变量形式。+ c8 u4 C* C) S9 s
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接& a( z3 F5 W0 Q; p
mysql_connect($server, $db_user);查询数据库的代码:
) }% Q2 }0 [7 z- g$ Tmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。- I% U& d/ \" I% B
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
4 L: s$ K  x# u% s* k8 w! v) K. J('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
! t6 N. r8 p9 G0 g- O/ }$ @( ^如果用户用错误信息的话,这样处理。
' ], C2 e, b7 ]' Vif(!($insert)) {
( o" O3 Q& _$ F  Y5 fprint "Useronline Insert Failed > ";
% k7 }, a! {5 a$ B+ E% D}然后实现当超过设置的时间就删除该用户记录。0 k$ O! s, ]: s; `9 z) G* T. c
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
( n( [5 b+ r3 g% Rif(!($delete)) {/ x! S/ l4 N7 i  d2 g- c* G8 o
print "Useronline Delete Failed > ";
' S( d( P7 b, y2 \}下面我们解决数据库中不同IP的问题& y* V. U" A/ {2 a: U
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
! `" ~5 Y# K4 a6 C; j7 K$ m2 Y6 }. Lmysql_num_rows(query);来统计用户,代码如下。$ t3 y; k. {2 n. P- V
$user = mysql_num_rows($result);最后关闭数据库。! c* W0 j0 v6 a# Y0 O4 w1 F' Z
mysql_close();显示在线的人数。
1 e! y- B$ Z, j7 |) _( m/ Nif($user == 1) {
* |% I7 H9 F$ b1 S: rprint("1 user online\n");3 v8 `( h0 A2 A7 O! [2 u% \% |7 g
} else {1 |% e1 N2 D) |+ d
print("$user users online\n");
- B% @: ^( a. W}最终把上面代码写成一个PHP文件如下。% A# U- e3 r: E% J& y) Y
<?php
$ P7 t7 N6 B: X' l$ \3 }/ x' S# a//Put your basic server info here
& N3 B- K) d1 V9 \6 x- ^$server = "localhost"; //normally localhost6 q' @8 `6 a3 d. B, Z0 a
$db_user = "root"; //your MySQL database username
5 U4 u0 i/ w& i4 X5 O4 h$db_pass = "password"; //your MySQL database password! t. ]8 f+ w) E/ M0 `0 b1 P
$database = "users";/ N  l" v+ s1 A6 S4 y5 J
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are7 |# e, @( i- y7 ?* `
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
( M; r. M; A8 U, D4 X' |5 K( \// $timeoutseconds seconds). o) i0 z2 d: ?. ~# ?. Q
//this is where PHP gets the time2 |( }1 \6 `' E/ r# S7 K. p; R
$timestamp = time();
. {* [- ^" K- Q9 ~# E2 E. E; w7 ?% |//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed1 }& w4 G5 ]+ p" A$ U
$timeout = $timestamp-$timeoutseconds;
0 Q+ ]: H" H! u* O( I1 c8 D/ ^* w//connect to database
! I7 A' }5 d2 w, B/ qmysql_connect($server, $db_user);
) t5 z/ q5 b# c2 ?$ {7 p# _//add the timestamp from the user to the online list
" ^, _, g/ m( {4 \( A5 P$insert = mysql_db_query($database, "INSERT INTO useronline VALUES4 w+ V0 ~) ?( J8 Y# s
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
! ~% z" s; [: }" P5 V  B3 @2 B! ?if(!($insert)) {* R- s6 \2 G+ ^6 f& D$ P& I
print "Useronline Insert Failed > ";' [* L6 f6 T" ]+ N6 f: |, ^4 p  M
}, W0 X( j; P4 Q$ c
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
- ^0 X1 {# F) u# c1 Z$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
, X& C$ @# @/ G  q  Z9 fif(!($delete)) {
' O4 ]; Q' v3 e9 W* Wprint "Useronline Delete Failed > ";/ j, i5 @  g: j$ S
}+ m" G2 ]' Y& P' {0 A  u5 O+ O
//select the amount of people online, all uniques, which are online on THIS page
: ?! {5 e# g9 Q4 ?' ]0 R$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");# Z, d- F! E; a5 T4 ?8 l  U
if(!($result)) {
, P1 O3 I) ?0 Y5 Z- D) Y" qprint "Useronline Select Error > ";$ v" N8 h% [. X# L
}
+ u. ]. P, I# D# i/ J6 o//Count the number of rows = the number of people online
8 Z, j; U. A% x0 Q3 n. K$user = mysql_num_rows($result);
' Q( Q* |) p: C. C8 [, r! O% [: z//spit out the results( s" q  ~: |0 O7 \3 C. s
mysql_close();
9 ~$ E; k6 m+ ^7 X6 ~0 O- Rif($user == 1) {* W4 H- g" @8 a6 W4 C
print("1 user online\n");
2 b" }5 h! t% \# m& c  L$ ?6 b} else {& {- U6 r# h5 N+ O; d( V) S8 z$ {
print("$user users online\n");
6 V* k$ G% ?* B4 b1 r8 @}
+ B% Y; m" X/ @?>1 i; V9 f4 W1 y4 g
8 M6 Q) Y0 `/ C0 }! X: k# d; [
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。! |" o  ?& }6 ^9 A5 Y. Y) L& m
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
1 o& m5 r% b" g& Z4 H* R4 X我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
& M# E. Y) b! ]7 G当然啦,这两款主机也是相当不错的。
% J7 u9 P7 ?- G智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
" `% O$ r% |: e/ I( L9 N标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
# |0 ]' t* }1 o8 K( G) M' S提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
( C4 P: Z+ F3 |  Q+ X空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=551 n% @4 c  H: a& L; [% B
自己加QQ去问吧。

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