返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
& d- P# M" e- x4 z- g9 e( C. C4 |  ~2 H我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。! t8 g( m* A# `1 s: y/ [+ l
首先我创建MYSQL数据库表。
: C5 E) ^8 y% n! g$ f* ?3 s0 [CREATE TABLE tablename (. m+ q1 U( S" P2 [- F( N
field type(max_length) DEFAULT 'default_value' (NOT) NULL
/ M; `+ i# Z6 \}可以使用的SQL语句。
$ f+ ~( i) f9 F8 BCREATE TABLE useronline (
0 u3 t  P" ?5 F( C* btimestamp int(15) DEFAULT '0' NOT NULL,
" b- `' A0 j# H0 ^" Tip varchar(40) NOT NULL,/ Q( l& _0 r' E! D6 m6 E
file varchar(100) NOT NULL,8 i( y9 [: R& d0 ?+ z
PRIMARY KEY (timestamp),. n/ I5 x( ]  o( H4 {2 v' ]
KEY ip (ip),2 ]6 M; f2 l' C1 z
KEY file (file)" A0 p3 @) g5 _, L
);下面我们是PHP脚本,首先我定义MYSQL的信息。
4 M. w, I! {# G$ ]# {; c$server = "localhost"; //你的服务器
7 n  N% y% F. c" }$db_user = "root"; //你的mysql的用户名5 s- ~1 X1 m, m. Y  A
$db_pass = "password"; //你的mysql的密码; \* P& z9 f& I6 R  p: x
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
9 d2 c% k1 a$ }% z) N# g+ E$timeoutseconds = 300;取当前时间。
2 Q/ X' |3 {% s$ D4 k5 ]9 [# C$timestamp = time();上面的完整代码:
2 _# k" P$ R# b/ f- z# J<?php9 y9 J, b" @! f9 |/ r7 D! m" U
$server = "localhost"; //your server, L6 C  R/ w, v- j
$db_user = "root"; //your mysql database username; z$ u) J9 {3 X( B( {7 m
$db_pass = "password"; //your mysql database password if any& U/ c) C% D" N- v* F2 d$ |
$database = "users"; //the db name
& x6 a5 C, q& Z8 p$timeoutseconds = 300;//timeoutseconds limit
4 ^! y8 C0 r: ^//get the current time) e$ F! p5 q- t% z; |& X/ ^4 S
$timestamp = time();
2 }1 m# F7 K" W7 A; Q9 D1 [. l1 O//calculate the lowest timestamp allowed
5 e7 Y, I2 Z" r$timeout = $timestamp-$timeoutseconds;/ [' u' L7 d6 v% e
?>连接mysql1 o9 R" m$ ^5 T' ?$ N2 Z
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。& s/ X+ x! x  l5 ]- H3 _' Z
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
& @" i. b3 l2 ~2 E0 m4 Z  c7 P4 Lmysql_connect($server, $db_user);查询数据库的代码:6 U8 o% Y2 y( }
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
( ?% b: T" F  n! {: B* H# b$insert = mysql_db_query($database, "INSERT INTO useronline VALUES0 ^9 w9 G" A' m# U( G( y! @0 E1 h4 a# `6 Z
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
/ ~8 m+ m0 ]0 Q! X如果用户用错误信息的话,这样处理。$ f/ s6 d5 D3 U) R' G1 T' z
if(!($insert)) {- ?! u, q5 _3 B6 f9 C; }! X
print "Useronline Insert Failed > ";/ F& G7 _1 n$ d$ ~( B2 \. t) P
}然后实现当超过设置的时间就删除该用户记录。
+ I. J* K, [' C/ Y. ~$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。1 j) \7 Q# h, A0 u& k2 ^/ t
if(!($delete)) {
4 W$ Q  u# d1 i: ?( }, w+ _print "Useronline Delete Failed > ";
* T/ q; m) ]! F! U1 H9 F}下面我们解决数据库中不同IP的问题
! l0 I* _- K5 G/ J$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
/ r, T6 u& ~, X+ Q+ ~4 xmysql_num_rows(query);来统计用户,代码如下。
) I2 m' _! U% \* O$user = mysql_num_rows($result);最后关闭数据库。
4 {  \1 g& ~7 \* F8 J3 p  rmysql_close();显示在线的人数。
0 f! E8 N& F8 _4 Wif($user == 1) {5 ^- v& B4 l" R! A0 C
print("1 user online\n");
3 O: G( G( b' b! P9 i$ y} else {
9 ~5 f7 d8 ~( Uprint("$user users online\n");8 p& B3 T4 ^; r$ q: \
}最终把上面代码写成一个PHP文件如下。
& H$ b$ }8 l8 T4 b<?php
* ]7 ], I+ m$ m0 c2 \//Put your basic server info here$ v. T' H( X2 L6 x; S  u3 \9 A
$server = "localhost"; //normally localhost. T3 I, A) o: s# \* }
$db_user = "root"; //your MySQL database username
+ {  o, p  _' n) n, K" r( Q8 r$db_pass = "password"; //your MySQL database password
" O/ d/ X: v3 Q! h! \: q$database = "users";3 f8 @2 i$ r8 E! N, T! G0 M& _( [
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are' G' ?9 A! J5 H* }% A; B4 v
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
% u7 t4 v& _; q4 b$ A9 n// $timeoutseconds seconds)
8 z7 R3 K  o! k9 f* h: [+ Y: @//this is where PHP gets the time# G9 @+ N1 N5 y: m) {! @* F. |
$timestamp = time();
- s7 L0 A4 u. [1 q6 {9 v//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed  m$ A/ g  E: {  @! _
$timeout = $timestamp-$timeoutseconds;) r9 j& T* g  N: T( [5 W
//connect to database
2 B; ?3 Z0 h% {mysql_connect($server, $db_user);
- E# I$ e; Q( \: j7 q7 m//add the timestamp from the user to the online list! M* R# G4 Q7 B7 G& I0 ?4 {% y% ~
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES( [$ r0 ]5 _  K
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");5 h, {: C) d8 U
if(!($insert)) {
* y. `! j( y) |$ p; N: ^print "Useronline Insert Failed > ";
/ U$ l) l  K4 ?1 c) }+ q}
" U; L% D0 M, q- r3 `//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.1 q" Z! O" I/ r" H9 C/ z# }
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");; k) V; H3 f' d0 g
if(!($delete)) {
# {, d6 ^" _) f& u  V+ Z$ v1 `7 cprint "Useronline Delete Failed > ";2 W. Z# U% r, S* \- W, j6 J1 z
}
, m" s% D& L: j//select the amount of people online, all uniques, which are online on THIS page6 p9 H* y/ _% Y5 H# G
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
% G; g, m) J7 {7 [# k) d9 U3 Lif(!($result)) {
3 o2 q7 n  U& S' cprint "Useronline Select Error > ";, _% t0 l5 w' t$ W! }
}
& s8 H+ F; D  |- T/ I! H//Count the number of rows = the number of people online/ P8 n+ P% j6 `' K1 }' B0 q0 c
$user = mysql_num_rows($result);7 ]) B) S7 a' ?6 c5 V
//spit out the results
& g0 b! H9 [: `5 gmysql_close();! V9 |0 p# _8 X2 f6 K1 P/ l4 R
if($user == 1) {$ \0 ~( d! V) }5 h$ d2 y+ h
print("1 user online\n");7 ]* b' v3 z7 {5 Y/ D/ m8 J: N
} else {/ N; \5 i4 T+ _' L, J
print("$user users online\n");
! D4 ?% v0 L# P" l3 {( J' @}" m1 G8 Y# A: H0 z% J: r+ \
?>
1 g" A* S1 |( C# n, P8 T6 L: p" c7 [3 Z* i7 |
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
" n( P' H4 r/ f" `! b2 |3 e时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
6 q; S- |. J8 O& m; m+ _我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。  P8 ]0 G' e! s, D
当然啦,这两款主机也是相当不错的。6 P3 q/ r- ]" d% d  a7 K
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
' s: F7 k! s2 S. U. z# q* V标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年5 C' _. B1 [) Q5 |) w4 D' T
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
% W9 {$ S7 m, `空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55# P9 r4 h) C9 V0 v
自己加QQ去问吧。

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