荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: jjksam (我是傻瓜...), 信区: Program
标  题: [转载] 五.范例程序.I.访客计数器
发信站: 荔园晨风BBS站 (Thu Dec  6 11:40:46 2001), 转信

【 以下文字转载自 Homepage 讨论区 】
【 原文由 jjksam 所发表 】
访客计数器
-------------------------------------------------------------------------------
-



访客计数器是让 Web 访客知道该网页或者网站的人气指数最直接的方法。尤其是想利用网
页赚钱的人,访客人数是找广告商最好的说词。当然可以将网站来访人数写成统计报表,
但总是感觉直接看到比较真实,到底眼见为凭。


在上图中,访客计数器的流程如下

第一位用户浏览某页。
服务器程序从数据库或文件中读取该页被浏览次数。
将次数加一储存,并将它送回第一位用户。
第二位用户浏览某页。
服务器程序从数据库或文件中读取该页被浏览次数。
将次数再加一储存,并将它送回第二位用户。
PHP 在没有特殊的访客计数器函数,但是我们可以用 PHP 的强大功能自已写一个访客计数
器函数。

以下的函数是访客计数器的原型,是由 David W. Bettis 所提供,并经过作者少许修改。



<html>
<head>
<title>访客计数器 原型</title>
</head>
<body>
<?php
/*
simple access counter for php3
(c)1998 David W. Bettis
dbettis@eyeintegrated.com
medify by Wilson Peng
*/

$counterFile =  "/tmp/counter.txt";

function displayCounter($counterFile) {
  $fp     = fopen($counterFile,"rw");
  $num    = fgets($fp,5);
  $num    += 1;
  print  "您是第 "."$num"." 位无聊份子";
  exec( "rm -rf $counterFile");
  exec( "echo $num > $counterFile");
}

if (!file_exists($counterFile)) {
  exec( "echo 0 > $counterFile");
}

displayCounter($counterFile);

?>
</body>
</html>


Copyright ? 1998 David W. Bettis

在读取到本页时,PHP 程序先找寻 /tmp/counter.txt 文件是否存在,若不存在,则建立
一个 counter.txt 文件,然后将 0 写入文件。然后读取 counter.txt 文件的内容,也就
是纯文字叠,再将内文的数字存入 $num 变量中。在 $num 的变量出现在浏览器前,还有
经过加一的步骤,让用户可以增加。当然,如果想灌水,就在加一步骤时加二或者加三,
不过自欺是无用的。最后将访客人数再回存 /tmp/counter.txt 就一切 OK。



-------------------------------------------------------------------------------
-

当然,每一页都要这样写,岂不麻烦到了极点。这时,我们可以利用 PHP 提供的
require() 功能,将计数器整理成一个函数,酱子在使用上就方便多多了。

首先要先将 Apache 的配置文件 (httpd.conf) 加入 PHP include 文件的路径。例如要设
所有的 include 文件都在 http://abcdefghijk.com.tw/include 中,可以在 httpd.conf
 加入下面的例子

php3_include_path .:./include:../include

别忘了重新启动 Apache 服务器,新增的 include 路径才有效。

./apachectl restart

再来就在服务器的 .../include 目录中放入以下的文件,文件名存成 counter.inc

下面就是 MyCounter() 函数。为了让读者方便了解,程序中的变量 $counterFile、$fp
及 $num 保持和 David W. Bettis 所配置的计数器中的变量功能相同。


<?php
//---------------------------
// 访客计数器函数 MyCounter()
// Author: Wilson Peng
//        Copyright (C) 1999
//---------------------------
function MyCounter() {
  $counterFile="/tmp".$GLOBALS["PHP_SELF"];
  if (!file_exists($counterFile)) {
    if (!file_exists(dirname($counterFile))) {
      mkdir(dirname($counterFile), 0700);
    }
    exec("echo 0 > $counterFile");
  }
  $fp = fopen($counterFile,"rw");
  $num = fgets($fp,5);
  $num += 1;
  print "$num";
  echo $counterFile;
  exec("rm -rf $counterFile");
  exec("echo $num > $counterFile");
}
?>


Copyright ? 1999, Wilson Peng

当然,要用的话要加 Homepage 中嵌入 MyCounter() 函数,就可以使用了


<?php
require("counter.inc");
?>
<html>
<head>
<title>访客计数器 最终版</title>
</head>
<body>
您是第 <? MyCounter(); ?> 位参观者
</body>
</html>


Copyright ? 1999, Wilson Peng

要用这个 MyCounter() 函数,先在 Homepage 的开头处加入 require() 函数,引入
MyCounter() 函数成为该 Homepage 的一部份。之后再将 <? MyCounter(); ?> 字符串放
在需要计数器的地方就可以了。

function MyCounter() {


:
:

}
在建立函数时,需要用上面的格式。在自订函数名称前加入 function 字符串。

每页有用到 MyCounter() 的 Homepage 都会在 /tmp 之后加入该页的路径,这可以用
$PHP_SELF 变量达成。

  $counterFile="/tmp".$GLOBALS["PHP_SELF"];

当然,若您要将 /tmp 改成别的目录也可以,不然在 SUN 等服务器,要是 reboot,
/tmp 中的东西都没了,要重新开始再计数了。若您不知要使用什么目录,建议使用
/var/log/counter 这个目录,和其它的 log 等变动资料放在一起。

  if (!file_exists($counterFile)) {
    if (!file_exists(dirname($counterFile))) {
      mkdir(dirname($counterFile), 0700);
    }
    exec("echo 0 > $counterFile");
  }

这五行主要是检查 $counterFile 是否存在,若文件不存在则看目录是否存在,决定要不
要建立目录。之后就建立文件,并写入 0。

  $fp = fopen($counterFile,"rw");
  $num = fgets($fp,5);
  $num += 1;
  print "$num";
  echo $counterFile;

这五行就是打开计数器存放的文件,并将它累加后的结果送到浏览器端。

  exec("rm -rf $counterFile");
  exec("echo $num > $counterFile");

最后将计数器文件删除,再重新建立一个。就完成了这个以文件为基础的纯文字计数器。




-------------------------------------------------------------------------------
-


--
   mm       ☆__      __  __ __☆______ ______ __  __☆
/^(  )^\      █      █  █/    █____ █__█ █∨█
\,(..),/  ▅__█  ▅__█  █\__  ▂__█ █  █ █  █
  V~~V   ▇▆▅▃▁I'm a bat. I'm very bad!^Q^_▃▄▆▇你好!^_^欢迎大家到linux?

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.146]
--
※ 转载:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.146]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店