返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!8 w! m5 |" _- B' k& V$ h0 p4 y
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。& [4 F% Q* C6 |+ |! m/ ^
首先我创建MYSQL数据库表。+ Y- y! J" @7 |
CREATE TABLE tablename (
' j: N2 h! A8 {# M3 q2 p5 X) Wfield type(max_length) DEFAULT 'default_value' (NOT) NULL2 b' k/ |% b$ p3 j
}可以使用的SQL语句。
1 |0 w, T2 |; CCREATE TABLE useronline (
  `& h5 V0 b% w; r$ ^8 V& Jtimestamp int(15) DEFAULT '0' NOT NULL,
4 r, N1 O: t9 Z6 f) Pip varchar(40) NOT NULL,
" R+ z- i5 |* D/ G- s& ^file varchar(100) NOT NULL,; E+ n2 C) O  ~9 }7 ^
PRIMARY KEY (timestamp),7 C! c$ `1 {4 ~9 g
KEY ip (ip),
+ \! Y9 j  L# P2 h3 B8 T7 M! BKEY file (file)# _+ J- T+ d6 L
);下面我们是PHP脚本,首先我定义MYSQL的信息。& _9 R% d( @5 h- O
$server = "localhost"; //你的服务器
, E, Y3 ]5 w! ^$ A$db_user = "root"; //你的mysql的用户名
3 H( e/ u5 W- P" i* \  ]$db_pass = "password"; //你的mysql的密码2 v% g7 |8 W5 f% ?& Z
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)) S7 M9 w, P5 O$ g2 C" }
$timeoutseconds = 300;取当前时间。0 g4 X% ?8 M5 o6 \; w
$timestamp = time();上面的完整代码:) i( b, e+ N8 b/ V) d
<?php" e+ x7 a5 i8 d: |
$server = "localhost"; //your server
* H& ?0 n, l1 i& G/ X! o# l' g$db_user = "root"; //your mysql database username- f9 N0 w* f2 E7 F, {
$db_pass = "password"; //your mysql database password if any
8 c: P( o! h/ |2 J- r  O$database = "users"; //the db name7 E+ ^# E2 a. p+ B4 \
$timeoutseconds = 300;//timeoutseconds limit/ ^0 L6 B7 X) ^+ w' S9 ~/ r
//get the current time6 l% f! S+ R; }" g4 o1 q) i# S
$timestamp = time();
5 m7 C% _, `4 x/ l$ Q//calculate the lowest timestamp allowed
: K) V2 }! D, }! {2 ]) ^$timeout = $timestamp-$timeoutseconds;6 S; e- Z) q0 N" H8 Q& I, @' e
?>连接mysql
5 N  D7 \0 |5 I& J' O( j6 Amysql_connect('localhost', 'username', 'password');也允许使用变量形式。
1 @, \2 N% K& M: A9 P; j6 qmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
5 l8 H$ {  M/ d1 }mysql_connect($server, $db_user);查询数据库的代码:
6 _, `! I- E' v1 w9 o# P. ]8 E$ Dmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
, x8 V7 l# F* J( R, `$insert = mysql_db_query($database, "INSERT INTO useronline VALUES; Q7 ]  l! r# ~
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");$ |" t4 ]3 f7 E  M* l3 t
如果用户用错误信息的话,这样处理。/ Z4 w; r$ j6 y8 Q* @' T7 O
if(!($insert)) {
* S. g" K8 Y( b* _# k+ y9 ~  Vprint "Useronline Insert Failed > ";
+ u3 W$ c3 r: E5 \! S) B- c( V}然后实现当超过设置的时间就删除该用户记录。: H% V; o) z0 n. ]* Q3 s# ^
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。, k0 C# I: m+ W8 z$ ~6 A. h
if(!($delete)) {
4 b  X( ^) ~; ~" J( [print "Useronline Delete Failed > ";" y4 u6 ]7 T: a& L" U1 L, u  Q
}下面我们解决数据库中不同IP的问题; E# O& s* t% ]& D
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用- X: |$ Q0 Q4 {8 K; ~
mysql_num_rows(query);来统计用户,代码如下。4 D) H- w8 R0 |& l
$user = mysql_num_rows($result);最后关闭数据库。
7 A, b3 u0 @  j: Imysql_close();显示在线的人数。
* `  ^, K: T- ?2 Lif($user == 1) {
# `( A* B. ~4 L' [% O' D5 u4 gprint("1 user online\n");
! |3 _0 F: ^! n, j  }9 u7 A0 |} else {
- Q7 {5 ~4 H' f, Y8 eprint("$user users online\n");! [  p. R. \" x$ W( P" `3 t
}最终把上面代码写成一个PHP文件如下。) l; n$ b  n( x/ {7 _6 f. o
<?php- \8 P* Q$ j/ b
//Put your basic server info here
% @5 |' m& Z. C8 j$server = "localhost"; //normally localhost6 Z% l( d" J8 k( f0 _0 ~4 m
$db_user = "root"; //your MySQL database username
8 W7 X! i8 r% D$db_pass = "password"; //your MySQL database password# [. R3 Y3 J* i# Y* H8 w
$database = "users";
  c2 U2 s  P+ c( e4 @) w$ w6 w$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are4 `" @1 D1 _6 {" o+ f" C
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last' i- Z4 y0 p, s0 t7 k
// $timeoutseconds seconds); B  Z7 ?; C9 u7 `
//this is where PHP gets the time" J: G8 d. s* Y/ r" s* B
$timestamp = time();; x1 [/ s  S- S0 M2 w( ?
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed! K0 \# D) p0 p  j
$timeout = $timestamp-$timeoutseconds;: q# {3 ^5 z( L+ Q
//connect to database! L! K7 l3 \( c' E; k- \
mysql_connect($server, $db_user);
9 M9 I" G" ~6 g: u+ B& H: S+ [//add the timestamp from the user to the online list
; ~- ]' D6 P" H5 R9 I: F$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
" C& V+ F( C) R$ x' {; T('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");8 e1 f! o  C; W
if(!($insert)) {
% `$ J' ]. M. }! Mprint "Useronline Insert Failed > ";
; p' x3 m  W/ S2 n}* {$ Q% Q, _% ?& t7 a1 }, v8 U
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.9 m- N' T. ^' K9 E0 D) P9 }
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
1 P& A/ D1 ]4 W, y$ E& c2 U( V( sif(!($delete)) {! M2 m$ w) A7 \9 o7 X8 T, J
print "Useronline Delete Failed > ";
: u1 r: l8 }7 z2 j- n}
: ^+ l  r! {* U/ I//select the amount of people online, all uniques, which are online on THIS page
& U$ \5 t! E) P8 T$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");7 K" B/ @& D/ p$ y# J/ j# Q" U% }) d
if(!($result)) {
& M9 z3 z. U) I* H) h2 Xprint "Useronline Select Error > ";; z5 D4 G- [1 v; O8 Y$ O$ ?+ \
}
" t% M" z5 o' o" w5 J  ]* r( s//Count the number of rows = the number of people online; E: L; g2 o5 S$ [8 n
$user = mysql_num_rows($result);0 J& d4 u1 G3 f2 q0 _  u
//spit out the results
+ B: `& o) t6 [4 Y  ^/ Jmysql_close();
2 S. O7 w( ?" ^" g/ q  V; _if($user == 1) {% S( W0 J/ z0 N; a1 ]
print("1 user online\n");* T6 {. ]" \# }
} else {- ^; B7 |5 p0 v0 l  S. e
print("$user users online\n");
* y& j7 C; i6 Z9 N( W- m: [}- P& o4 u' ^) m# l" u. Y
?>2 N* g0 b2 n- C4 I% x
) [6 G7 L1 P2 m& H( c% b* N
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
4 E* p4 i6 u; S: d$ }# M7 I时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
' N  `1 s; N: G' ]. H+ B我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
5 {0 s- \8 J; n, l1 k当然啦,这两款主机也是相当不错的。- p& ]$ E, y+ }# a8 M4 \* j4 R
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年, s( N4 Y" I/ l  V. I9 W
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年8 p+ r; n2 ^# i. f6 Z
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
" W  l8 z, P! b& j% b0 @空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
1 a6 o* W" U$ [4 @0 t2 w' B自己加QQ去问吧。

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