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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
/ i# A- e6 P8 |: h( m; H8 v5 }我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
; I) ~. V5 z( [  n首先我创建MYSQL数据库表。& L; ~3 C# r, V% O$ p6 F
CREATE TABLE tablename (
! c& a& y, @/ i4 i) ^field type(max_length) DEFAULT 'default_value' (NOT) NULL
5 m. j! W5 R" y% I}可以使用的SQL语句。, K$ R) p$ _( {9 M
CREATE TABLE useronline (3 W2 ?/ J# P2 ], i( |6 N
timestamp int(15) DEFAULT '0' NOT NULL,
2 e# y; r# g) X# t  c  r" Eip varchar(40) NOT NULL,
3 K$ Y- m: Z( q4 t& vfile varchar(100) NOT NULL,
* m5 \( `  f/ t. ~: g9 rPRIMARY KEY (timestamp)," z, v8 L! x3 g$ q) J
KEY ip (ip),0 y' G% Z: x3 k/ _# O
KEY file (file)4 J. e4 k" h- }2 R, ^+ m
);下面我们是PHP脚本,首先我定义MYSQL的信息。
. u, u7 k0 f, U' a6 ^9 x# t1 T9 y$server = "localhost"; //你的服务器
* [1 a% h5 S, v6 ]' T$db_user = "root"; //你的mysql的用户名* {6 x3 l6 M! F& d- E: Y
$db_pass = "password"; //你的mysql的密码3 k1 s1 W& J+ H& |$ t1 b: `
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)/ f. A2 O6 U) E, X# I0 ~% c
$timeoutseconds = 300;取当前时间。4 |* g6 x: F$ D7 F6 b! Z
$timestamp = time();上面的完整代码:
& s2 O* b2 L3 ~! m<?php. I# g( J' r% w, g
$server = "localhost"; //your server8 ?) o! P+ n. Z; u6 i7 U
$db_user = "root"; //your mysql database username
8 a) l+ A  N2 Z$db_pass = "password"; //your mysql database password if any8 Y3 V/ F' m9 s8 K2 z
$database = "users"; //the db name
6 Y% L4 I$ X5 S/ G4 D$timeoutseconds = 300;//timeoutseconds limit0 w* T4 ?0 ?' B7 b
//get the current time
; k( m" U; A% V+ v* H* p5 b$timestamp = time();
" x" c; L0 Q3 `' W0 m* N0 A//calculate the lowest timestamp allowed( Q( a( A1 u, H' G% j
$timeout = $timestamp-$timeoutseconds;' D' r/ |: F2 M" K9 c, K' N9 [" G
?>连接mysql
7 O% v( `5 ^( Zmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
7 Z3 |- T1 ?0 ~1 tmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
5 k, P$ W1 h. n& _  e$ Umysql_connect($server, $db_user);查询数据库的代码:
; ~5 B4 t" {8 b( k7 |* lmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
; f/ L$ T4 f7 F2 G+ y" B. C$insert = mysql_db_query($database, "INSERT INTO useronline VALUES) w8 H) B! ], m# @
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
5 Y, y) `9 W! k如果用户用错误信息的话,这样处理。
, _1 D3 f1 w: Q! p  L! Z1 gif(!($insert)) {
. Z2 Z5 W+ o8 _  I, r9 Rprint "Useronline Insert Failed > ";
0 m% {# G( K3 J& A}然后实现当超过设置的时间就删除该用户记录。
  ~% z5 z4 E3 U; L$ f; |- B# [$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
7 J; }5 {9 L- x3 k- ~! b2 P" Y/ Dif(!($delete)) {* U6 f3 {$ {5 v9 h& J! P* R1 s
print "Useronline Delete Failed > ";
# T" i+ N7 c$ j6 l( E5 I7 C# W' \}下面我们解决数据库中不同IP的问题$ {+ v/ |& M2 Y
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用6 q" h  ]7 l+ ?  P' S6 @
mysql_num_rows(query);来统计用户,代码如下。$ N: {! b* u$ e% Z2 Z- J( }0 E
$user = mysql_num_rows($result);最后关闭数据库。' }; P/ M6 T& r
mysql_close();显示在线的人数。- L& e# @( ?0 P9 T: @
if($user == 1) {
1 \6 N) C4 q; Z3 r) F. `print("1 user online\n");; W" N" b/ B( D9 Y+ \  h
} else {' ?$ H8 _5 h1 K' T; W  p; [
print("$user users online\n");
- z9 M5 ]! e' z& C! Y9 m3 p}最终把上面代码写成一个PHP文件如下。
; G& F& C: k" M/ z2 y<?php' ]0 _+ J0 c0 s; `$ |0 H# e' A
//Put your basic server info here' G# g. S, x$ {/ U5 [
$server = "localhost"; //normally localhost" V8 W3 q+ C# x5 D/ ~% I. K
$db_user = "root"; //your MySQL database username
  C% a" d/ J/ j/ e# o% Z' R# ?$db_pass = "password"; //your MySQL database password
3 c2 [! A$ B7 x! L/ v$database = "users";
. T' W) U5 w$ j5 r) b3 g7 f$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are; \: S) L: j% {( V. U1 y9 {1 S2 X) M
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last( W1 b$ W3 i% O, T
// $timeoutseconds seconds)
- z/ Z2 V3 e& T/ ^//this is where PHP gets the time
: _3 g( c1 a3 ]) H& x$timestamp = time();
6 h7 i; N0 a8 P3 p" ^# f/ }; \" J//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
: R1 l0 t: q. W$ r: u$timeout = $timestamp-$timeoutseconds;, N6 m  B( L3 u
//connect to database8 K0 P( q8 F: G5 _, Q- O! {
mysql_connect($server, $db_user);
- _# q, H# v( F& D3 S: _: L//add the timestamp from the user to the online list. f8 k3 |: h- D4 w( Z" n) s
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
: U& K, k, C3 `('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
% C9 C/ b' m2 p: j% p# eif(!($insert)) {9 P: `4 W" t/ Y7 e( D
print "Useronline Insert Failed > ";/ d' Q5 I. w/ h
}' j! U7 G5 n' u% ?8 F
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
" z- w2 u3 {# L0 L& e+ k1 ^$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
8 N: J" C6 O+ Q& Z" Q! K0 Pif(!($delete)) {
3 P& m! m6 ?! @/ l# N4 P$ _print "Useronline Delete Failed > ";. {1 d* Y7 P4 ?3 B; B3 L
}
: L# u7 p% @8 P. u% J1 e//select the amount of people online, all uniques, which are online on THIS page( V6 i, f- o* ^; P. r
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");" E* K! m! U* N
if(!($result)) {
) Z9 t: ~7 E5 b( D" c6 i% [: aprint "Useronline Select Error > ";# m6 K2 q7 C2 h% z% E" q: p' o; C
}
" Y& P' j; m5 h4 T( f4 Z3 K7 y# h//Count the number of rows = the number of people online( k! N1 `) v# R/ r% C1 G& F
$user = mysql_num_rows($result);
9 O5 }; [3 L1 A! ^//spit out the results
$ Z! b- G9 C7 Q5 g% n# Z1 x2 vmysql_close();
2 z$ b* N0 H/ F8 e1 |; [; K: k. _if($user == 1) {3 H5 B; p# [6 N+ }2 [
print("1 user online\n");
3 _$ Y' O) U  N( g* C! O} else {
0 J9 O+ w4 _3 y5 Y6 \print("$user users online\n");5 q  U2 u4 U& c
}* W1 a5 y  K* t# n# n
?>
( d( C9 j! T; a, D" u  T+ P: J* x$ t1 e
7 V2 }: ^# V( H! k0 @以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
/ j- q; N" r! X# |2 g( R, R$ J时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。) j# [9 q( m+ q: O0 X7 l
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
+ M, B2 Z6 [4 y, l$ |% S7 n当然啦,这两款主机也是相当不错的。8 t5 e9 m( l# l, ^/ C2 H
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
: [+ L$ q; L& p5 K# y0 b2 ~标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年8 r) r2 }2 O( K$ b
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ $ z$ F2 p3 K" U: t8 x
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
( W- W( h$ s2 h% {( g: ^自己加QQ去问吧。

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