返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!9 T" S6 V1 q8 I
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
5 e. [, P  K; z$ }首先我创建MYSQL数据库表。: M: e- ?9 C% z! u; E
CREATE TABLE tablename (
$ r8 R. }! _  C5 N  efield type(max_length) DEFAULT 'default_value' (NOT) NULL/ z8 p. K, K& z6 o
}可以使用的SQL语句。
& o: h6 E& x: pCREATE TABLE useronline (
: }  m/ j3 v- C1 G3 Gtimestamp int(15) DEFAULT '0' NOT NULL,5 Y& M5 j1 `3 v( @/ G" `' e
ip varchar(40) NOT NULL,9 I' @6 P% L/ ]4 i  F& G
file varchar(100) NOT NULL,
+ S* u/ D7 \. a+ y4 SPRIMARY KEY (timestamp),7 _" c3 d! J1 M  B7 Y0 p. A6 w
KEY ip (ip),
3 O& b: v: V' ?7 C, GKEY file (file)
6 ~6 @! r3 P* T; L2 A);下面我们是PHP脚本,首先我定义MYSQL的信息。' S3 y+ x; G9 i  ~6 ?0 S6 n
$server = "localhost"; //你的服务器
) n# e( p: L, `* \  r7 \$db_user = "root"; //你的mysql的用户名
) N8 y! F% b) O: x6 ?$db_pass = "password"; //你的mysql的密码% g9 u% K& a6 Z) Y
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
+ g5 s  ]0 q* d+ \- {, [$timeoutseconds = 300;取当前时间。
. m8 d9 c9 k) s% k, b- O/ B$timestamp = time();上面的完整代码:- q0 T/ e$ a3 J& _. v0 H
<?php
6 t* C8 O' a3 U' ]0 r1 ^$server = "localhost"; //your server2 A0 w7 P) I) n# \; p- J, A  S
$db_user = "root"; //your mysql database username
$ x6 o% W$ q) w6 c( h/ ^$db_pass = "password"; //your mysql database password if any
; z  p; r( N( ?* B+ \$database = "users"; //the db name6 C: k8 V8 ^) n) X3 f- E% X: h
$timeoutseconds = 300;//timeoutseconds limit
" i) G% D1 B3 t/ r9 F: y, C. N//get the current time
  ]! w0 b! w- K$timestamp = time();! y9 _! X4 H  @+ l6 R
//calculate the lowest timestamp allowed
1 {8 q) O# W: Q- w! \$timeout = $timestamp-$timeoutseconds;* h( v: @- W% u4 o' s- M+ V
?>连接mysql9 f# x9 c9 n+ h% W
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
, z2 U  }4 Z- ^4 {3 o3 k1 f. lmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接% ?1 J$ Z1 t5 r$ n/ m
mysql_connect($server, $db_user);查询数据库的代码:$ {. `3 @2 Y$ ?& g
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。2 [" O! Q6 |' \; k
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
9 Z/ B# M' P' v- m5 l  p5 E('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");( h1 S& y* L9 o$ k- X* t% ~
如果用户用错误信息的话,这样处理。$ P1 I2 x' B, t, X
if(!($insert)) {
0 d, k/ b1 H/ s- Rprint "Useronline Insert Failed > ";
3 g/ N# g2 D0 k}然后实现当超过设置的时间就删除该用户记录。
4 [3 w' q4 z$ V+ N' ?$ @' a$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
6 K; A5 G6 x+ T% vif(!($delete)) {
, V0 E. q( F$ X1 v* [. d* Vprint "Useronline Delete Failed > ";+ U( g& t. w. }5 r. y
}下面我们解决数据库中不同IP的问题
. e! c+ S) D! `) T2 a( u5 s$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
+ s1 G6 b' `) F7 P3 l# Lmysql_num_rows(query);来统计用户,代码如下。
- T. K% w$ G# x$ x6 f$user = mysql_num_rows($result);最后关闭数据库。* [) D) k! @' W8 m7 Z( M+ P% x8 Y
mysql_close();显示在线的人数。
1 R7 U$ v5 z, t6 @8 E( mif($user == 1) {
2 t2 A( g7 m/ C, Mprint("1 user online\n");& w4 |" w- f7 ?# A' h
} else {# E/ ]: B9 |0 G9 a
print("$user users online\n");0 q9 x* M" }6 i6 Q, t
}最终把上面代码写成一个PHP文件如下。
6 \/ I* P: m' h' k. K! c<?php
2 s2 J8 o, D) ~. {! H  J" P//Put your basic server info here
+ V6 V( E( n  O% l/ Q% D8 @$server = "localhost"; //normally localhost% f( e% H! s5 N1 ~2 R8 w2 T& }
$db_user = "root"; //your MySQL database username
, t9 b3 {, Y* T7 v: i9 `$db_pass = "password"; //your MySQL database password
1 Y' @/ Y& B# H- D: r$database = "users";7 b& h) _7 u- ~* \: {; J; ^
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are4 d5 P( H" Z  m& m( u/ B
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last0 h4 F" X* x+ S- N2 B6 F5 \
// $timeoutseconds seconds)" N' u8 {0 F1 E$ Y2 |& {) ?
//this is where PHP gets the time
4 d9 E; Q" C) G- X8 h+ j$timestamp = time();7 a+ r# L7 L' c7 ?' c( {5 P
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
- c" _- B! i3 R1 \( n1 B) J3 c$timeout = $timestamp-$timeoutseconds;
1 W, B: V5 B( f+ b( \7 T//connect to database
# A/ L9 Q! j3 h/ V5 w6 q( h. Cmysql_connect($server, $db_user);' j& G7 X9 U) T  l) ^/ @6 h
//add the timestamp from the user to the online list
! n6 ^7 h; b  R& E6 j$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
( |' m2 _, b/ r) [: ~* H('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
9 Q% R9 r, a8 L" fif(!($insert)) {
) m& f' W4 T( lprint "Useronline Insert Failed > ";% ?9 j* x" o0 M; i: n9 D' J
}
2 t( `% x) v! Q" I6 D' a8 U//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
8 e' p7 K' V* h! ^4 E$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
" K( d5 i7 \* I4 Z7 a7 |- u; @* ~if(!($delete)) {( `3 Z* V' S" J4 @
print "Useronline Delete Failed > ";  B2 G; Y2 x/ m0 q
}" \& Q5 G# V2 T) f5 h+ {$ u
//select the amount of people online, all uniques, which are online on THIS page7 X- ?* H1 w7 F7 z9 L; N5 s- Y$ l
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");7 w- v" ~: _1 O. y7 n
if(!($result)) {0 P( S& k0 V# T* d. u3 q
print "Useronline Select Error > ";" l2 @- V4 n2 m$ q7 A5 p
}/ C2 K: H" Q" p2 X
//Count the number of rows = the number of people online
5 e3 v! B7 x+ D" i% F5 n5 L# F$user = mysql_num_rows($result);+ R( H/ L' a  A0 ]4 j. R. {7 n: e
//spit out the results
2 c9 z# I8 @; K( L. X/ n4 umysql_close();( \0 u+ e" X8 N3 q5 }: C, v1 V. x1 F, S
if($user == 1) {, j8 I% P- ~- \3 ^" V
print("1 user online\n");
, I) ]9 ~9 w* j2 s4 c( O} else {
. m2 v- J2 o# r0 D, vprint("$user users online\n");# D% s8 R/ q: o7 t. j
}7 _) N- ^7 _5 g  D, [  i
?>
( O: O) n# y1 y1 L
% ]1 W! F% k0 ]以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。' N4 W8 b1 S3 z8 E
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
, q! |3 \  \2 N4 n/ Q& c! w- ]我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。. i. U' q: P$ O2 I" `/ ?" Y
当然啦,这两款主机也是相当不错的。" `6 C& o5 H2 B  j% y& a* _5 o) k
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
9 Y/ ~3 o- {* q标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
6 h/ ]* y( F) ]' t$ y- x- x6 ]6 w# P提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ ; N5 `9 g( j* Q- ^+ e$ z
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
% m( Z: C* r* ]. f+ x8 D% m( b自己加QQ去问吧。

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