|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
H" {1 m6 \3 ~2 D3 W0 d3 J! P8 Z! ^我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。4 ]: { W6 `3 G, i0 o
首先我创建MYSQL数据库表。
0 O9 p0 l. U( z# HCREATE TABLE tablename (1 u$ ?% ]' o; I3 ]1 y# }! j
field type(max_length) DEFAULT 'default_value' (NOT) NULL7 r$ l3 Z8 B$ ?: N! y
}可以使用的SQL语句。) Y+ P P' l3 X* m. N
CREATE TABLE useronline (
3 p% o4 Y- _( x( O9 M7 Etimestamp int(15) DEFAULT '0' NOT NULL,
9 C# ?# y- _, W3 f# W" T1 Nip varchar(40) NOT NULL,: R1 I* A: o d+ P c9 E
file varchar(100) NOT NULL,
. s& I+ w- n4 A& V6 @, }8 T3 GPRIMARY KEY (timestamp),2 W4 j9 z$ ~; F5 V" T
KEY ip (ip),
" W0 E1 ?* e1 r. m* vKEY file (file)
& b" m" `2 H: B0 b' z4 Y* |4 d);下面我们是PHP脚本,首先我定义MYSQL的信息。% N, o5 H. F2 r- _# \6 W% H0 I K
$server = "localhost"; //你的服务器
% ]/ |) E4 k& B$db_user = "root"; //你的mysql的用户名
- ]$ C, D! V, l+ ]. a: @+ ~5 }5 ^$db_pass = "password"; //你的mysql的密码; A; [* E! L! ^0 Y5 G, `" @8 @
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数): h# M0 _5 [5 C, E9 y1 g
$timeoutseconds = 300;取当前时间。7 E& e0 c! l( z# O
$timestamp = time();上面的完整代码:9 j3 ~4 N9 N+ ^# H z/ z8 i6 g
<?php" ]* m0 W/ O: C' x
$server = "localhost"; //your server; N+ s9 v4 b# u9 [7 I
$db_user = "root"; //your mysql database username& V7 R$ B* [8 k1 s
$db_pass = "password"; //your mysql database password if any6 ~* F W+ w. T# o+ S+ T
$database = "users"; //the db name
6 G* g; p9 H4 J6 O$timeoutseconds = 300;//timeoutseconds limit
# t s) l4 T* m; w h$ A* Z//get the current time
+ A% M& z+ x- E, N7 j9 x `$timestamp = time();
7 T( u7 r% w# Y! R, ~+ z( l& Q//calculate the lowest timestamp allowed
! a$ e2 o b3 O' w6 i0 l8 L& R! B$timeout = $timestamp-$timeoutseconds;
: u' o; ]" ~ W+ u% X# y: j?>连接mysql9 ?; F9 l5 @3 C6 m" v) R
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。" i/ B) w, b$ A: k+ n; N
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接* S3 s* H' Y# s9 o% y& f
mysql_connect($server, $db_user);查询数据库的代码:- P8 H5 E) T2 F6 i
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
# Q. i1 h7 [( ~# M$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
! f* _" S) z' H) B* i6 I! A('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
( W6 ?) Y8 S" Y2 H如果用户用错误信息的话,这样处理。
" m1 N) I& t2 X) {9 |) w8 zif(!($insert)) {
& L/ {7 n* l8 ]4 T* gprint "Useronline Insert Failed > ";. O# ?: B2 V, |2 ~
}然后实现当超过设置的时间就删除该用户记录。# K: h- U( K* I8 ?1 _. q0 S' d
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。8 b- G& R" C& @
if(!($delete)) {
5 I" n2 z6 G8 G8 b3 Dprint "Useronline Delete Failed > ";
" E( ~; K5 k; J' B( I% R3 e" l6 l}下面我们解决数据库中不同IP的问题+ H. M4 K& e: H5 h$ V
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用/ l9 C) T {; w/ i6 r
mysql_num_rows(query);来统计用户,代码如下。
# E" `' ~8 D( a" f5 i$user = mysql_num_rows($result);最后关闭数据库。
6 D3 H; p& ^8 S8 U) H8 Smysql_close();显示在线的人数。
# h) Y2 z+ p; \3 }6 \4 s, oif($user == 1) {
' ?9 R( I9 G$ o- Rprint("1 user online\n");
, E3 n, v( N7 U4 S7 y% Z1 p$ g+ ~} else {
2 x! `! }3 `, f X% T0 iprint("$user users online\n");
: D2 i$ X7 K5 D* c+ |8 c}最终把上面代码写成一个PHP文件如下。4 b& J$ m0 V1 ~) B0 X5 J
<?php3 R% g! z( A" M7 C) T
//Put your basic server info here0 A. S( y3 f' N$ k, {5 i. C
$server = "localhost"; //normally localhost
0 ^/ D6 B7 \( u* q$db_user = "root"; //your MySQL database username
1 u" r s5 z8 E* ~# E" ]& }9 [2 K9 H$db_pass = "password"; //your MySQL database password1 {3 N- } s0 F1 v) u. }1 m2 g i6 Q" ^
$database = "users";
- `/ n) u+ z% x7 p$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are1 C. n7 b8 t) N, O2 Y% J
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last+ j# H. [ m: u7 j3 n. k3 Z
// $timeoutseconds seconds)
Y9 Y0 c- j1 U//this is where PHP gets the time
+ ?1 ^! \6 b( W5 O" m. }+ \$timestamp = time();6 c0 ]4 f2 D4 Y Z, W
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
+ L4 V* U- ~9 D! | d" P/ {$timeout = $timestamp-$timeoutseconds;& ~* |% @2 j# N$ g+ l( |
//connect to database
$ p# M- z2 `1 f1 Mmysql_connect($server, $db_user);1 T v" h& Z* V3 c, N4 f" t: X
//add the timestamp from the user to the online list
9 F/ k( L! t) h$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
' N( z5 z; g- i1 i5 }('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
4 z8 |1 u6 m& Oif(!($insert)) {
6 q/ B5 W- P& T% A& M. {print "Useronline Insert Failed > ";
?- k' x6 E- }- T}
- L8 v" |2 |- p//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
0 i$ \" k3 ?5 d# @" o1 [1 u$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");; b) P3 P* R/ q6 ?1 o- @
if(!($delete)) {
( J8 E; Q8 A3 `8 Y$ Oprint "Useronline Delete Failed > ";
( y2 j `7 a: h- |# N# M% n}0 |( W9 W. ^& d8 \0 w
//select the amount of people online, all uniques, which are online on THIS page
" [" c+ Y. C- M$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");4 i" V5 W* R r, v F' y( g# p
if(!($result)) {
3 A( [0 o( L% Kprint "Useronline Select Error > ";
# \) \) v3 N' O$ o$ W+ l}
2 I$ [9 ~ Y7 C' E//Count the number of rows = the number of people online- u) ^* m1 b0 v1 \) E7 Z
$user = mysql_num_rows($result);9 Y) @8 A& Z- `& y" B4 i
//spit out the results
/ }7 ]! e6 J4 Z" x( s1 Q+ m2 rmysql_close();/ |1 ?% k& `5 ~- L! l
if($user == 1) {( Y* n/ z4 d5 x/ \1 R
print("1 user online\n");
9 U, W6 H7 d+ c( E0 K) U5 n( I} else {
{/ A# }. v) v1 Z3 t7 j' Qprint("$user users online\n");
0 Q, S. [1 I0 }}
( ]( t! M8 ]9 Q0 s# r. U6 M# u?>
# Q& C' r3 i7 `- D
0 {+ v/ `* A. S, F1 s3 ?- [以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。6 d& R i, d0 E0 x! t1 ?
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
2 w6 q2 q/ k3 S0 n& h' C( |我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
0 V5 C w G; J1 t# R, O当然啦,这两款主机也是相当不错的。& a/ T3 j( r( ]2 S
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年1 W' u( o" n* y/ ~) X. {
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年 P9 i/ J# o) x) H4 J
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ . I# y; Y5 x) r/ W# y8 y- d' e
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55" s l, W. Z9 d5 @" q
自己加QQ去问吧。 |
|