返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
* ~0 ]4 I2 O( U) ~- U& Z我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。( w% v8 k6 i5 j+ K% [& i1 Z' G& ]* H0 `
首先我创建MYSQL数据库表。
; m$ ~& j! V. H  C: o1 tCREATE TABLE tablename (
% ]- s/ I8 d# ^/ Tfield type(max_length) DEFAULT 'default_value' (NOT) NULL
  ~, t3 z/ z9 P' I}可以使用的SQL语句。# y5 w, X. |& j5 q
CREATE TABLE useronline (
1 P1 }( n9 i0 E/ U7 |3 Ytimestamp int(15) DEFAULT '0' NOT NULL,  J% s/ v3 }* @- [$ }  a
ip varchar(40) NOT NULL,7 f8 H: R1 D7 T( N3 ^+ n0 N
file varchar(100) NOT NULL,: Q9 W  g2 B1 p% y/ @* a" Y0 P
PRIMARY KEY (timestamp),
1 \) c; |% \  m* U" e. LKEY ip (ip),) e/ I: f; Q2 ?+ v- e
KEY file (file)
  o3 w" {# F9 F) H);下面我们是PHP脚本,首先我定义MYSQL的信息。+ o2 Q# }' D3 U8 T3 R* X3 e6 b
$server = "localhost"; //你的服务器
" h. O3 M/ U5 J+ L0 K4 F2 v8 p$db_user = "root"; //你的mysql的用户名3 i1 {2 o! I' g6 t
$db_pass = "password"; //你的mysql的密码. L8 x9 z9 q7 e0 C- G, b, E2 I5 p
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
: j7 z/ r: S5 b$timeoutseconds = 300;取当前时间。. i, _: r+ t3 V
$timestamp = time();上面的完整代码:. v+ m" T- O' Q  U# u, |" a5 D
<?php
; o- B% y1 _0 O# m) p% _! i$server = "localhost"; //your server
. W# b( M0 }0 ?/ M8 o9 C8 {; T$db_user = "root"; //your mysql database username  F0 x. Q! Z4 P0 E+ j5 [3 p
$db_pass = "password"; //your mysql database password if any
! t* I1 s: E4 S. D! p$ I) o$database = "users"; //the db name
  t& \* p% W: O$timeoutseconds = 300;//timeoutseconds limit3 T5 s2 _' d) ~
//get the current time
6 l3 C# ?3 l( V* |1 _, A1 y: P" ~$timestamp = time();3 f# h2 F; g- z4 J. i9 r
//calculate the lowest timestamp allowed
$ f" {1 u4 X9 @  t& I$timeout = $timestamp-$timeoutseconds;; Q0 |9 T% C* g* ?+ I
?>连接mysql) f- v; @* y) c, \
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
: a- ~% @7 Z' F& E/ omysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接" y" v, W2 i: l2 t  z' J* n0 ^
mysql_connect($server, $db_user);查询数据库的代码:
# H% P& P- J5 y1 l2 e7 fmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
, L9 V( J: n0 n; ]- }- c$insert = mysql_db_query($database, "INSERT INTO useronline VALUES- A4 D% C5 _) _! l+ z1 I
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");/ o$ r, ~! r+ S. [4 C+ L& d" g
如果用户用错误信息的话,这样处理。
- k3 e" s  ~, F! I9 K& ~if(!($insert)) {( R+ Y$ U3 C- O$ Y$ e
print "Useronline Insert Failed > ";
$ Y1 z+ M# z6 G- o) {1 x}然后实现当超过设置的时间就删除该用户记录。3 ?# \. y. y3 k
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。* m2 k8 H& M+ ^3 Z2 N  Q
if(!($delete)) {
3 y6 @' S8 J- r$ s( Xprint "Useronline Delete Failed > ";/ Z- P9 z# c9 z' }
}下面我们解决数据库中不同IP的问题
; M6 P. L* e! Y) R+ G. u  m$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
9 M" o: @  a5 M3 l% o3 Ymysql_num_rows(query);来统计用户,代码如下。7 M$ m# T  c; w' t; D( p
$user = mysql_num_rows($result);最后关闭数据库。
- X& m8 \, ~6 ?* w1 d, q5 emysql_close();显示在线的人数。
- B/ W5 G# n9 U% ~if($user == 1) {% ~) Y7 n/ H) l; ?
print("1 user online\n");
+ }' K5 L, F# M& o+ D} else {
; I5 T% p5 e* j+ l# qprint("$user users online\n");; |: x0 B  R0 O
}最终把上面代码写成一个PHP文件如下。
) z  \. A# _  a1 y  _% x- g5 b<?php( D" Z  G0 I" a# K- O, h) S
//Put your basic server info here
( ?# t$ c* |8 z. P6 V- q$server = "localhost"; //normally localhost  F+ F$ R+ q& \& O
$db_user = "root"; //your MySQL database username( O4 s3 q% r# d: k/ I
$db_pass = "password"; //your MySQL database password
* N3 o% t1 ^% Q) l8 I$database = "users";" _& g. f+ w0 u$ L( x
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
# a) `) b. o# m0 f$ a// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
: p5 Z/ F9 q8 w// $timeoutseconds seconds)
6 a* v  u$ O- S, \! Z5 C//this is where PHP gets the time& f7 |- G8 y8 T4 X* A
$timestamp = time();
4 [" C+ ]! L$ [! g5 D//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
$ s8 |* X, V' g5 m$timeout = $timestamp-$timeoutseconds;7 H9 [  }) h# r2 ?9 [
//connect to database/ f  u! f0 v8 X. j' A2 X
mysql_connect($server, $db_user);0 t: C; [0 A5 X' @! {
//add the timestamp from the user to the online list
$ ^  L' _! q% r/ k3 D- m, u0 }$insert = mysql_db_query($database, "INSERT INTO useronline VALUES9 E0 z1 N% _* G$ m  I, o
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");# h9 |+ B! |: q; f0 }. k7 ~8 v' t
if(!($insert)) {/ d: A- Z* Z5 z/ N. ^9 g& }
print "Useronline Insert Failed > ";6 ~6 d8 Y1 y7 g: f- H$ T( r) {
}
9 g; w: \4 z6 b//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
- s' a' X- o2 p; [$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");0 q, F/ Q3 i) F6 u- }
if(!($delete)) {
! `! ]: ?! L: t8 g( [- {! cprint "Useronline Delete Failed > ";* D! J$ w/ S/ i" k
}( _# O' i: D) M, c8 t  x3 q
//select the amount of people online, all uniques, which are online on THIS page
' H. c0 B- D0 S! V$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
3 i1 `$ l8 j1 k0 o4 N; Sif(!($result)) {
1 Q" F% z3 ^: ]% _$ s/ Rprint "Useronline Select Error > ";
( ]+ x# [2 v# o}* J9 L2 j- x4 F+ A6 {: d
//Count the number of rows = the number of people online
! V1 f5 [" E  Q* z$user = mysql_num_rows($result);
; ?9 j- Q, h: C- {% s' d5 y//spit out the results
, U3 J3 o3 ^5 \4 Z$ fmysql_close();9 i5 r- T8 @' n% {* [# s
if($user == 1) {
& r7 R0 h2 I4 t, q) t( j9 [) d1 lprint("1 user online\n");! X: c* R. T6 B" W/ m7 E* e& x
} else {
! Q7 o% \$ ?0 v- J( Mprint("$user users online\n");5 H& N7 K# O2 y2 e# ?# `# [( P
}3 @: J' T8 a# U
?>
' d- Z. Y& F5 P; S2 X3 G2 N4 S. |4 q3 p, R3 S
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
3 @( Y; [( v6 T# V时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。, h) e3 C, ?9 R: ?: }
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
: w& p6 i; Z% x  n( f当然啦,这两款主机也是相当不错的。
) |; R- y4 s& q* A智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年4 S0 g8 |$ q" n5 k% V/ \
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年6 a+ ]" J8 Q5 r9 u! O
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
# u3 u9 S4 g8 \- J空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55; X8 B( ^) E$ G8 r& j
自己加QQ去问吧。

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