捌玖网络工作室's Archiver

lilcy88 发表于 2008-5-28 10:40

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!{m+?*b0o+cE\!F
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。c!B+{td
首先我创建MYSQL数据库表。.yZ:ng9rfY
CREATE TABLE tablename (
H3di@ a:ad#NG field type(max_length) DEFAULT 'default_value' (NOT) NULL
y6u,O{%bM }Kiz }可以使用的SQL语句。
,Fe:X]YEj CREATE TABLE useronline (0t-C5p+{5w?!w
timestamp int(15) DEFAULT '0' NOT NULL,
^c7u n,q#N&I/Pny ip varchar(40) NOT NULL,
V0xvbQ"t0vr file varchar(100) NOT NULL,
Q.v7njY-Y Fg'Z PRIMARY KEY (timestamp),
4G'j[eCY{7U"Y KEY ip (ip),v+h5r)uG8VYf@
KEY file (file)
O3F,U)Z!al |dV*Y );下面我们是PHP脚本,首先我定义MYSQL的信息。
'E5_%Dm2V?3I $server = "localhost"; //你的服务器,{'G"NT G"Z_
$db_user = "root"; //你的mysql的用户名'pB'n%t bGw3h-Z&e
$db_pass = "password"; //你的mysql的密码
_(@Xo `.R $database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
#k*{!}*OUg9qL7R2j%h $timeoutseconds = 300;取当前时间。,^A#wU+}(M UjG8[
$timestamp = time();上面的完整代码:$sNN%P C {S
<?phpl,DM%X9q mS Pf _
$server = "localhost"; //your server3a2`!Z {G
$db_user = "root"; //your mysql database username
"v}5O;|f?s $db_pass = "password"; //your mysql database password if any
6fu~ o~a7Z Ji $database = "users"; //the db name q I"q-v(FF0E
$timeoutseconds = 300;//timeoutseconds limit+^C:}%y |!?6bY
//get the current time
,GT-D&S,t9E OZ'O $timestamp = time();;k&_,m E5~V
//calculate the lowest timestamp allowed&?7YCCyd!r;I
$timeout = $timestamp-$timeoutseconds;VL-L H`
?>连接mysql
\&Tv]0u;FQ I:q mysql_connect('localhost', 'username', 'password');也允许使用变量形式。2` N,re(zx
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
~o;x{$C{w mysql_connect($server, $db_user);查询数据库的代码:
8m+K)Y u S7VK;] ?d mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。R'M:je'L?8Ni-t
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
9^7H;B w@u ('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");(D#O7M wu/n9jm
如果用户用错误信息的话,这样处理。
N#w!aH`Xc t if(!($insert)) { oyUT/~K
print "Useronline Insert Failed > ";
h `6P Y c5A x }然后实现当超过设置的时间就删除该用户记录。
dVQy S $delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
6Yd:d~9ta/j if(!($delete)) {m9At"t-Q0s~AU,M F0{
print "Useronline Delete Failed > ";
EFmCV6Z}}l8h }下面我们解决数据库中不同IP的问题0\8`Ie&D0lU
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用.V1P[,}Q2P
mysql_num_rows(query);来统计用户,代码如下。
Y;W ~'v-k $user = mysql_num_rows($result);最后关闭数据库。
ag-k"SHA^.pQ mysql_close();显示在线的人数。q!I:~8~&l:Ar
if($user == 1) {OJ6c/`'s6S
print("1 user online\n");
k(O:|#a)ahH/]7T b } else {
/@9cGKNsS'W K print("$user users online\n");/ZY#v:k)e3p
}最终把上面代码写成一个PHP文件如下。
.[)D2k~md,A9A x <?php
+R}URv}R|e'P //Put your basic server info here0w'[ UX!l
$server = "localhost"; //normally localhost
4dF@$aoP)cJ $db_user = "root"; //your MySQL database usernameto~F&N'y
$db_pass = "password"; //your MySQL database password
+a5F5W {-FG $database = "users";
6l3|`G.XZ $timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are N-\ Q~%`'e&M
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last9FzFG2W+_
// $timeoutseconds seconds)c4WL8L~ rD
//this is where PHP gets the time
!l"_afG6[_z,U3[6H V $timestamp = time();/lQWTl
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
z-{}P9Q2xe*ji&R $timeout = $timestamp-$timeoutseconds;
S|L%N+g#y+M~ //connect to databaseD5Y%eH*s WA2J~
mysql_connect($server, $db_user);
\"JQ9Z-n //add the timestamp from the user to the online list
#k6_l u n]@f $insert = mysql_db_query($database, "INSERT INTO useronline VALUES
X)lwV,G p$i ('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");3fy6A%iB2{z w[d
if(!($insert)) {
7F{p{5n5Y1q print "Useronline Insert Failed > ";
{-Q(V3K;S3}/E }
m-uw \6a"O0v*h'u //delete the peoples which haven't been online/active in the last $timeoutseconds seconds.#ef'N5xBV'^;_q
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");G&_$}pyX?5L
if(!($delete)) {Z]'v{(Rk!r$LHQ_
print "Useronline Delete Failed > ";V$WGoDt G7m
}
!gq-k Q?#Y7n //select the amount of people online, all uniques, which are online on THIS page4[7To2XiJ*` V-~
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
I x"C4CI9K J,K if(!($result)) {
z:O+FI!]\? print "Useronline Select Error > ";
R:nM6uTK }}5s]u"Ai2u u
//Count the number of rows = the number of people online
:N(]t'mh.n $user = mysql_num_rows($result);2PRPnY#qhc\0Xcd
//spit out the results
gLcu(j)}G WJ+{ mysql_close();
Q D)OEj_W bE(Ok if($user == 1) {
u6`d-?$um)jcl%d print("1 user online\n");/io4{p:WB.}
} else {
\z^T]g!C A)G6k print("$user users online\n");
#|}/ZW"I8M `Q)`2w }
H6Jg3d*L ?>
jr#`y)is8_L [url=http://www.now.cn/vhost/][img]http://b.todayisp.com/bbs/760x90h.gif[/img][/url]
6Hc9z:m$W&e0wu`1T 以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。h0|1AOkY_
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
9Z*J![3L#EM%O 我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
M1b |"utE9OK 当然啦,这两款主机也是相当不错的。
E9WV y2d 智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年H0v?1z)T!|
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
mow%x%@7w.r"MG 提供一下这个公司的联系方式:请见:[url=http://www.now.cn/vhost/]http://www.now.cn/vhost/[/url]
Kla0~ ^er#{ 空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 [url=http://www.now.cn/callcenter/call.net?LineName=55]http://www.now.cn/callcenter/call.net?LineName=55[/url]ST6[ C+T:Nv
自己加QQ去问吧。

页: [1]
【捌玖网络】已经运行:


Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.