返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!" K; U+ I8 l$ D1 `1 k: N2 W& h
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。" ^/ T2 O1 i* U0 i; \6 g
首先我创建MYSQL数据库表。
# u! r5 S- M* I& K) G! ACREATE TABLE tablename (
$ q5 M( H9 q" F, l0 S& {9 E9 `field type(max_length) DEFAULT 'default_value' (NOT) NULL4 [7 ?9 k9 M! i' ^/ q& }' s9 o
}可以使用的SQL语句。2 K6 _/ Z( h: S# c# `
CREATE TABLE useronline (( c! X, D+ [; m5 g
timestamp int(15) DEFAULT '0' NOT NULL,
4 v7 l6 f- \+ G3 _! W' F' ?5 eip varchar(40) NOT NULL,
  R+ ^1 b, v$ X/ v9 Mfile varchar(100) NOT NULL," D/ g; r# {- v9 x7 q9 [5 O
PRIMARY KEY (timestamp),
+ j+ p4 f% [1 H, j9 p- EKEY ip (ip),
; b9 P& {8 N  \KEY file (file)) u# \" P; I- \# D
);下面我们是PHP脚本,首先我定义MYSQL的信息。9 r' i8 c2 d$ L9 m
$server = "localhost"; //你的服务器
7 |# S4 J- Y( ?. C5 ]# n% \$db_user = "root"; //你的mysql的用户名
# G0 B1 }5 y. G6 Z3 Z$db_pass = "password"; //你的mysql的密码. h+ T; ^  x" M7 @
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
  T; A' {6 N& w, J' F, G; B# _% s$timeoutseconds = 300;取当前时间。
( M) D2 \2 x, k3 V/ J$ Q$timestamp = time();上面的完整代码:, E; z* j2 D+ e& ~
<?php
. E0 p% t% l1 @# e% H' G$server = "localhost"; //your server
9 W2 u& n/ N/ {, v% y+ U$db_user = "root"; //your mysql database username
  H2 `0 g7 s3 x$db_pass = "password"; //your mysql database password if any, A& Z/ g2 e3 m5 T8 e2 x
$database = "users"; //the db name
% ?/ I2 C7 W" ^5 g1 m$timeoutseconds = 300;//timeoutseconds limit
! v- s( m; r% U- v2 e//get the current time
: S% _2 s6 X+ o+ R# m0 b$timestamp = time();+ D+ p$ ?' T6 G' h4 M: z; S
//calculate the lowest timestamp allowed
; }3 l2 L  z8 E  A  x$timeout = $timestamp-$timeoutseconds;9 @' \, c5 k3 y1 a8 ?
?>连接mysql( Y* C. m# i; N6 [* n( L
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
& c" m9 N6 j- @, |2 n  Amysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接& g/ x% z, E/ k$ n
mysql_connect($server, $db_user);查询数据库的代码:
  X* u) ]8 P0 c% V7 S! O% _3 wmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。+ |; d4 S  E' a. |
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES" |# I8 P% R" G
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");% h! e. Y) n6 N. Q
如果用户用错误信息的话,这样处理。
1 l0 ~9 q8 H+ P1 ^9 \. |1 ?: j) qif(!($insert)) {
: \; \+ E+ Z/ Y6 nprint "Useronline Insert Failed > ";: `; J; X/ W3 I
}然后实现当超过设置的时间就删除该用户记录。$ R1 I& }( o- x' q! ]' ]0 [' x
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
# s( L2 F1 {4 e  rif(!($delete)) {% m3 H' D) H+ v- i6 O6 E
print "Useronline Delete Failed > ";
4 g4 j2 B# C  z% w" h0 @}下面我们解决数据库中不同IP的问题0 Y+ [( Q3 h$ H1 q- m% G3 H2 w
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
2 g- ?& k7 l; D  l7 u6 Nmysql_num_rows(query);来统计用户,代码如下。
! A& V0 x) Z8 \$user = mysql_num_rows($result);最后关闭数据库。
0 s  u5 T2 ^8 r* X& a8 k3 Z" {mysql_close();显示在线的人数。
3 V( Q. q+ T6 d! v8 c( E' Qif($user == 1) {5 P4 V1 U2 n1 d) M1 Z+ |9 ]' ~8 ~
print("1 user online\n");
# v( v, L" s. @' q, S5 t} else {# w" M4 T/ r: _5 C5 r
print("$user users online\n");
9 W$ z2 s* f9 A$ ^}最终把上面代码写成一个PHP文件如下。
7 Y- L0 |9 a3 n3 Q  r3 }4 n0 o<?php
& w) P2 [$ j9 K//Put your basic server info here
$ j! j6 D3 [" ?$ V* n$server = "localhost"; //normally localhost) S" ~' a7 B# z$ j3 T& D; B% C
$db_user = "root"; //your MySQL database username) A' p1 f1 t! l3 I3 g% Q1 }
$db_pass = "password"; //your MySQL database password
% z  G/ f7 @0 @6 V, ~$database = "users";
  N7 t2 {! ^; I% Z: ]3 h5 R3 q$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are1 h! t. j/ e( x- ?& \; l
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last. }8 S5 F) U4 U7 b' L: K
// $timeoutseconds seconds)
5 F+ P! o6 z! Y1 G0 e2 J: L" B//this is where PHP gets the time
+ ]. p& E% k$ r5 u7 R4 g6 d$timestamp = time();
9 _1 @) }5 Y9 p3 [2 h+ G7 N1 E//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed2 U  G+ z$ ^; H! O8 C3 }
$timeout = $timestamp-$timeoutseconds;% v$ W5 T! k6 c. Y( U3 w( k" J& P
//connect to database7 y# h* A9 c/ c1 d
mysql_connect($server, $db_user);; X7 l) v( [* ^+ `* G
//add the timestamp from the user to the online list' \7 v! y0 d; t/ r- P' U. s
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
- [; Z) c# n, i' ^# M. c('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
+ C- n, b! z2 }if(!($insert)) {
, P( [# j& |# e  j* Uprint "Useronline Insert Failed > ";0 U/ H* i  m! o- Z$ N$ ?
}$ O8 o3 G3 Z/ |5 a& H. f6 s( z0 J
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.  h$ J! u) U2 O4 s  {
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
: ?3 N8 r0 M' u3 R+ Qif(!($delete)) {
. w! z- x, N3 w9 xprint "Useronline Delete Failed > ";
1 {7 y1 z! `  m, R}
7 Y) }# P+ A' N9 C//select the amount of people online, all uniques, which are online on THIS page
" w; X. e( `9 A% P$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");+ s! @. H- A6 g( `4 \: Q$ m  E9 m
if(!($result)) {
/ O3 v  `) y$ n1 A; Cprint "Useronline Select Error > ";
# F  I3 ]- I1 P0 D; ]9 _}8 ]- j2 X- `# D/ X3 [
//Count the number of rows = the number of people online
; N" ~" \2 ]9 X6 \6 X1 R$user = mysql_num_rows($result);
4 M' O% B' S& X. n6 k//spit out the results
, b, r5 ?( W0 C: H* ?mysql_close();
; w8 O2 C9 G( a8 K( @if($user == 1) {0 }6 |. o) a) J. P
print("1 user online\n");
' F  L, E7 B  C# }" @3 _" C} else {8 h# J9 d4 k5 m2 ?! O  n
print("$user users online\n");
4 v( e4 ^# }# v' ?0 ?, J! U! s}( y. l/ N1 V; {; ?& X5 P* U$ R
?>
* k" p! I# g! B0 c. ~: N" P6 n" b, l2 W# \/ A' c
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。7 X# k; Q" A; B
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
0 A' K5 O* T& X$ n9 Y0 Z6 j  o, ?我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。5 T( K# d. B- B) l7 t3 w) O
当然啦,这两款主机也是相当不错的。" u7 b' n# k* ^& z8 ^, c% W
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
. \  v+ I- j# P8 n# K! N$ r标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年. Q' X. @3 I3 T6 D
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 2 y6 A8 R' M1 R! z
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=552 h# I' a0 [- k& I
自己加QQ去问吧。

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