返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
6 t2 N% G* C2 P" t$ u我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。4 \, D; @) b1 v8 k5 ^: u) g
首先我创建MYSQL数据库表。
. E; G* n4 A1 ~( L6 d) `; GCREATE TABLE tablename ($ C; m7 N5 k: g; v1 V9 v0 M
field type(max_length) DEFAULT 'default_value' (NOT) NULL
1 j- i0 D5 y; o5 M}可以使用的SQL语句。8 h( [/ ^5 z! Y& E7 w( N
CREATE TABLE useronline (& K1 c: Q7 l) X) M4 X* ]7 t
timestamp int(15) DEFAULT '0' NOT NULL,) Q- C- k, |9 I
ip varchar(40) NOT NULL,
! n. n: y' N6 ^! z: f: P) sfile varchar(100) NOT NULL,
' }9 z8 y* U: f! `& UPRIMARY KEY (timestamp),
1 P: B7 C) ~9 RKEY ip (ip),* {7 [5 F  S' g+ P, R' L
KEY file (file)
% V4 l! R2 P; B  O' l& r);下面我们是PHP脚本,首先我定义MYSQL的信息。1 f/ C* L7 r  Z0 l2 l- ?
$server = "localhost"; //你的服务器$ R" A) C& g: c" }; z( L0 D
$db_user = "root"; //你的mysql的用户名% w/ L/ K5 V0 r: k7 z& y
$db_pass = "password"; //你的mysql的密码
/ U4 B: @$ `9 \; y/ F$database = "users"; //表的名字设置统计的时间(多少秒内在线人数), U  }, x2 L' D0 S% M* d# R- C
$timeoutseconds = 300;取当前时间。
2 \( f& h/ c" U. A% O$timestamp = time();上面的完整代码:$ L$ j5 r& R4 Z
<?php" R  a" N- E* b; H
$server = "localhost"; //your server
% o: r2 l+ m4 h  G2 A$db_user = "root"; //your mysql database username
9 d& Q% v* C! [' q$ D$db_pass = "password"; //your mysql database password if any
8 y* x+ z! `" }) d$ Q$database = "users"; //the db name8 X+ q- {- R% l6 m" l( `* F: k
$timeoutseconds = 300;//timeoutseconds limit
. z! l* r1 Z$ _1 Y//get the current time
) E" y9 S5 I, c0 \$ J$timestamp = time();4 k& h+ u2 B4 h: [0 o& l/ A
//calculate the lowest timestamp allowed
* C- L: Q- ]& L$ ^$timeout = $timestamp-$timeoutseconds;/ P! P  _: ~( s8 ?
?>连接mysql
3 T, p1 L4 k# u; F' r. Smysql_connect('localhost', 'username', 'password');也允许使用变量形式。
9 T6 y6 t' l+ V! q4 ^9 [" Omysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
* ^- r2 g- k; S; A- U- [( _& Rmysql_connect($server, $db_user);查询数据库的代码:$ w0 w$ _9 T9 h' M) Z1 p+ |5 P! P$ t. d
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
5 d  Q: c& J/ j4 }3 P$insert = mysql_db_query($database, "INSERT INTO useronline VALUES) W9 }* p6 C2 ~+ B% _4 P+ J
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
8 o% `- T4 p& v9 P, r; D+ a3 g如果用户用错误信息的话,这样处理。; M9 [; z: j* R9 z" g* U
if(!($insert)) {
! h% T5 A8 M) b8 }print "Useronline Insert Failed > ";
7 S$ m0 b4 u! R, i* t}然后实现当超过设置的时间就删除该用户记录。2 h' b1 M0 E" t/ `6 q
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
- E$ q5 F# }+ g: `  Z7 j* q1 }" Rif(!($delete)) {7 ^, e0 }0 k6 O# z
print "Useronline Delete Failed > ";
. l! t3 f* m. p* e0 ]# u$ u4 d}下面我们解决数据库中不同IP的问题3 M  [: q! h9 ?, l. o
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用; h! r' @. \" A" B" }9 K, i- l6 i
mysql_num_rows(query);来统计用户,代码如下。
7 ?: m. [/ @% a) J3 d6 B$user = mysql_num_rows($result);最后关闭数据库。
1 W. o6 s- N4 f2 O0 {mysql_close();显示在线的人数。
4 \5 k: ?3 b4 t) cif($user == 1) {! D  B) H7 \4 |" {- Y4 ~
print("1 user online\n");2 j( T8 U0 `6 Z1 E. H
} else {
3 X5 l5 E' U* G9 ?) C! b7 Oprint("$user users online\n");
' d) T& \  Q* \' @/ Z}最终把上面代码写成一个PHP文件如下。
) d9 b7 ^2 c4 l/ v( \$ [6 Q<?php
  s; D! J5 R3 E/ O, _+ W//Put your basic server info here. [1 j. Y- b! g! q8 K% \+ E
$server = "localhost"; //normally localhost) \8 C- P8 t* j( {: E6 Z
$db_user = "root"; //your MySQL database username; _1 ~' S- z& p! g
$db_pass = "password"; //your MySQL database password
; Q$ Q1 K! E8 D$database = "users";
6 T9 R7 Z& V, C/ a+ O: N" l: h. t/ W$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are( K& Q  X# ~% [# A7 Z4 M& E& F/ Z' G
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
+ C9 e: d- x6 S9 E' Y1 b0 A// $timeoutseconds seconds)
# L2 _9 a3 \- n6 {% S//this is where PHP gets the time- ?# n) o- @3 b) d7 r
$timestamp = time();
2 e4 e) y# I! R3 J4 x; z//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed+ ]( q( L0 t- w: A. A; ~1 R
$timeout = $timestamp-$timeoutseconds;
( C& Z9 ~0 x  U9 ~' i& `8 s2 h* T//connect to database
5 a- p3 J; t2 P7 ~3 Xmysql_connect($server, $db_user);
; ^9 T# w# ?3 I5 s//add the timestamp from the user to the online list
! X6 h/ v" O9 x1 O7 [" z$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
5 X. m# n7 R* K. q0 }0 J('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
5 G8 W3 n: y" K$ f, @# n1 Kif(!($insert)) {8 S, q% A  R+ d! N5 t% U
print "Useronline Insert Failed > ";
$ h: I0 O& L% s$ N3 I}
* s+ T9 x# @) a* v6 n//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.1 n+ r% b$ F( q  o
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");/ ^2 `( F; _8 X" g: D. o  l
if(!($delete)) {
. P$ @* Y  b3 B: o  r0 Hprint "Useronline Delete Failed > ";7 S4 B4 U0 c/ _+ P) \& o
}5 ?9 ~1 n5 {9 u% c
//select the amount of people online, all uniques, which are online on THIS page
0 e7 v  p& F4 R9 b& ^6 l  d8 P$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
- J+ Y7 G" c4 ~3 j; X+ Kif(!($result)) {
. C! k! p$ ?" C1 B1 o7 X& Jprint "Useronline Select Error > ";
# B3 _4 P* O9 e& u}9 O3 E, J+ c% O  C8 T) r# g
//Count the number of rows = the number of people online
  h' w( M% n5 w9 \& f* @; M$user = mysql_num_rows($result);
- a% F$ [4 [1 }% L//spit out the results1 e  o8 J8 ]& v' y
mysql_close();
. \5 n" `; S3 x, |& v: I; Mif($user == 1) {
7 S" _) B; A' t" z+ M8 Wprint("1 user online\n");
1 q/ z3 O1 K2 U9 D" `+ \% @} else {
' e- D5 w* e5 [; ?+ o+ y6 mprint("$user users online\n");/ F1 s% F& P; N2 {
}
0 y1 x" Z! d$ L" {. h& U5 ??>3 z+ r0 _: K3 `

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

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