
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!' F5 C- m: l$ p0 ^! i: ?6 W
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。, J6 c2 G4 X2 k- U+ O1 q
首先我创建MYSQL数据库表。
$ J3 V. M: w9 dCREATE TABLE tablename (
1 Q( _6 \; ^" }; m! ~' ?; s; n% P" Jfield type(max_length) DEFAULT 'default_value' (NOT) NULL
0 h& M- \' s7 f: b}可以使用的SQL语句。
- c3 `# _* [, X6 jCREATE TABLE useronline (
7 o& \) v R3 r) W9 T1 S+ qtimestamp int(15) DEFAULT '0' NOT NULL,; A) }9 @4 L; g v& p& O1 I
ip varchar(40) NOT NULL,
' {. o9 k* V- |$ K Cfile varchar(100) NOT NULL,
" a. |/ j$ }( Z! q0 iPRIMARY KEY (timestamp),
- h4 F7 E, Z* e E" LKEY ip (ip),
; m$ M% Z. A) uKEY file (file)
! _$ O; P$ Z9 J; Y5 D);下面我们是PHP脚本,首先我定义MYSQL的信息。, ~5 ]& U1 X0 T; G; F$ X
$server = "localhost"; //你的服务器% g+ Z2 r( h, [
$db_user = "root"; //你的mysql的用户名. `0 c: j8 v( K" o4 Q3 o
$db_pass = "password"; //你的mysql的密码
% N. [* ~4 D% j& G6 Y9 ~$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
1 o$ s% U6 z6 t) O9 Y$timeoutseconds = 300;取当前时间。# c* f4 |* [ V( U
$timestamp = time();上面的完整代码:
+ \; U b& R" ^9 a8 H' I<?php
! E+ b' _' k& b. r; @$server = "localhost"; //your server
% x* {* w. Y9 X$ Q' K* x$db_user = "root"; //your mysql database username
2 C* P) h; h: o: M, G+ e" q$db_pass = "password"; //your mysql database password if any
+ M1 f3 v" v# ]% |/ j$database = "users"; //the db name" G/ ] N7 ]" ]$ f
$timeoutseconds = 300;//timeoutseconds limit
" L; H" ]! I0 o9 f//get the current time' Z. _/ _! m8 Y2 v7 ?
$timestamp = time();
8 t$ p, K- @: B& w7 ]/ {- k//calculate the lowest timestamp allowed: T \/ n0 S/ Q* y9 C
$timeout = $timestamp-$timeoutseconds;
* W" X; m- b* N$ C3 a& K" s?>连接mysql% y; @- y, i! T( ^* q
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
$ C* ~0 C3 T$ ?2 ~% \, z/ xmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接" Q9 C9 s8 B# v/ P; L7 x' T% m5 \
mysql_connect($server, $db_user);查询数据库的代码:! W2 I8 q2 w! \2 o; f% \( T
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
# \; \7 `/ Y: t1 M+ y" n9 `$insert = mysql_db_query($database, "INSERT INTO useronline VALUES! z8 r7 k1 y7 I0 W9 Z; ^2 }
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
6 W* n( ?1 \) D! Y w- T如果用户用错误信息的话,这样处理。
/ m- b y4 X3 R4 U" f; v" Y4 Z) {if(!($insert)) {' ?- H8 p" v; N! {
print "Useronline Insert Failed > ";/ S; I$ \9 V* q$ W4 g- m# p
}然后实现当超过设置的时间就删除该用户记录。
; n. |8 R u( D& w$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。4 G3 s$ v. j" d- e" H
if(!($delete)) {
+ b9 f. `" N+ Y! A8 Kprint "Useronline Delete Failed > ";
3 u* ~9 y% y( n w}下面我们解决数据库中不同IP的问题
- D7 q/ I9 F: Z6 }2 o* V: \1 Q, Z' L3 X$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用. P; P, f1 }# y) x% h
mysql_num_rows(query);来统计用户,代码如下。
' Z, T' u$ X, v" f( k$user = mysql_num_rows($result);最后关闭数据库。
; ^- v/ O. o1 Nmysql_close();显示在线的人数。
/ @( w- F+ Y/ b* Eif($user == 1) {
/ d1 u; l7 J( U& ~$ J( ~+ [9 Fprint("1 user online\n");
( T8 s+ {9 S- k6 k. f. P* i% r} else {$ }/ `1 k3 q: n, [/ l
print("$user users online\n");
5 P# v" H/ F! F; M- R. ?}最终把上面代码写成一个PHP文件如下。
1 [8 ?; c, F# d1 }<?php7 M6 {1 r# n# G
//Put your basic server info here
& n: x! H; T& I/ B6 X$server = "localhost"; //normally localhost
5 P+ p2 m# j" G! p/ T4 \* M$db_user = "root"; //your MySQL database username
5 R5 ?7 _8 M" s2 x$db_pass = "password"; //your MySQL database password7 _$ k* n V7 z# r5 @0 A
$database = "users";. Y: j% x( }2 a+ E$ E5 y
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are. u( s7 {( F4 i& G0 N7 T) E
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
) x$ b9 l8 c$ p) ~1 i/ h& @9 [) V! }// $timeoutseconds seconds)
7 P1 ]& Z( r" I! c! e# ^: y/ U4 }//this is where PHP gets the time+ E8 e- y# o% E+ T) C8 `: {- p
$timestamp = time();8 Y) g, f( }4 t p& h
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed2 C+ a: {3 z; T
$timeout = $timestamp-$timeoutseconds;
+ `9 {( `' f! Y# {* {//connect to database; Q% T1 n2 l$ s$ n5 `: N% f7 T' J
mysql_connect($server, $db_user);
' z4 P @* ]2 g. V& c: o! d% c//add the timestamp from the user to the online list. A* U0 N( }/ e
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES. E0 r( Q% i7 K4 t3 F: _, c
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");3 Z. G. \1 Z( z2 y$ q
if(!($insert)) {5 G W) X* i* |& U' O
print "Useronline Insert Failed > ";
$ r: C" S/ q( J0 {& u! q# x9 ?}
8 F$ N& i. I) |5 C& ^& y0 `9 [9 J//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.9 H M( x @/ }0 K& l
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");1 }7 x- j4 Z, I1 c# m! k
if(!($delete)) {
% i) _" H( F" {- e) P! Qprint "Useronline Delete Failed > ";
: t; F* z) V n3 @/ b}
. Q: I B; y S- A+ s/ R& H; m//select the amount of people online, all uniques, which are online on THIS page8 L, f. S) O- E3 Q# A) u
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
3 c" g; A) m7 |2 e, M3 k: Gif(!($result)) {
G# O9 C3 y, D* ]$ d2 e" pprint "Useronline Select Error > ";! B& g5 o! }- N+ f8 y
}9 x/ P! {. s, K3 H
//Count the number of rows = the number of people online
- Y+ v/ o7 [" ^. T$user = mysql_num_rows($result);" n. }7 f* Z5 m! n9 r& r
//spit out the results
W! _- Q$ t" c* b% kmysql_close();3 s$ h w5 a: m; N
if($user == 1) {7 v! _$ p& @7 c- [0 C
print("1 user online\n");2 a. q3 `# ]) b' X8 [. z: ~2 K
} else { s7 Z9 E6 L' b' E! b% q% ^
print("$user users online\n");
% b: v5 V0 L# Q/ K+ q}4 d0 V: V5 q5 M. H7 }' m$ A* p% T0 k
?>9 F: @. s( ~, s
% |4 P! Z, F5 v
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。 j" e& W9 X. x. o: ~ k% n1 v9 E- h
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
, [( j0 N- {; s+ ?; @! T* j我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
) Z' K4 x/ V* r, }$ x* A2 s( J当然啦,这两款主机也是相当不错的。( X2 J+ S- V; X: Q
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
( A( H4 c: A/ h/ R# o% A! d$ ^- r标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年! b# d+ z7 {# u. h# j) ]
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
! m/ u# V: J4 I0 N) ^9 S空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55. ]# a) l) ] U2 S& s/ n$ u
自己加QQ去问吧。 |
|