|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
$ f( K# S) T1 R3 M7 N) B1 E- N我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
5 z+ ?, p+ h0 U首先我创建MYSQL数据库表。; R) n( Z/ S; J1 g1 b8 i
CREATE TABLE tablename (( T' b) O: Y9 X) O4 F* [) k
field type(max_length) DEFAULT 'default_value' (NOT) NULL
4 A6 S( G& I, z( z- R2 c# [* w5 c}可以使用的SQL语句。
( ?: W8 [" W$ J6 ~CREATE TABLE useronline (
! [4 M+ ^" p! J. z! Vtimestamp int(15) DEFAULT '0' NOT NULL,9 [9 B1 E' n Z' g% Q/ j, |
ip varchar(40) NOT NULL,( c& l9 L$ {; I5 C- ~. d
file varchar(100) NOT NULL,
5 A$ I9 G6 P: z. N7 ~9 ]PRIMARY KEY (timestamp),
* V# y% `% e5 k1 w( O8 a* X1 fKEY ip (ip),
' X+ U- X" @6 [3 dKEY file (file)* l# b$ W( T. J* y
);下面我们是PHP脚本,首先我定义MYSQL的信息。
( M: K( S2 d( }' x$server = "localhost"; //你的服务器
+ c b. a+ F' Z) `5 s$db_user = "root"; //你的mysql的用户名' U3 i: Z/ ~0 ^3 V$ ~/ Y) x
$db_pass = "password"; //你的mysql的密码; k5 A$ e" P Z& a- m( w; j
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
! g y- q' Y) E: ^0 E$timeoutseconds = 300;取当前时间。
/ L0 E( ^; H/ [$timestamp = time();上面的完整代码:0 i; C# a0 e6 i Y' g
<?php1 G" A# e F, n5 K# S, R* A1 w8 f
$server = "localhost"; //your server
0 ~7 a6 l& e+ W# E0 n; K! u$db_user = "root"; //your mysql database username6 }4 @" V R) x9 d* P
$db_pass = "password"; //your mysql database password if any
7 U: t" S7 u B H" X8 d$database = "users"; //the db name
+ M; L S: |6 `# n9 f$timeoutseconds = 300;//timeoutseconds limit
+ Q6 C! \% ~* W5 V//get the current time3 o2 v$ V& W3 i0 F, l M
$timestamp = time();! }2 n: {$ I! S5 x7 i6 q3 p, M# m
//calculate the lowest timestamp allowed
9 j w. [: g! Z, p, n$timeout = $timestamp-$timeoutseconds;
' v9 N! h1 l) V$ ?, S- h& {8 k- ]' x?>连接mysql
2 B6 u' \( l9 a) j* q3 @0 h) }mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
% V2 d; N- ?/ f/ \$ R1 bmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
: K& k( l& ?2 g5 amysql_connect($server, $db_user);查询数据库的代码:% e+ [2 l! J" k+ h: ~+ n. o
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。9 W+ X; r! [) Y2 T- m- E
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
& X( U, ^9 b$ @- `" O' R('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");& w3 n# h2 i: w* K! ~
如果用户用错误信息的话,这样处理。( E0 c; J3 O7 l
if(!($insert)) {
( H- s' W! C# P$ A! Iprint "Useronline Insert Failed > ";' a2 ^& W; M0 E% w, w: R9 c8 _
}然后实现当超过设置的时间就删除该用户记录。
' R" Z# L! n! N. q% a$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。9 o3 a: ^+ {) [' h+ G8 Y0 q) u
if(!($delete)) {& t5 ?, V5 W8 d. @
print "Useronline Delete Failed > ";
* m2 ~. t) n" w; F3 l; X f) T! R}下面我们解决数据库中不同IP的问题' x) E5 u$ `3 s1 y8 r) t: c: D
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用( t9 M! L3 g" A; E0 I
mysql_num_rows(query);来统计用户,代码如下。2 R' |- f' d8 ?" U( M( _+ ^
$user = mysql_num_rows($result);最后关闭数据库。% m3 O7 H% a6 G. x, j
mysql_close();显示在线的人数。; T Q7 s+ o+ x& t- _9 U; H e* c
if($user == 1) {7 n' S S2 w5 Y2 ?$ r6 G: e" n
print("1 user online\n");8 j6 u1 S( S# i! _# g+ I7 F
} else {' y" p- |. p2 K8 ]( x& F `
print("$user users online\n");
4 I+ h+ T& ~6 A}最终把上面代码写成一个PHP文件如下。: O4 k8 E$ _' K0 v% y4 @6 i8 S
<?php6 R% l0 e* d Y# e T4 z/ Q
//Put your basic server info here
/ s/ Y4 q" k3 b) t( x5 S- u$server = "localhost"; //normally localhost
# K( D2 [' _1 j# t+ P$db_user = "root"; //your MySQL database username
( x6 c9 }5 \* r- R$db_pass = "password"; //your MySQL database password2 r* m E1 g l9 N1 e' A+ M0 f
$database = "users";
1 B8 O% y" j8 u6 x; ^2 d. F) I0 u$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are! x3 v" I3 p. l9 Q" R* G7 b+ i
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last) ?2 H4 G O/ h7 V% X9 s
// $timeoutseconds seconds)
6 O3 A1 \1 s" m I//this is where PHP gets the time
% {* A; Q8 A7 e5 i+ d4 r" S* `$timestamp = time();1 f8 [. X1 [& y H
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
) ?3 h! Z/ O- o: Z$timeout = $timestamp-$timeoutseconds;* l9 s9 ~, h! a6 e$ u
//connect to database
% i; T ]! L g% c, imysql_connect($server, $db_user);* O; j9 H, I0 c
//add the timestamp from the user to the online list* t K6 a H2 @ t, Z7 t# U4 e
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES$ Y$ x' |& _6 Z' b9 V
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");( `1 l$ z5 [* B0 m3 j
if(!($insert)) {7 |; [4 \3 \4 _5 E& R P; |% }
print "Useronline Insert Failed > ";
- ~* Z# K- L; |, F/ X) M7 c! ]}6 Y* p; C6 {; g" L: K0 L# F' z! p7 [
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
" L0 Q) j. ~0 t6 ` N4 v' G$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");& _- ]! `9 \9 G) j, D% f# \
if(!($delete)) {7 ~& b7 l4 E+ { G0 t* a
print "Useronline Delete Failed > ";
& z6 h+ w. p+ R& g) ^( ?}
/ m$ X5 H% g# U" ^8 y; s# P% `+ s//select the amount of people online, all uniques, which are online on THIS page) I, }" j$ D5 `: A, O8 K! {! P
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");9 Z3 c# k. l& G& w% {( e
if(!($result)) {! p4 q2 y/ e3 P0 I/ L
print "Useronline Select Error > ";# W y7 s) q0 n( R+ X8 P! e9 s y
}
0 W. E7 K8 T- w9 A7 o//Count the number of rows = the number of people online
5 h0 \- z# S: Q7 D* Z2 h7 t$user = mysql_num_rows($result);
4 v% k6 b2 v0 K( B//spit out the results" R& e" x1 _2 G/ w w: [$ k+ W0 `
mysql_close();
& ~* H' L; b, L$ b" j, @if($user == 1) {
6 H7 {$ q) n1 z4 I! bprint("1 user online\n");
' t3 p/ I# @% C! E9 M} else {
4 I) a3 R! N# R! a$ o. c( Yprint("$user users online\n");
" p/ {0 v: |8 n4 }+ M1 s}
7 q, c2 v+ _$ P% ]# F; V?>
- D7 {/ ?# C6 P! Z9 H( n 9 r* T# d9 y9 k; C8 o
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。( _$ U) q# j9 [5 [
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
% x) `; D+ W& H. L- @& \我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。' d5 G% @. C( o+ @" a2 {* D
当然啦,这两款主机也是相当不错的。* z* i$ w1 c4 m) T0 ^
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
! n; `0 m! E7 V6 b$ V3 z& `2 F4 x标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
& F7 F8 x! d2 |- s6 z: \( `/ O7 g提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
- E, ?4 M1 D/ D- S) P空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=551 T6 h5 _7 q9 o! T7 w
自己加QQ去问吧。 |
|