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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
2 m% }# p5 s! a  W) A我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。8 s$ f9 R! B3 t; e  _1 V  q7 d9 V" ^
首先我创建MYSQL数据库表。# |- K9 u$ q- y' r4 U4 {+ p
CREATE TABLE tablename (3 [  G; g' ]5 K1 G
field type(max_length) DEFAULT 'default_value' (NOT) NULL
) i" n- A0 J+ U4 D/ x# g+ X: ~}可以使用的SQL语句。9 F% l% `* i  a3 a
CREATE TABLE useronline (
/ j7 y8 U1 z2 q, G$ Ttimestamp int(15) DEFAULT '0' NOT NULL,( P9 f6 E+ @: e9 I2 J
ip varchar(40) NOT NULL,
6 L' H* U$ p, C) |- W* H5 v9 Pfile varchar(100) NOT NULL,
% e- G7 M# {2 WPRIMARY KEY (timestamp),2 k% p3 Z9 i& ~; x4 I0 _8 B& h
KEY ip (ip),
* W0 P; C( U1 G& w. uKEY file (file); R" x7 L+ a" q; {% E# s
);下面我们是PHP脚本,首先我定义MYSQL的信息。
; o8 Q( v5 J( L4 D$server = "localhost"; //你的服务器. x2 a  w: L- |+ e
$db_user = "root"; //你的mysql的用户名) q- a# y7 o$ b3 `: Z
$db_pass = "password"; //你的mysql的密码/ }( B, p( S3 h
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
, z7 z& l2 O  E$timeoutseconds = 300;取当前时间。
5 _5 N1 O5 o) q( o: j1 w$timestamp = time();上面的完整代码:
3 z: T, s5 ]9 |" s<?php3 F$ i, i6 K& X  Z% N9 X& F
$server = "localhost"; //your server/ _# n; D0 i, x& m7 q+ V# g
$db_user = "root"; //your mysql database username
# z. u' ]: J* r# X% |$db_pass = "password"; //your mysql database password if any1 S9 v. T' }* R3 H3 R
$database = "users"; //the db name8 M& W. ~- }; J% Q3 L; W
$timeoutseconds = 300;//timeoutseconds limit
. ?, B) i6 j% E- j1 d- a//get the current time; v6 V% v4 R' c2 ?# V9 U! p0 Q" k, ]
$timestamp = time();- V: _+ z! a- V/ S, S
//calculate the lowest timestamp allowed! d8 \& T9 X3 V0 A/ S* i; g: Z. `
$timeout = $timestamp-$timeoutseconds;8 O4 c( Y# u. b8 [
?>连接mysql! W& \5 U! d8 ~5 P# g4 @- L
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
, `& `% Z4 o9 Vmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
$ j9 w; m7 {1 ]: h& w7 u' O" dmysql_connect($server, $db_user);查询数据库的代码:, X) ^  n& h2 L, u; `/ y/ g
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
. T3 a$ O9 q- {+ P* a2 l8 T0 I$insert = mysql_db_query($database, "INSERT INTO useronline VALUES( k' z; Q# v1 p' o
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");  I8 v, g7 ^: C" Q3 l! ^6 O
如果用户用错误信息的话,这样处理。3 L+ [. d# G8 Z. t( j
if(!($insert)) {% ]# }# h5 T" `8 K/ t4 e
print "Useronline Insert Failed > ";6 q- D" t" x7 h1 r4 S: S2 M
}然后实现当超过设置的时间就删除该用户记录。1 m+ K- W4 w- y" I/ }
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
' S/ }9 u8 ?6 O5 a+ Aif(!($delete)) {" c8 E: H8 P- j/ x+ m
print "Useronline Delete Failed > ";3 U2 D% T7 r* N6 Z: T4 N8 n
}下面我们解决数据库中不同IP的问题8 U1 D0 a% H3 }
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用1 T* G# ~" x- C+ |9 r
mysql_num_rows(query);来统计用户,代码如下。
  K) V0 K! Y  L( C$user = mysql_num_rows($result);最后关闭数据库。
& y: J* E, }: K3 A! }mysql_close();显示在线的人数。
  O3 i# L, R1 O7 J: G* T* Kif($user == 1) {
. T* N3 q( A+ ~3 w. kprint("1 user online\n");
% Q; X7 U% e8 h0 S} else {
' _& |- {5 }1 ~& a: ]print("$user users online\n");5 a1 r& ]# A0 m" E* d
}最终把上面代码写成一个PHP文件如下。7 I  B* t' V$ l4 f8 ]! K. \/ D. f1 b
<?php
% x" H$ H7 g/ c//Put your basic server info here$ Z4 a, Q& O' S+ R
$server = "localhost"; //normally localhost
1 A. ?/ f9 w9 S& R$db_user = "root"; //your MySQL database username- g/ Z& G/ P% L# t8 @$ B6 ^. G% `
$db_pass = "password"; //your MySQL database password# Q0 p7 P  \- A( i$ w
$database = "users";
* H9 V9 y; O& S7 q8 ~3 B2 K$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are  }9 V8 P& l# }) p
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
  Y0 T( F& ?0 m! }* o: y// $timeoutseconds seconds)
6 H; j5 J% B; A" j//this is where PHP gets the time$ |8 q& G6 v1 ^; g) I
$timestamp = time();% \. u+ z% m& J3 ^$ |5 D: M" I
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed3 W9 u9 ?3 o. _( e$ Z
$timeout = $timestamp-$timeoutseconds;
5 k% k7 L7 x& \  @9 n7 S7 V//connect to database8 n$ H! G/ r  k8 x& I- T
mysql_connect($server, $db_user);% y. a: Y% h9 M
//add the timestamp from the user to the online list- a. O  e% j9 Q, Y' }) ?3 e+ g
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
* \' J& q4 x" f1 L2 X- V('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");- S; v* k  t7 C
if(!($insert)) {& K( b# b6 k. e* K# j) {# x
print "Useronline Insert Failed > ";
' i7 Z  T+ G" U1 b& c3 `' N: {3 b}
9 o' x$ u4 O$ ~6 C# ~  K+ U$ H//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.# W9 N/ ?/ s9 h, L- L
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");; w( z) v8 Y  B+ z, e! B6 D0 j
if(!($delete)) {
' s! A3 f+ ~& ?9 R7 U6 B; Mprint "Useronline Delete Failed > ";/ z" Z" n1 u. U
}
$ O& z! t! X3 l. C; k, ]//select the amount of people online, all uniques, which are online on THIS page& g( }+ E5 Y4 s. C) u( j% D
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
- ]9 s, y2 j$ S$ Cif(!($result)) {1 I, R2 `8 ]9 S# \
print "Useronline Select Error > ";
/ B% j8 b, I* s! l5 m1 _}
- [" `# W( M: I$ d//Count the number of rows = the number of people online
0 [. i/ W: D: n5 c6 H  L$user = mysql_num_rows($result);
" ^2 B2 l7 ]( s) H8 _; H& l" b//spit out the results
  g" ^4 m  {* T$ |+ hmysql_close();, x) h, u5 q/ A6 X; b- e& R
if($user == 1) {- I+ P. J( |- h
print("1 user online\n");
$ \5 }5 K% X- p3 l} else {: `2 {" Y  D& n$ P# p2 V! B
print("$user users online\n");6 k  g8 r- A. M
}, I9 Z* U+ p$ ~7 X- `& c
?>
1 n# f/ {) m4 X9 g* I! M2 a, M6 B6 L$ O1 h  |
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
* x& d+ h, b0 C) D$ f1 L8 Y时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
* `2 v8 m3 V& A我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
: {$ @% B& G( \' {. Q当然啦,这两款主机也是相当不错的。
. _2 h/ ~  t1 ~智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
0 n. j  K' [5 H, w) a标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
3 J) V# m/ s4 ?1 a; ~% R提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
9 w5 w1 K! P' ~7 H% t" V5 c/ _空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
" V5 l5 j8 W$ Q# n自己加QQ去问吧。

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