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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
; t; `/ c% ^* g& k8 U' b5 ^我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
& P* b4 R, l. W) V! I/ h首先我创建MYSQL数据库表。- o6 ~) ~/ j" I; g$ U
CREATE TABLE tablename (
/ {5 w5 J4 o9 T6 _; U* D6 Pfield type(max_length) DEFAULT 'default_value' (NOT) NULL& s2 G, }2 ^6 n# ~* I
}可以使用的SQL语句。
! J1 x$ I& X4 ]CREATE TABLE useronline (
( t6 k) ^3 B$ B% s7 }1 Wtimestamp int(15) DEFAULT '0' NOT NULL,
% n; ~0 `: ]) B& Y7 ?  \ip varchar(40) NOT NULL,! ]2 a6 P5 p! R" V/ _; S
file varchar(100) NOT NULL,
' z" k' m% d/ m) T9 fPRIMARY KEY (timestamp),4 P* A/ p4 d1 S: X: z2 l
KEY ip (ip)," q& o' y- C0 \' ]# @4 U
KEY file (file)
3 o. ~: n* L( }& s; r4 \2 b);下面我们是PHP脚本,首先我定义MYSQL的信息。
# N# O# T: I8 N3 G$server = "localhost"; //你的服务器, J' J4 p. @- i2 D" [
$db_user = "root"; //你的mysql的用户名2 Y0 G$ C% ~5 j3 Y3 Z/ c5 ~
$db_pass = "password"; //你的mysql的密码
/ X& j$ K) @$ R: N2 L! B$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
. u; b. s# J; f/ c6 Z" q9 M6 L9 s$timeoutseconds = 300;取当前时间。) w$ q; Y$ p7 a$ @2 y
$timestamp = time();上面的完整代码:$ h5 {0 t# ]( A0 F$ Z; _
<?php3 z4 ^! [2 N5 M
$server = "localhost"; //your server" `; @9 j5 q* `" I
$db_user = "root"; //your mysql database username7 y$ s9 @3 P* d) z
$db_pass = "password"; //your mysql database password if any
# o. z/ k1 @8 K$database = "users"; //the db name
* R! d" d+ |4 X$timeoutseconds = 300;//timeoutseconds limit
! T" m. b4 z; A' ]6 I//get the current time/ F) P# G# G' O' ~2 L
$timestamp = time();  e2 Q0 n0 M; `4 |- Q
//calculate the lowest timestamp allowed- G( }) @  m+ ]0 o  q
$timeout = $timestamp-$timeoutseconds;
- r9 @! }* D  Q( R1 j?>连接mysql
) r, D% V7 w/ s  e9 `mysql_connect('localhost', 'username', 'password');也允许使用变量形式。$ f- b! }" Q* t# r
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
0 F8 R" I- Q1 `* P: ]% E1 Omysql_connect($server, $db_user);查询数据库的代码:
/ u" e& f" e/ \8 q& Emysql_db_query('database', 'query');我们只要有访客就要增加一条记录。' e" s- z" C" Q; D) |5 j' j/ S
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
! B( @7 ]6 W/ M: j; K! G) M0 W) F( a('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");( ~0 x8 n7 _$ U; E0 v/ f2 Q
如果用户用错误信息的话,这样处理。3 }" l: O# k3 b9 L. l
if(!($insert)) {
& e/ H: T7 b; ^% f7 C* R* A6 t7 H+ |3 sprint "Useronline Insert Failed > ";
. T0 m8 ]# m4 ^, W! B& b  A: {% D}然后实现当超过设置的时间就删除该用户记录。
& E1 h' X# c5 n+ U8 g! Q$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。+ `, B3 v5 W+ y! k7 t
if(!($delete)) {
6 r- j( B: b3 k4 ~, i& dprint "Useronline Delete Failed > ";
8 h. E+ @. U1 U4 ^}下面我们解决数据库中不同IP的问题
; F% Z- {6 h4 J  g6 q9 N* ]. L$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用* x8 b1 w3 L3 q* K' t' x( |# {
mysql_num_rows(query);来统计用户,代码如下。& C4 R+ u8 ~8 x. N2 S
$user = mysql_num_rows($result);最后关闭数据库。- x! z! A  e- _* P/ ?5 Q) x3 b
mysql_close();显示在线的人数。
& T9 O0 o0 k# P9 i9 wif($user == 1) {
* [/ a; t1 @% A5 C" bprint("1 user online\n");
/ d. U. ^  }# r1 ^} else {
# z# ^* p# s2 L' m# m2 kprint("$user users online\n");
0 o/ m- [' f* ?/ I}最终把上面代码写成一个PHP文件如下。
3 t# X0 E! Q5 @" @! r<?php
1 a) O6 X7 R! w7 P" z# i//Put your basic server info here
. M% B$ Z5 R& a; V# s$ [7 K3 ?$server = "localhost"; //normally localhost4 ?8 H) ~, V7 D& G" X7 T! P, x
$db_user = "root"; //your MySQL database username
5 H  {. R  m3 J, W0 a$db_pass = "password"; //your MySQL database password
* T# o* g$ Q0 Z: {* \8 G! I3 }$database = "users";5 O  e; H1 q$ \. D  N- V' ]# N, Q5 f
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are# T7 R0 m9 P* R& K3 j$ k
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
* Z$ D$ j7 F1 Z; n// $timeoutseconds seconds), D8 \7 q- I- \+ \
//this is where PHP gets the time
2 G+ H+ B- c# Q, ~$timestamp = time();
1 ~3 {* j* I% i- D* M# B" l2 _//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
$ R- n. _$ c- Z$ }8 k$ Y! m" H8 b$timeout = $timestamp-$timeoutseconds;
6 h* T& N' h: Z2 j//connect to database
! E7 c' }! l4 X& Mmysql_connect($server, $db_user);, m0 M! L1 @6 P( G3 y
//add the timestamp from the user to the online list) j; @- _( H/ Z; _3 c( q
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
% W4 A8 Q6 I- U5 K2 z$ B('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");$ l! |" l: q1 Y# \+ K  F; f
if(!($insert)) {
4 j  s3 K* m& d* aprint "Useronline Insert Failed > ";
1 D8 d- L2 g9 c}$ W& o, k; N! s2 [2 N3 _- D
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.8 Y2 M! s1 U! t( f/ I/ O
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
7 t; ?! t) k* Y5 ^7 e/ ~. n) Q& U& Tif(!($delete)) {
% Z6 A2 P0 i- A/ e' o; U3 M% iprint "Useronline Delete Failed > ";( N8 x+ }6 k) m  g/ H- |! p
}  l8 C6 K4 j( S' v
//select the amount of people online, all uniques, which are online on THIS page
9 R% C2 i8 F$ N% Q( c) t& I- o$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");5 r/ h6 V$ c6 C/ z4 i8 V& t+ n
if(!($result)) {' y$ b% A1 z. Q2 B& ?) g
print "Useronline Select Error > ";- m4 P- T" |) I8 z
}
8 |" C9 {6 l8 B+ ~+ \//Count the number of rows = the number of people online2 Q6 y* U8 S2 Z1 I4 f
$user = mysql_num_rows($result);( \6 t* t$ L& O& r* L4 X  u* [! |" L
//spit out the results
! g6 e9 U0 u! A( C! S. ?- v4 Amysql_close();. ?! \1 ~/ _6 H
if($user == 1) {8 \4 a: k9 J2 _; R$ l# x
print("1 user online\n");. J( T! e- n; Q9 u8 K* N8 y2 O
} else {1 {3 T' P8 o& k! I' r5 u: @
print("$user users online\n");. L0 @! s; Y" ~, }7 l: H- o
}5 y: @$ z- o( B  Q
?>8 g3 Z2 X; E0 B! `- d4 x$ b

% ]- a( X  Q+ E以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
* [1 g* A8 d+ F2 o3 R% J时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。0 K6 h" k. Z. t" a& E+ t
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
, D  a& r, Q; e  Y+ H. @当然啦,这两款主机也是相当不错的。
; @; \6 h4 i) F, L, Z9 X$ M智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年0 g" r9 B' P+ y- |% M
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
3 a! k) i5 m8 G, b5 t: b提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ " I5 r; i/ g6 ]& M1 E( x0 C# O
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
) H8 ~# [6 N7 V, P: u8 T7 T自己加QQ去问吧。

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