返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
5 l7 Q% R0 j% n2 P我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。+ c+ O7 p# S6 g5 y; ~4 R
首先我创建MYSQL数据库表。
/ B. L2 d# Z9 `7 V7 l( f8 D$ x9 \CREATE TABLE tablename (& B7 \  a) i& F' g9 b# @
field type(max_length) DEFAULT 'default_value' (NOT) NULL/ R5 t& _5 E3 N' E
}可以使用的SQL语句。+ G) X  H5 K0 _* t
CREATE TABLE useronline (
# v2 a+ u: z2 Mtimestamp int(15) DEFAULT '0' NOT NULL,$ R2 y5 Z& t) D  ^. D0 T
ip varchar(40) NOT NULL,9 C9 F7 y- {' f. I" r$ y  |
file varchar(100) NOT NULL,8 C/ _2 r5 H# S$ z5 b
PRIMARY KEY (timestamp),0 W  e. Z. Q5 l+ t4 |
KEY ip (ip),: p& G( a0 m6 ^
KEY file (file)
, M, i2 W- A( I);下面我们是PHP脚本,首先我定义MYSQL的信息。# F- B3 t: s- u* e* Z8 \; |
$server = "localhost"; //你的服务器
) O* z- m- E/ P/ E$db_user = "root"; //你的mysql的用户名
" q% e% L! j* }* a; u( a$db_pass = "password"; //你的mysql的密码$ a4 L9 [1 u5 p6 l' E) p+ n+ [
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)* i% D8 |/ e( |. |% W2 [$ z
$timeoutseconds = 300;取当前时间。3 I, r' K: c0 t5 e5 f4 u* `
$timestamp = time();上面的完整代码:
: A5 o4 L  t$ ^; v, M/ R; o$ w, Z% ^+ t<?php2 g7 A. C! O; Z( _1 O& Z% ]
$server = "localhost"; //your server$ M4 F! R9 k7 @
$db_user = "root"; //your mysql database username8 t* i3 J$ o+ Q- R) K' Y: ~
$db_pass = "password"; //your mysql database password if any
  b- w/ z5 J/ C+ t$database = "users"; //the db name
- K3 B% b$ n' E- E! ~% G2 P! w$timeoutseconds = 300;//timeoutseconds limit
2 }- }3 {3 p  `//get the current time
: D; w; P6 v! l3 [) J$timestamp = time();2 S& n2 h+ h5 k
//calculate the lowest timestamp allowed- H8 ^" M/ \; \9 J% ]
$timeout = $timestamp-$timeoutseconds;9 J2 j6 p. T& Q" V$ p
?>连接mysql
2 ^+ ^: o7 {- P, X4 A+ s" V# Hmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
1 b+ b8 ^6 \( X" ?. z5 g5 }mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接9 i: B7 p4 e+ ?5 ^3 D
mysql_connect($server, $db_user);查询数据库的代码:
6 ~5 `9 w- F1 V+ {, h$ ]8 Bmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
# I6 o" I8 {' G: J1 |$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
1 r. r) c% y3 ?) c/ h' A9 S' Q('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");  j; z' c: U3 @! h( y- d
如果用户用错误信息的话,这样处理。# a$ \0 x- G2 E: I
if(!($insert)) {
$ j; X$ N0 E% G2 F* M9 b+ cprint "Useronline Insert Failed > ";
8 ^0 M9 Q- X) y; P}然后实现当超过设置的时间就删除该用户记录。) _! p' x" _" S% L! L
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
6 S7 C- Z" d' o* w5 Sif(!($delete)) {6 d! T6 ~1 H9 [5 \" L8 T
print "Useronline Delete Failed > ";
- z# _, k7 O3 z1 H/ S}下面我们解决数据库中不同IP的问题: x5 T+ ]) T8 K; B7 S5 X  m8 R. T
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
. R1 ^8 R# V4 h& G9 y' J7 B# emysql_num_rows(query);来统计用户,代码如下。
" E% q* b$ i7 N( g% \- d3 J$user = mysql_num_rows($result);最后关闭数据库。
  H# K$ p1 p3 Q4 h' B2 U, Cmysql_close();显示在线的人数。
