|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!4 |! Y$ O2 r" O9 E
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
$ V% `8 U, d3 ^7 z* ?, K, T首先我创建MYSQL数据库表。
2 V3 Z$ V% X3 W2 SCREATE TABLE tablename (
3 f, h! X9 h; R0 qfield type(max_length) DEFAULT 'default_value' (NOT) NULL- ?2 V/ u0 B5 ?! l+ c
}可以使用的SQL语句。, z% e# p* Y- F% Q4 a
CREATE TABLE useronline (0 d. D4 F' c a! S; C& s
timestamp int(15) DEFAULT '0' NOT NULL,0 l$ I4 A+ j# U
ip varchar(40) NOT NULL,) X& s+ K" N# [. t7 L
file varchar(100) NOT NULL,+ u0 }( X' g! }2 ~$ V ]2 `
PRIMARY KEY (timestamp),
: a7 e, [. a. I% C4 R9 FKEY ip (ip),
) P6 j" Q. p( NKEY file (file)
0 ], ?; ]. i+ o' K! x! e);下面我们是PHP脚本,首先我定义MYSQL的信息。5 r& \1 H5 v2 W# S5 [* b/ z' M
$server = "localhost"; //你的服务器 Z- p+ ^4 h' }6 O) {4 Q/ {4 j. r
$db_user = "root"; //你的mysql的用户名
2 l: Q& y% V. H" t+ T9 g$db_pass = "password"; //你的mysql的密码
5 b6 |* r# P. r4 l0 ]6 s4 j( \$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)8 L7 j. ?/ ^8 P- x' U
$timeoutseconds = 300;取当前时间。0 L( \7 ^$ T- M( A
$timestamp = time();上面的完整代码:3 V5 {. N% t2 L8 x. P# C
<?php
; n, b1 `2 @1 H' B# I$server = "localhost"; //your server
! {5 b5 K3 X* L8 I# g- u" F$db_user = "root"; //your mysql database username
% \& p3 B5 m3 @3 {+ s3 G- f$db_pass = "password"; //your mysql database password if any/ k+ N7 p" O# B' r: T# I
$database = "users"; //the db name* L2 A. Z$ S4 w" _0 S
$timeoutseconds = 300;//timeoutseconds limit
3 W: |% l. t! c* t2 q//get the current time
2 J8 m @& \7 @( l9 [$ J' m$timestamp = time();
- E& x T, q% O. ?//calculate the lowest timestamp allowed2 l# r6 s0 T, F1 w; H. t+ C+ h
$timeout = $timestamp-$timeoutseconds;' l) a6 h; S$ } ]
?>连接mysql
9 [0 B8 _7 p9 [9 Bmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
; C4 r' b* E3 @! g5 O. Zmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接; k; X8 v& m- r( O4 ]9 P! {
mysql_connect($server, $db_user);查询数据库的代码:
4 P) e/ s' @6 n. ?mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。% M8 D7 u+ g' s, t* |
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES& R$ j5 K& X. R" z& V/ B
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");# D. W; r3 a& V, x$ {6 s
如果用户用错误信息的话,这样处理。& w9 `1 i: a1 e4 y: o h+ Y
if(!($insert)) {
1 k* A s, Q4 p e2 C) U# pprint "Useronline Insert Failed > ";5 J, ?" @* ~' T6 |
}然后实现当超过设置的时间就删除该用户记录。
; z# \" T6 l2 ?$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。1 W, J' R5 ^/ ]5 n- x, b N
if(!($delete)) {3 e; B' G3 R9 o
print "Useronline Delete Failed > ";( `) S3 R5 V% D0 X7 ~$ x$ s
}下面我们解决数据库中不同IP的问题 p/ f6 h6 G: ~1 y5 g
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
8 t! I" x0 l& F. Smysql_num_rows(query);来统计用户,代码如下。
4 A0 _( @# {2 G5 p$user = mysql_num_rows($result);最后关闭数据库。1 Z$ ]2 g) q- T' {; y! L
mysql_close();显示在线的人数。
9 X$ P4 p, }3 Qif($user == 1) {
1 Y6 a1 W% o4 _0 v% [print("1 user online\n");
0 i6 j8 [& _8 E* {+ S} else {9 ]5 X L+ B/ D9 B M8 B2 b
print("$user users online\n");
# @" v- R2 l; A}最终把上面代码写成一个PHP文件如下。
1 N9 o. b b! I<?php$ l- t6 H* D9 o7 Y2 h! F+ ?, ^. ^9 z
//Put your basic server info here
8 P. `% l) x2 c4 t$server = "localhost"; //normally localhost3 g6 H h+ P- Y* F9 h1 ^, X
$db_user = "root"; //your MySQL database username" K9 g' q: D( f0 i9 _. i
$db_pass = "password"; //your MySQL database password8 ]& f/ @+ ]2 Q
$database = "users";
, ^! _$ Q; ?2 `, `5 n' o$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are/ x9 F* r8 n/ `1 l( ~( {
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last/ A* G7 Z! K! k/ q4 B$ W- u8 k: p
// $timeoutseconds seconds), a* I' G, u& \
//this is where PHP gets the time! \. z1 Q+ [% I r4 z
$timestamp = time();5 w" x5 L3 Y1 }
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed) L+ O0 b; S; n7 e2 Y# b
$timeout = $timestamp-$timeoutseconds; c1 D+ ]( W% }# H( p
//connect to database
: N5 a. V! @5 S: t- V7 @, M; Mmysql_connect($server, $db_user);+ n" U( n" g3 T( [" ]5 i* h
//add the timestamp from the user to the online list8 f' x8 c( A% s; V0 _) A4 ]
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
) ?' `' j" l! g! a8 u('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");3 I: _& r4 K) ]' W$ L
if(!($insert)) {
6 |& o; w2 }' eprint "Useronline Insert Failed > ";
6 Z/ ~( f% r. ]- V/ S$ {6 D}0 X- w( i& I4 a! Z- _: J
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
: z s( ~4 r- y# {: G0 e$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");8 w7 ~/ z- q; D* O1 \( _
if(!($delete)) {
0 i; K# ]9 X9 g/ Z* v9 H+ Tprint "Useronline Delete Failed > ";4 b' O' U, h+ r6 ]' i4 U5 ~
} K& X, d/ y/ ?) k* C
//select the amount of people online, all uniques, which are online on THIS page
. D: J+ _. _( R. k: I& a$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");. a- Z* t1 R6 A* t+ q5 f0 f
if(!($result)) {
9 P/ |9 c5 _4 S1 c% `! J! N1 p8 ]print "Useronline Select Error > ";" i! V: }+ w1 v- ?6 Q9 F
}
& l' Q! U! ]7 D" \' |% w+ F' ^//Count the number of rows = the number of people online3 d+ ^: I g; |
$user = mysql_num_rows($result);- I5 _" G3 O& K6 C
//spit out the results
" h4 A0 u2 h( `9 i2 Umysql_close();
. \) ~0 |$ o) ]# Z$ `- Sif($user == 1) {" Z* e Q% P# D5 J$ s) w
print("1 user online\n");, i' O6 ~; v; }
} else {0 Q' x: C5 e0 b: K
print("$user users online\n");
7 f2 s' @8 c, e! P/ G}
. \9 h0 e4 s3 T$ B# D& m6 \" Z?>2 p1 z4 R0 _) W; e# P
- R0 l+ U' L: a6 k, Y1 m
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
m0 G% U: F$ Q& i0 a时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
( F7 D; v/ U. S3 _我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。! t. l/ H* i, @) F
当然啦,这两款主机也是相当不错的。+ Q& M0 l) P [1 Z. r
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年* N; M2 G; w1 \4 K) t
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年1 b: w1 ]! Y* ?& q' W( C
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 2 O; f' {6 h' T9 b$ G
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55* E% t7 [% c5 W& a' B
自己加QQ去问吧。 |
|