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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
) ~4 D! O) C4 p" q7 m我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
8 ]# b- ^8 u: K首先我创建MYSQL数据库表。
4 j9 r6 ?4 A& c9 n$ ]CREATE TABLE tablename (8 o. _! M' b/ i2 u  {8 [- F
field type(max_length) DEFAULT 'default_value' (NOT) NULL
* J6 @  T) E6 y' L}可以使用的SQL语句。( V( s# o9 s0 u% h- i
CREATE TABLE useronline (* {3 C7 R- u6 H6 {
timestamp int(15) DEFAULT '0' NOT NULL,$ p  j7 {. U+ n% p
ip varchar(40) NOT NULL,. |! S" f' `9 Z& i# @! k: m. k! A
file varchar(100) NOT NULL,
' M  V! g: {1 S8 i6 L0 @! }/ RPRIMARY KEY (timestamp),
9 K2 [4 L! I. U! l& GKEY ip (ip),/ q4 I! R6 ~. ~# [
KEY file (file)2 s3 A2 W) K! R1 B
);下面我们是PHP脚本,首先我定义MYSQL的信息。
( Z  w) L6 `$ c5 E$server = "localhost"; //你的服务器
5 m3 X% X, R  t$ K3 h0 p$db_user = "root"; //你的mysql的用户名
  `: J, E1 a) J- o$db_pass = "password"; //你的mysql的密码. u/ g% _+ J1 C/ A3 X' ^2 m+ C' @9 a0 a
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)4 C) {# |, P( d3 q& Z" p
$timeoutseconds = 300;取当前时间。5 R9 A6 B6 y  G9 h1 `
$timestamp = time();上面的完整代码:
, W- C: {4 \- z<?php  j7 a$ G; M( B8 |4 [
$server = "localhost"; //your server* h+ Y' f  h8 }9 l' {
$db_user = "root"; //your mysql database username
9 T* v& b( T$ J- B$db_pass = "password"; //your mysql database password if any& m% z& D% y- P5 H
$database = "users"; //the db name
, @0 F* ]( M5 I5 E- b! g$timeoutseconds = 300;//timeoutseconds limit
  K: s# n9 s1 n& v: W//get the current time' }7 X' B: X% b7 u6 ?
$timestamp = time();* a1 J* B  l7 |7 l0 @% ]
//calculate the lowest timestamp allowed
; I+ y, O( K. M# a, K" B$timeout = $timestamp-$timeoutseconds;
5 n7 f- l2 o$ t0 F?>连接mysql  B3 J7 Q! g" X0 |
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
, _; u9 i' B% R. Wmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
6 F! R. B* ~6 V& _, `/ T9 S9 Vmysql_connect($server, $db_user);查询数据库的代码:( o9 n% o  a, A+ O
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。8 c0 T9 [; f9 R
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES3 M' _/ \8 ]. M7 e. F; }  h4 r+ D7 N
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
) _/ {+ Z4 A0 z  Y/ Y# E& U, o: u如果用户用错误信息的话,这样处理。6 D3 p( j. a2 v! V# w
if(!($insert)) {1 n8 K* S; W8 U6 s6 c3 X
print "Useronline Insert Failed > ";
/ m+ Z2 C5 L9 r3 A: w0 b}然后实现当超过设置的时间就删除该用户记录。
4 H  {; x' F8 t0 j( q$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
& i( d2 ]8 M9 i1 Sif(!($delete)) {
% A3 Q; f. y2 M6 T* b% }( Pprint "Useronline Delete Failed > ";
9 Y! m7 i- |( _}下面我们解决数据库中不同IP的问题  S0 c8 _# q: ]0 C$ U4 ~7 k% ]
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
5 [8 Q0 k; V0 o$ j  l3 `mysql_num_rows(query);来统计用户,代码如下。
5 S( b6 Q4 N+ o+ {, a$user = mysql_num_rows($result);最后关闭数据库。& T4 \) c3 W4 }- G
mysql_close();显示在线的人数。
  |; o4 h! A4 V! Iif($user == 1) {
% _1 O9 K) G' y$ Q9 uprint("1 user online\n");# r6 ]0 f9 g2 ?& i1 Y) s3 V
} else {, V$ v& o4 g) K; e1 G
print("$user users online\n");
, B! i4 J! V1 m$ `  n5 ]}最终把上面代码写成一个PHP文件如下。  a, f2 }6 N# x) |* @
<?php
. x! V" k1 R1 ?9 y9 F9 L//Put your basic server info here
  D6 V/ ^1 v4 G2 l  G1 t$server = "localhost"; //normally localhost
/ L8 n6 T0 T, B) `- R4 H$db_user = "root"; //your MySQL database username
8 y& H1 M2 c# F# N7 {2 }$db_pass = "password"; //your MySQL database password$ M1 P" C7 a: o- p3 `4 M( h
$database = "users";& `0 p5 c6 L) x  A9 j
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are+ x3 d2 v; ?3 O/ A0 {' L
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last7 N; H6 a+ N( @5 U: P: Q1 D' U
// $timeoutseconds seconds); L+ n4 x$ m1 g
//this is where PHP gets the time
+ \/ l. @4 m6 U4 K7 ~  q0 X$timestamp = time();
- E1 T2 e4 X( W2 M* J( x( G( K//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed. H7 ~9 U1 G+ c& F. Z3 `% X% n6 T0 G
$timeout = $timestamp-$timeoutseconds;; v7 M0 D5 Y; `0 x
//connect to database3 m* k; @1 B" h# j# n' F
mysql_connect($server, $db_user);
) p  d( V1 Z$ z% O% I$ I//add the timestamp from the user to the online list
+ d# j' y' T0 [+ }" {$insert = mysql_db_query($database, "INSERT INTO useronline VALUES# ^; q0 P' z5 \2 V6 j+ U
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");5 ]7 r7 c: s7 \: L
if(!($insert)) {
1 H4 Z7 F% g0 \( @) Xprint "Useronline Insert Failed > ";
3 j$ U3 H$ n7 [, V- Q; l  z# P# X}
  [, Z( o; \$ i% w& k0 J/ g//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.2 O  C, B1 s# F3 e) i' S& ]
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");# P: \1 c% }: ^9 L* A
if(!($delete)) {0 n  `+ N8 l, Z' d% J
print "Useronline Delete Failed > ";* d/ q3 L" Y5 e" `. l. m) G
}; q: @" H( Y4 V/ l6 u+ M# g. J! h
//select the amount of people online, all uniques, which are online on THIS page3 W' R* P5 k' e0 n/ P
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");5 I$ E+ g- b4 L- }8 V" }; h
if(!($result)) {& @. v! F: W5 F! b" g( h+ q
print "Useronline Select Error > ";
" J% t5 i+ U/ Z" O- l/ I, E, d}- N3 C% c& x9 h1 L( R
//Count the number of rows = the number of people online5 ^4 ?# ]5 i6 g+ i! T
$user = mysql_num_rows($result);
/ j% v7 o5 u6 y$ H6 R: S; w( G% ~//spit out the results2 y& d' a- U) k$ N# k6 G
mysql_close();
8 e$ z+ A5 P7 @6 u" ]if($user == 1) {8 c* o. o2 J" o! c, j
print("1 user online\n");
3 u0 N# s' D, V8 T: n} else {
  o  j5 l2 _+ V' D) g. \( _6 Lprint("$user users online\n");; N. Y+ g  |1 W
}
0 {; b$ X+ F$ e! i  f2 M: _?>  b: e$ N: `9 K+ C2 m! Y

# V/ m5 E1 p, O: V0 o5 e& }+ r! ]/ Q* }以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
" }7 ~- P# g/ E: n/ F! i时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
: f9 L/ K! G* |! K( I7 C9 O( {我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
9 V- V& a; |- L+ [, i/ D当然啦,这两款主机也是相当不错的。; w. C0 x: A( E
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
. X7 s  ^5 ^  Q6 m4 S/ D* w5 L标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年+ g* O5 a% C. ]8 V) X
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
% g. F) ~$ y4 d* y5 ~: m空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
# K- c4 W4 j2 ?, U自己加QQ去问吧。

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