获得本站免费赞助空间请点这里
返回列表 发帖

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!8 X+ @: i' @* o% s2 q/ D
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。6 A9 r5 P  T4 T9 `8 J1 o
首先我创建MYSQL数据库表。( m# c+ O  J: i% k) P9 _
CREATE TABLE tablename (6 ^* c* H$ y. j( b4 r
field type(max_length) DEFAULT 'default_value' (NOT) NULL
" R2 }6 V! d2 b( e7 I7 d5 m  V7 B}可以使用的SQL语句。! e: P2 m" R$ U
CREATE TABLE useronline (, p+ V6 y0 a- k+ x& ^( h, \) R  o
timestamp int(15) DEFAULT '0' NOT NULL,4 E9 K- t4 p" F8 k! u
ip varchar(40) NOT NULL,
% W2 P. t* i/ W% a7 i( ~file varchar(100) NOT NULL,9 a/ ~# O/ k! J) ]- }% F, u# ?
PRIMARY KEY (timestamp),
$ g' k( W0 c' M  E/ FKEY ip (ip),- S# m- S& @# r2 R% y7 L* |
KEY file (file)& \6 N. j! L4 A1 O7 X$ m
);下面我们是PHP脚本,首先我定义MYSQL的信息。
+ ?: b' q1 O+ v! |: b  P8 p$ _* ?% T$server = "localhost"; //你的服务器2 E/ A" [. }7 \- N9 D
$db_user = "root"; //你的mysql的用户名, S, f0 Z1 K/ m$ C/ Q2 \
$db_pass = "password"; //你的mysql的密码! X9 i( @' f4 m. e% ]; S) m4 q. T  t9 d
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)& r( o7 ^3 G* k7 _  l! L1 i8 ?
$timeoutseconds = 300;取当前时间。! R2 ?+ f' O; Q8 |
$timestamp = time();上面的完整代码:
2 Z3 q: n! h+ W" o1 J% C5 n0 X* b" C<?php) d' @; A9 L* @  J
$server = "localhost"; //your server
% u2 w2 H/ p# c$db_user = "root"; //your mysql database username
1 U- H2 S2 |1 e/ m1 A$db_pass = "password"; //your mysql database password if any$ v1 }, A- O0 u; v% ?! B
$database = "users"; //the db name
. L+ ~2 z6 B) z! f$timeoutseconds = 300;//timeoutseconds limit4 Q. }9 ?* ~0 ^: \! N4 d# v/ j0 p
//get the current time9 d5 C& r$ ?  [5 `7 V- O2 o
$timestamp = time();
+ c8 E  J! d  s: v1 y//calculate the lowest timestamp allowed* G! c+ I- P0 @5 v
$timeout = $timestamp-$timeoutseconds;% K# \: N4 Y: [- S0 @/ }
?>连接mysql
6 n0 n6 ~2 w% \0 l( v5 vmysql_connect('localhost', 'username', 'password');也允许使用变量形式。3 i1 L3 {( t/ h& ?2 w% t  \1 f
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
. l+ d: G/ g& d7 z* Y: Umysql_connect($server, $db_user);查询数据库的代码:
' e# I8 S: [1 |4 o7 S; bmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
5 k9 O3 q( {8 y$insert = mysql_db_query($database, "INSERT INTO useronline VALUES8 z8 t5 @% {& L# Q5 e/ ?; [
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
4 c  S$ o8 Z3 o/ K" d; M4 v: |如果用户用错误信息的话,这样处理。
, [  l6 ]$ B3 k$ ^if(!($insert)) {) _6 \9 b  l2 s8 I! K
print "Useronline Insert Failed > ";
  A# S$ ~3 S; G- a}然后实现当超过设置的时间就删除该用户记录。
& j" @' q9 c- \6 Y1 P6 k$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。- P; C) C* R5 i- a
if(!($delete)) {5 v. K, T! {9 W2 Q9 {  V8 w6 D: O
print "Useronline Delete Failed > ";
6 Y' |$ Q& D3 V2 c}下面我们解决数据库中不同IP的问题; E  ~; @. B* j0 d, f9 ^% _
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
: u2 B( l1 G& g9 ]; [3 ymysql_num_rows(query);来统计用户,代码如下。$ B; a  \9 e5 h  p
$user = mysql_num_rows($result);最后关闭数据库。4 W" h, q( k! _+ j8 r0 a, ~* A( ]
mysql_close();显示在线的人数。( G* e& K, x5 t1 G
if($user == 1) {+ q6 l. t  D4 R
print("1 user online\n");
( l& W" t  H2 ]$ b} else {
: n0 t" h6 T7 ?: T$ wprint("$user users online\n");
/ |0 s8 Z9 ?' G. y}最终把上面代码写成一个PHP文件如下。
6 I* p8 Q, ^$ N. z<?php
" l' }" ?- P* [0 Y; \: Q0 l6 A' r6 v//Put your basic server info here
% m! O) n) Z$ V/ M9 b  L! F4 l* X$server = "localhost"; //normally localhost
$ H# y$ Q1 Z5 L) V5 o$db_user = "root"; //your MySQL database username
5 f% y7 l" {" }$ T3 c$db_pass = "password"; //your MySQL database password
1 _; V- i$ i& |- L' R/ I/ @  v$database = "users";+ W6 ~9 O; @" N" T
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are* i6 q/ X) d- E* a7 ^/ p2 b& C3 F
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last/ {2 s2 ^& P; _# j# ~2 Y. H8 M; o
// $timeoutseconds seconds)4 C; d/ z" j1 h3 e" Q9 x! s) n
//this is where PHP gets the time
0 K# n- }, g3 V: s, }' Y$timestamp = time();
3 c+ z( P. U7 U//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed- x5 W+ v8 ~6 ?- H
$timeout = $timestamp-$timeoutseconds;7 b/ D, D% O9 I( c, V
//connect to database
% C+ n2 P! X& G; a6 K6 bmysql_connect($server, $db_user);% [/ L- {/ C" A  [5 }
//add the timestamp from the user to the online list
4 O. J  Q2 u8 k, i: B- |1 q$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
! |( J) Q7 Z0 d! ]3 T( q# Y('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
0 e6 A7 C& U9 c+ Q/ v8 f! r& }if(!($insert)) {
5 g# D0 w$ J( J$ Uprint "Useronline Insert Failed > ";; p/ q+ ^6 G  \# d$ X* Q+ G& t: H
}! ~+ j' C) p! C& ], G& n
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.- n: {; |$ K  ~' o! X, y0 L
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
. M: X+ |! o+ vif(!($delete)) {" U) O$ x/ U, ~6 ~; B
print "Useronline Delete Failed > ";
4 y* {/ T% J$ O}+ G$ ^! O0 A# o  i
//select the amount of people online, all uniques, which are online on THIS page
, h8 X; L2 W& M& m4 z$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
" j$ q" i" N, w! n5 tif(!($result)) {
" N7 M  m2 Z( r- g  Iprint "Useronline Select Error > ";
- J8 `9 B! x4 R7 D2 |/ F7 p' ^}# n1 A5 Y, S9 a% b) o9 W$ z- t: g* m
//Count the number of rows = the number of people online9 k2 i" r7 @! L0 L$ s
$user = mysql_num_rows($result);; ^0 I5 K, U& A7 n4 c6 t0 z; t
//spit out the results1 J7 |% {6 ]' t+ h
mysql_close();0 i% S7 \3 d$ `
if($user == 1) {5 Z# z; c. n3 U7 `
print("1 user online\n");4 S8 Z( B$ f, t) i9 ?% h
} else {
& J, R" n4 j9 W& O/ q/ ~  V- s7 I3 sprint("$user users online\n");: P( A$ O* ^+ s  T! b3 E: h
}
3 {% @2 N0 E% a# P& e?>
* Y$ a9 M, `/ p
  `6 L* z9 Z+ y2 z以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。6 a2 @+ a  k, _8 N( }2 }8 U
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。+ x0 A6 r9 X. D3 o9 G+ Q& q
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。- H; E% o, C6 _0 M1 x  L+ p
当然啦,这两款主机也是相当不错的。( T: I9 l! D  [; K
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年  J9 ^2 {% C/ Z9 ~/ }. k# r
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年+ ?4 Q9 g2 b5 z- w% R% m/ N
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
. _4 I$ F. O- d5 G2 I" ?空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=559 f3 {5 m7 ~( O$ d
自己加QQ去问吧。

返回列表
【捌玖网络】已经运行: