|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
& }! j1 E& O0 l# L我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
" r' m" \& c% t首先我创建MYSQL数据库表。- e0 w, d& w% u* G2 d" D: L/ {
CREATE TABLE tablename (
+ \2 A0 f0 r5 i& w8 c' n1 gfield type(max_length) DEFAULT 'default_value' (NOT) NULL$ N9 y% V( D3 N+ Z v$ |
}可以使用的SQL语句。
: N4 @% A; e& T4 j0 hCREATE TABLE useronline (; H) X8 m( M* |+ f7 y2 i) T/ T
timestamp int(15) DEFAULT '0' NOT NULL,
- S$ P' G5 k% Q+ @' f9 a% l: Pip varchar(40) NOT NULL,
9 k* V# p- N6 g) ?0 @. |5 Rfile varchar(100) NOT NULL,
; U: T1 M1 J9 q# M. dPRIMARY KEY (timestamp),6 a% X# W# _0 Q; @4 J% R; A
KEY ip (ip),
, L0 \( a7 K" E+ h$ f1 dKEY file (file)# T9 j, T$ t# i* c0 M
);下面我们是PHP脚本,首先我定义MYSQL的信息。
5 E. \* |8 i8 |8 Z; T& K$server = "localhost"; //你的服务器# E( ` z# W0 e% G2 e4 y
$db_user = "root"; //你的mysql的用户名
% e' Z3 }9 I! o: Y$db_pass = "password"; //你的mysql的密码
0 y0 U# }) A" r6 I$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
2 q2 O5 l; ]+ Z$timeoutseconds = 300;取当前时间。
+ g$ R8 Y6 {5 _0 Z2 t5 F& e5 W$timestamp = time();上面的完整代码:
# F, A1 o# q6 n8 h2 R3 A$ D<?php( |. i# Y/ ^- G4 ^1 V
$server = "localhost"; //your server
4 O; [' D' [ ~3 m9 K. q$db_user = "root"; //your mysql database username7 m6 ^2 \9 Q$ O i2 a; i Y
$db_pass = "password"; //your mysql database password if any
7 v4 }3 C7 P# X, S2 G. \! g0 z5 K$database = "users"; //the db name7 ]2 K& q! E8 G1 a8 m0 v
$timeoutseconds = 300;//timeoutseconds limit
# g. O2 U0 U* X3 I//get the current time
: |; M1 i5 |: ]+ I: O3 @$ M$timestamp = time();% m# _& |" Y& ]2 I& n
//calculate the lowest timestamp allowed( c' `/ S: U$ N3 D3 @. R* Q
$timeout = $timestamp-$timeoutseconds;# ?5 D6 e. j0 Y% a: \
?>连接mysql* Z4 y& O6 O V$ Z# A
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
! v2 N) ]6 d1 \9 J: ]( e7 A: C2 F9 Umysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
, s8 y, t$ n4 W7 ^0 b: X: smysql_connect($server, $db_user);查询数据库的代码:7 c4 v' e9 L& n5 Q: v
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。4 }2 U/ h+ G; M- C: U/ ]" n
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
Q- Y, B5 D+ a- Y('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
% Q+ S! i7 s7 f g; a! S2 X如果用户用错误信息的话,这样处理。7 S. H+ Z2 H# f
if(!($insert)) {; w5 G6 @1 q. T: {' B% y
print "Useronline Insert Failed > ";" p+ w0 R) \ [! |
}然后实现当超过设置的时间就删除该用户记录。
& Y. X! o3 H9 g9 C1 W& n$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
$ G4 B W5 ~8 O5 bif(!($delete)) {
) s4 k% k$ i! ~! eprint "Useronline Delete Failed > ";
- i/ m# B0 S$ l8 p8 p# X}下面我们解决数据库中不同IP的问题
1 X# S M- h2 n7 @& a* m: D$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用8 N4 P' B3 q L" r
mysql_num_rows(query);来统计用户,代码如下。; s2 C$ R- ~2 I4 P5 o- u
$user = mysql_num_rows($result);最后关闭数据库。$ V9 f' f! Z( h( D; h/ v1 ]2 |; W
mysql_close();显示在线的人数。
1 f; w: M" x3 Q* L+ Nif($user == 1) {9 c2 }- `% _1 C/ D' [
print("1 user online\n");7 O, @' c9 o/ ]- j: [5 M
} else {, o" w6 g2 Z1 S# Y; H, v, n! H
print("$user users online\n");8 X7 H8 B6 @2 g2 b# m7 V4 n
}最终把上面代码写成一个PHP文件如下。
. i% t. K/ _; }6 d& G<?php
8 {- R2 |! y% v: h* r//Put your basic server info here
4 c6 Q6 W% A' o2 k$server = "localhost"; //normally localhost
# N! N# r! P1 }+ B- l D$ X; i, E# M$db_user = "root"; //your MySQL database username7 @6 R# |- ]3 }4 q0 e
$db_pass = "password"; //your MySQL database password
* G! M& o6 S, ^( ]$ R$database = "users";0 @- x2 p. k. `# s# n' F
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are4 F; @& T' x) u: s
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
# \+ G! L/ w( V ?5 a// $timeoutseconds seconds); O8 \) L$ @# [0 D, {
//this is where PHP gets the time
% _. y0 w, Y) c5 R2 O* p$timestamp = time();6 p) n5 r: F, D. C
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed* p* q6 L, w$ {- J: s
$timeout = $timestamp-$timeoutseconds;
9 ^1 z( z) t' a) G( r//connect to database
/ C7 h2 l/ y4 O! W& Qmysql_connect($server, $db_user);, |5 {/ v+ M7 U/ w8 ~# K* `
//add the timestamp from the user to the online list7 g+ T7 d i( X' ^* {2 c& D
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
; t4 Z( l4 ~, j1 R, n('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
* E8 c9 e' |% F7 `4 \/ l$ Sif(!($insert)) {
# T/ o0 a+ v# `- o# `print "Useronline Insert Failed > ";; i% n& y9 ]4 s+ P% F) v4 {
}
. g4 W2 a( m1 o7 i7 b) G2 G//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
/ K, K0 o1 [2 ^( V$ ?3 j$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
& h# K* t3 k4 c: A) G; i6 M: S' m9 fif(!($delete)) {" c( B; H% K) C3 X* c
print "Useronline Delete Failed > ";6 S( T% C" J. J# v
}% w( V) v. r& G; T
//select the amount of people online, all uniques, which are online on THIS page
) _7 x. v5 n9 Q, p, ~$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
4 s' f# J& i+ f1 c' zif(!($result)) {. K$ p. M% |" H5 p" s
print "Useronline Select Error > ";
% D! Y8 b: ?5 |* }1 i}
/ _& Y8 V7 h$ U& e$ E5 t: X$ L, O) }0 s+ F//Count the number of rows = the number of people online
( I4 H6 s5 r0 j, l$user = mysql_num_rows($result);
8 R: {% f; {5 m4 L8 H//spit out the results
. u- L3 H$ M- t& o7 |# J" cmysql_close();
- J8 ^ a' V3 v4 i" ]2 I5 g! ^* }if($user == 1) {3 `* u) K0 c% Y8 d3 a z
print("1 user online\n");
( E; c0 w& r4 F( y} else {/ Z' y1 w* h+ T2 R6 w
print("$user users online\n");
3 r. A9 T b! G}8 i: J u; H5 i( e3 p5 Q* H
?>
7 O9 R: I0 X4 T0 Q- {: s 3 ]. Z3 x/ u/ Y( b/ `5 q4 E
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。# s, d9 u. v3 r/ P( F Q. ?5 I# p
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
3 N6 ~; ^. m! N9 O$ o* A% H我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
6 s. G; u0 @" h" [ v当然啦,这两款主机也是相当不错的。
f7 N; |, @% U) K l智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
8 D& C0 \7 t% }" ^- f9 M标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年" ` v. p. \9 Z. [/ f6 f* ^
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 3 Z5 n5 F9 j! Z7 a
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55! H" R+ u% v9 g1 u* [
自己加QQ去问吧。 |
|