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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!6 m$ b* L. A- d$ H$ d) s
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
- k5 \1 R/ c. j6 B5 h- {* c& d首先我创建MYSQL数据库表。
( x6 \* x) a; V2 M- Q, xCREATE TABLE tablename (1 y6 }7 v1 c: c- p: @
field type(max_length) DEFAULT 'default_value' (NOT) NULL
, Z  q2 @3 ^; L+ \}可以使用的SQL语句。* Y* S9 ~$ \& K. l  G
CREATE TABLE useronline (
$ D) a7 G' C; E0 x* otimestamp int(15) DEFAULT '0' NOT NULL,
2 Y9 M3 u) Q+ m: T1 N- Nip varchar(40) NOT NULL,% @" B8 y' T1 e) d# `
file varchar(100) NOT NULL,- r8 w7 U7 E) B. X
PRIMARY KEY (timestamp),
  k9 l4 S4 t. W3 v& M) W( }KEY ip (ip),' @0 U5 ~) e0 X& y9 f, _& x
KEY file (file)9 k; v. w- ?4 N' a: I# G
);下面我们是PHP脚本,首先我定义MYSQL的信息。3 Y( I2 |3 a* Y$ M# b! }7 S
$server = "localhost"; //你的服务器+ Z9 G5 X$ `3 Q- `# h' l; b) p# z6 N
$db_user = "root"; //你的mysql的用户名
+ ?; C7 i% O. y$db_pass = "password"; //你的mysql的密码
# }1 E  n  t1 }5 B1 \$database = "users"; //表的名字设置统计的时间(多少秒内在线人数), O" U& L) y( W/ [: v/ @6 W
$timeoutseconds = 300;取当前时间。
: K& E7 ~' i* S2 s2 k$timestamp = time();上面的完整代码:
. ?" j+ _2 P( T/ R+ _5 g2 I<?php7 s+ w  e( p# C7 n6 P' h) P
$server = "localhost"; //your server) q+ f' Q/ h2 e9 C0 @
$db_user = "root"; //your mysql database username7 B2 F: a9 I( l2 C9 u3 R: `3 I
$db_pass = "password"; //your mysql database password if any% q( |# }4 c" U/ l& m4 W
$database = "users"; //the db name
# h6 w( s, H# ~$timeoutseconds = 300;//timeoutseconds limit+ k9 R7 x' |# d8 k
//get the current time) w. F( W! {6 s0 H2 |8 ^
$timestamp = time();
. G3 x+ ?0 ]. O6 q9 {//calculate the lowest timestamp allowed) n1 \7 o! m/ {* g  x+ }4 ?& ?" W
$timeout = $timestamp-$timeoutseconds;* o% k: W' _0 s. B. f
?>连接mysql. A" Z3 H. `, k8 F1 E
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。0 w" ?! }1 q; Y% Z2 ^
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
8 Q2 L! m6 J$ j6 Q2 hmysql_connect($server, $db_user);查询数据库的代码:1 X4 G3 D$ s7 t/ m- J/ U! q! h
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
4 e% t) P, `; G$insert = mysql_db_query($database, "INSERT INTO useronline VALUES% N* z* W/ J8 u, n) _
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");" t$ c, |1 p# @( X
如果用户用错误信息的话,这样处理。4 h6 E# D2 N4 V* K
if(!($insert)) {
7 U+ j# D; B, U9 J1 ?5 Xprint "Useronline Insert Failed > ";3 s( A- Q) {1 \( g, E5 k+ _- ?
}然后实现当超过设置的时间就删除该用户记录。
, z, }0 j* y  `5 k6 ]8 W7 O$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
1 Y$ Y. ]3 c& W  Y, Qif(!($delete)) {: H, W" u4 H) J4 X; q; Z
print "Useronline Delete Failed > ";
0 F3 r. e3 h0 t3 D+ K+ X3 G}下面我们解决数据库中不同IP的问题
) F  [( `  k% P$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用/ z, k# x( K8 X. o3 f
mysql_num_rows(query);来统计用户,代码如下。
- T# _0 D) T5 e" i3 }$user = mysql_num_rows($result);最后关闭数据库。+ `, L6 q0 K; C; A  J' O" W
mysql_close();显示在线的人数。" Y: G% c( U+ N+ W, S4 b
if($user == 1) {) x3 h6 L$ p. v9 D! s. e
print("1 user online\n");
( k1 |+ M% U  {$ d} else {, `2 n4 Q9 {/ ~
print("$user users online\n");
$ m+ h, Y9 R4 }) H/ ^}最终把上面代码写成一个PHP文件如下。
4 X7 I4 J4 v4 c4 _<?php
0 t: R" [3 x- Q//Put your basic server info here
$ _- g1 Y/ W# ]3 ^% x& H$server = "localhost"; //normally localhost
' N  t) i! X6 m' P$db_user = "root"; //your MySQL database username
5 Q1 {( W  Z1 U2 a" \$ r$ a; `$db_pass = "password"; //your MySQL database password
3 c1 h' W2 o- t4 ?$ U, Z) T$database = "users";
6 N0 F! w7 \% M: t% P& p$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are% {8 j7 C! g/ x# u9 A) H
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
+ k; R- T; r9 Y9 X) T! z; n. g// $timeoutseconds seconds)$ S: Q" o5 I8 b6 g5 F) ^* b
//this is where PHP gets the time
. h# `9 x8 n- S% j$timestamp = time();
! N2 E7 H4 U: ?& \8 K) y//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
3 v+ P( {2 B  `9 w$timeout = $timestamp-$timeoutseconds;
+ V* ?+ ]" o; H- v9 E% g//connect to database
5 q' D" K! l# i% Lmysql_connect($server, $db_user);$ ?+ u" f% s; z6 [4 N3 L& H
//add the timestamp from the user to the online list
2 j/ f4 y  {7 B* D" I$insert = mysql_db_query($database, "INSERT INTO useronline VALUES; s; ]" {( w  k* m& I
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");) d8 F1 _" l8 X) O
if(!($insert)) {
5 `$ D$ |' v0 K  D" }% `print "Useronline Insert Failed > ";
8 L2 `2 o- B$ B+ a1 z3 p0 g}
7 U! a5 _% l* [! ^//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
5 @: r  L( U: z! g3 @0 t$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");5 z% l" E) \5 X  K: ~
if(!($delete)) {
( X" O+ F, e, F2 Fprint "Useronline Delete Failed > ";
. }  R. J3 N( z. o9 t- i' h1 ^% W4 P}
  C& i3 ]5 c7 n/ n8 F//select the amount of people online, all uniques, which are online on THIS page
. {+ T4 I+ y1 o1 B, |9 v- e% d$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");/ T4 d* \& N6 x2 `2 _% S2 a
if(!($result)) {
8 i$ F$ e) R+ gprint "Useronline Select Error > ";
/ D. D+ t' P3 a4 X" `}5 h9 \. x; \7 q6 s
//Count the number of rows = the number of people online
/ z: j, s" K" Q2 I* @$user = mysql_num_rows($result);. p+ }& O- a5 R1 d7 G0 ~  l$ m; ~
//spit out the results0 |0 \: K) K7 N0 \  K
mysql_close();* I! `, s/ t; B$ H" |4 h1 n
if($user == 1) {
9 V- D+ c$ U# Wprint("1 user online\n");* Y% G$ X4 g; X% v- R% q1 [  z4 W
} else {$ s" u' q4 @5 O! R; x
print("$user users online\n");
4 \! z9 w0 B' P' Y/ M* q2 i( {}
& ~/ S0 R! ~2 M?>
) o+ U* D3 G" E$ Y7 h- o+ K* v3 X+ f9 t6 A5 D0 G/ }
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。7 X' y, H1 F$ h; Z
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
# P# ~, m2 B) n9 a! G( J" E我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。' y1 @$ H! \: ?
当然啦,这两款主机也是相当不错的。) ]) q; v3 g( a& D( G, _0 x1 E7 D
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年( k/ U% d) r& G, N1 }
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年' X1 U3 g7 M! N4 n# G8 y" n$ f( t
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ & f2 ^" n1 I7 Q0 j: r
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55$ ~( b5 l! v; A8 Q
自己加QQ去问吧。

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