返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
) c7 U2 f3 s% t我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。3 S# L2 {# A7 m. b$ }" Q
首先我创建MYSQL数据库表。% z! b$ L8 _  Q
CREATE TABLE tablename (
0 ~( x& y7 S- O, n3 y4 {field type(max_length) DEFAULT 'default_value' (NOT) NULL
' t) a. n- p" Q# {: ^}可以使用的SQL语句。
. |& t' C4 \4 X$ A; p' t2 P* b: gCREATE TABLE useronline (# }3 d1 w+ ?& Q; d% s' g5 \
timestamp int(15) DEFAULT '0' NOT NULL,
8 K/ i% {& Q0 D) M! S# Y1 Lip varchar(40) NOT NULL,* L1 r- Y; b. O+ Z: f+ L
file varchar(100) NOT NULL,
% o' R" }5 k) J) R$ v" D  F$ g+ tPRIMARY KEY (timestamp),
6 u7 e; L. C1 ?2 QKEY ip (ip),
) n, d* p/ V- uKEY file (file)
* k0 O* x+ e& E. a8 {0 Q0 p);下面我们是PHP脚本,首先我定义MYSQL的信息。8 y+ [7 H7 ^" h' p* O
$server = "localhost"; //你的服务器* l* P# l0 @: H5 [5 d  K+ W7 V/ G' U
$db_user = "root"; //你的mysql的用户名% E( A  X: x& E3 X* e
$db_pass = "password"; //你的mysql的密码5 c* B& w+ @* M( w% ]% B
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
( X9 G8 t$ c9 [$timeoutseconds = 300;取当前时间。, v) ~7 Y/ Q7 X, c8 Q  A( m. t
$timestamp = time();上面的完整代码:" W4 G. {  ^0 d, W) P" v
<?php
& K  u" o+ h* |( {5 ^$server = "localhost"; //your server
+ H5 s1 w$ K2 P$ J, F$db_user = "root"; //your mysql database username; r' D  z1 q3 w+ F3 W; t! H
$db_pass = "password"; //your mysql database password if any7 @. n& @/ P# |. V4 L" }5 t& z
$database = "users"; //the db name
/ n% Z- W) K8 t$timeoutseconds = 300;//timeoutseconds limit
: E$ w. C; z0 L1 t//get the current time$ ?5 ]( Q7 v, R+ v5 n
$timestamp = time();! }: z( `6 G, F! C: N
//calculate the lowest timestamp allowed- Q$ t- P8 d# r2 W1 r
$timeout = $timestamp-$timeoutseconds;
6 T9 @' i1 y4 }- z9 R?>连接mysql6 m! `( F3 u4 D
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。' D7 Z6 H# _; z) q
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
7 a) ]& G$ [+ h2 Z. x2 rmysql_connect($server, $db_user);查询数据库的代码:8 M) C) \) ^8 K: O8 L  G
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。# Z- j3 x$ s6 `9 l4 r6 M; g
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
3 J7 X2 r! E& e, O2 s('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
% d9 k$ W9 W/ J3 u$ W) U2 s9 I如果用户用错误信息的话,这样处理。
9 U6 y1 q9 C3 I" ^0 l' Cif(!($insert)) {
. G7 h3 w, B3 ]9 B+ Gprint "Useronline Insert Failed > ";. l2 p3 F* Z0 S5 f9 u, Z# A
}然后实现当超过设置的时间就删除该用户记录。
& ~: S7 |9 z4 C6 e+ {" \$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。5 x+ G( g. H! u$ |9 C* }! Q- N, ~) F
if(!($delete)) {
4 U) a  d5 i4 T% U: ^4 j' Rprint "Useronline Delete Failed > ";
1 F" r) W3 H: W2 R& U* J) `}下面我们解决数据库中不同IP的问题
- R) c) W$ ?) j- [, h$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用+ L0 ]$ d9 d8 R- \
mysql_num_rows(query);来统计用户,代码如下。  {8 o; O" Q1 z  O7 \) V" x" n
$user = mysql_num_rows($result);最后关闭数据库。( l& p5 T% }  A! |6 ]
mysql_close();显示在线的人数。/ v( v; ~2 ?, k* `7 t) V6 G. Y
if($user == 1) {  a  W2 t' y* ~; i+ F
print("1 user online\n");
+ R/ x1 d. B5 q} else {4 N& o- Z2 A  w) z$ ^1 n
print("$user users online\n");5 g9 }2 g. j! c* v) Q
}最终把上面代码写成一个PHP文件如下。
  F" J1 a+ k$ l: K& E<?php  b1 T; D0 _/ J+ D7 T4 w
//Put your basic server info here' r! \, h' ?# W& T& U
$server = "localhost"; //normally localhost9 r3 Q/ ^$ ]3 x: P
$db_user = "root"; //your MySQL database username
4 f. O: O# S$ c! o8 ~9 x$db_pass = "password"; //your MySQL database password: ?3 I9 X4 I* c5 U8 ]6 k# m+ x
$database = "users";4 k5 S8 W% [' p! {7 f0 u+ j
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
( f$ |* h- P& s// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
) d  t7 p/ [  W! n6 G- m// $timeoutseconds seconds)
+ p! q5 N5 W0 I+ S: M//this is where PHP gets the time
" d6 G7 z/ _( s% D$timestamp = time();4 a; K! s8 C2 h8 `& e
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
6 v0 n5 A) e, V' j$ O: @" j$timeout = $timestamp-$timeoutseconds;
5 \' L& H) S: j. @( G//connect to database
8 I" E4 v" ?2 H3 u! zmysql_connect($server, $db_user);8 F+ j" p0 \3 u; {/ l
//add the timestamp from the user to the online list( H! q6 u' Y! w! g
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
2 X/ T2 o/ c$ i5 J$ m('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
: l+ G. t9 ^- u) }5 b# x2 o- \if(!($insert)) {
  T1 G5 n7 V5 kprint "Useronline Insert Failed > ";
+ J6 }( \3 p- p' F' L6 y}
. ]& c" r" L4 M$ O2 m//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
0 c& M4 `  z* h2 z& e, c# V4 g$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
2 s+ \+ D8 Q0 W# n# iif(!($delete)) {
& [& X% ]9 _2 B: g6 o% pprint "Useronline Delete Failed > ";
: c* R4 |" {) I( A) \4 x2 i}
% |& h& x+ n9 f, I. O, D//select the amount of people online, all uniques, which are online on THIS page9 }/ D: x7 ?  o7 M
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
* l% T# `( d2 Zif(!($result)) {
6 a3 `" l  v. g; q1 l# Q' i# E+ Rprint "Useronline Select Error > ";
% u/ Z* `' I" H- y, O! K, f7 i: L/ ^}
& \! t- A. B. M3 {2 j1 x2 B, z//Count the number of rows = the number of people online
- y, f8 w* D# |: \4 }$user = mysql_num_rows($result);# e0 u0 {6 C) J1 S& \6 h# V
//spit out the results. X4 V( i) l. q+ B
mysql_close();) T, R$ c/ }9 C& k
if($user == 1) {7 q6 I" @: n' c$ l  P* X; J
print("1 user online\n");: _3 x2 U+ c0 E# F2 k
} else {( n2 X% `8 j  A* e  e3 W
print("$user users online\n");/ Z+ n- ]# a( I, m# l
}
3 N" E% j' J, ]5 c7 W?>1 z5 H7 f4 L" u6 P* j2 R

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

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