2 v, p+ [) S7 s( Q1 y" \if($user == 1) {5 W$ g, l+ v  L7 B% z* U6 @
print("1 user online\n");
0 h! H4 P$ L/ B; Y$ W$ {} else {
! u) z6 X0 o0 h4 y$ S9 Y: Lprint("$user users online\n");; {! \* j5 d9 L( d6 R
}最终把上面代码写成一个PHP文件如下。1 \/ }: b/ L. S9 ]* A
<?php
. |4 ]6 n* V$ c+ X//Put your basic server info here
" e7 m2 \0 p* A  l/ Z3 p8 X$server = "localhost"; //normally localhost
4 j. ]/ `4 k+ k9 T( [$db_user = "root"; //your MySQL database username
8 m# l8 u: U6 k2 s; \$db_pass = "password"; //your MySQL database password. l, O% i$ c' F4 n0 Q# R# V
$database = "users";
: Y$ F- J4 R9 `) |$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
' S' o' q- E8 q* O) ~; `( ~// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last- \4 V' A+ v8 f( e, \  m
// $timeoutseconds seconds)$ w( ?( H2 p5 q, j- o$ d
//this is where PHP gets the time
- g6 d$ H2 ?( q/ E; w% p$timestamp = time();
" q- M% g  a; Y7 z+ O//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
6 a% _+ ^) f5 M$timeout = $timestamp-$timeoutseconds;, D$ o: k' n" L, Y
//connect to database
  Y* k' E& P+ F+ }- }0 S4 }) xmysql_connect($server, $db_user);
: A! H* s8 |) L( o) j//add the timestamp from the user to the online list
( Y0 c0 u  u0 P" K" g$insert = mysql_db_query($database, "INSERT INTO useronline VALUES+ R  v# K# m4 y8 n
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");+ K; p3 C# D4 s; M* [% [  `
if(!($insert)) {
" ^* P5 o2 t2 A, q( X1 Z. G$ ^print "Useronline Insert Failed > ";& `4 Y' u% Q# [- a
}8 e2 V6 S8 T1 w
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
$ `, c2 x  S2 @# q$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
# p+ [0 E8 _8 ]6 e7 \$ o; G$ Eif(!($delete)) {6 U3 W0 ?1 K# `. v; _
print "Useronline Delete Failed > ";! B& ~/ r* u. d+ I% _, |
}2 N6 {( ~7 k$ E+ H) Q
//select the amount of people online, all uniques, which are online on THIS page
# D: Q0 @% E" A- H5 K( s4 J7 I$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");3 z+ g6 m$ x: I* l
if(!($result)) {
( Q# w  r9 P% qprint "Useronline Select Error > ";
3 e9 S1 ]7 \. n+ u: p  A}8 B9 T8 z- _' e& M" H9 G7 s6 H% z
//Count the number of rows = the number of people online
: Z7 |0 P% I- _* l$user = mysql_num_rows($result);
" U/ H. Q( q" M9 A//spit out the results/ p; l' Z& b0 |, z& q# E
mysql_close();
$ z) A2 \; c  M7 s8 g  j1 `if($user == 1) {8 B- G' d; [5 P, T/ X/ m. R/ m  J
print("1 user online\n");
. q6 Y* v7 ^- j) ?( G- n} else {
; t( d7 f' J0 f  i2 W) ~# s5 Q! Hprint("$user users online\n");+ `* l/ `% ~: s. o
}6 G' X4 w8 {# v4 W9 c: N7 E
?>* f" O! H+ Z2 g' d# y
' c# ~9 m9 G2 e: n
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
" v. l! W. @$ {5 ]5 l3 z时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。! ^6 {' r. U+ h+ E7 v3 q
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
: K, ~9 T8 T8 i$ h( ^: Q* h当然啦,这两款主机也是相当不错的。
# H7 E. U% N! n7 Q& @' a$ }智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年& [% J6 \2 N) Q/ n
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
6 H6 l+ r8 D  q! }提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ , k6 d' i) K3 q0 h7 J1 h& i6 v
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=551 ~9 ^( E: ^0 j+ l" u
自己加QQ去问吧。

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