haidong 发表于 2010-2-24 13:39:44

php网页计数器的原理

访客计数器是让 Web 访客知道该网页或者网站的人气指数最直接的方法。尤其是想利用网页赚钱的人,访客人数是找广告商最好的说词。当然可以将网站来访人数写成统计报表,但总是感觉直接看到比较真实,到底眼见为凭。 <BR><BR><BR>在上图中,访客计数器的流程如下 <BR><BR>1.. 第一位使用者浏览某页。 <BR>2.. 伺服器程式从资料库或档案中读取该页被浏览次数。 <BR>3.. 将次数加一储存,并将它送回第一位使用者。 <BR>4.. 第二位使用者浏览某页。 <BR>5.. 伺服器程式从资料库或档案中读取该页被浏览次数。 <BR>6.. 将次数再加一储存,并将它送回第二位使用者。 <BR>PHP 在没有特殊的访客计数器函式,但是我们可以用 PHP 的强大功能自已写一个访客计数器函式。 <BR><BR>以下的函式是访客计数器的原型,是由 David W. Bettis 所提供,并经过作者少许修改。 <BR><BR><BR><DIV >&lt;html&gt; <BR>&lt;head&gt; <BR>&lt;title&gt;访客计数器 原型&lt;/title&gt; <BR>&lt;/head&gt; <BR>&lt;body&gt; <BR>&lt;?php <BR>/* <BR>simple access counter for php3 <BR>(c)1998 David W. Bettis <BR>dbettis@eyeintegrated.com <BR>medify by Wilson Peng <BR>*/ <BR><BR>$counterFile = "/tmp/counter.txt"; <BR><BR>function displayCounter($counterFile) { <BR>$fp = fopen($counterFile,"rw"); <BR>$num = fgets($fp,5); <BR>$num += 1; <BR>print "您是第 "."$num"." 位无聊份子"; <BR>exec( "rm -rf $counterFile"); <BR>exec( "echo $num &gt; $counterFile"); <BR>} <BR><BR>if (!file_exists($counterFile)) { <BR>exec( "echo 0 &gt; $counterFile"); <BR>} <BR><BR>displayCounter($counterFile); <BR><BR>?&gt; <BR>&lt;/body&gt; <BR>&lt;/html&gt; <BR></DIV><BR><BR><BR>在读取到本页时,PHP 程式先找寻 /tmp/counter.txt 档案是否存在,若不存在,则建立一个 counter.txt 档案,然后将 0 写入档案。然后读取 counter.txt 档案的内容,也就是纯文字档,再将内文的数字存入 $num 变数中。在 $num 的变数出现在浏览器前,还有经过加一的动作,让使用者可以增加。当然,如果想灌水,就在加一动作时加二或者加三,不过自欺是无用的。最后将访客人数再回存 /tmp/counter.txt <BR>就一切 OK。 <BR><BR>当然,每一页都要这样写,岂不麻烦到了极点。这时,我们可以利用 PHP 提供的 require() 功能,将计数器整理成一个函式,酱子在使用上就方便多多了。 <BR><BR>首先要先将 Apache 的设定档 (httpd.conf) 加入 PHP include 档案的路径。例如要设所有的 include 档都在 http://abcdefghijk.com.tw/include 中,可以在httpd.conf 加入下面的例子 <BR><BR>php3_include_path .:./include:../include <BR><BR>别忘了重新启动 Apache 伺服器,新增的 include 路径才有效。 <BR><BR>./apachectl restart <BR><BR>再来就在伺服器的 .../include 目录中放入以下的档案,档名存成 <BR>counter.inc <BR><BR>下面就是 MyCounter() 函式。为了让读者方便了解,程式中的变数 <BR>$counterFile、$fp 及 $num 保持和 David W. Bettis 所设定的计数器中的变数功能相同。 <BR><BR><BR><DIV >&lt;?php <BR>file://--------------------------- <BR>// 访客计数器函式 MyCounter() <BR>// Author: Wilson Peng <BR>// Copyright (C) 1999 <BR>file://--------------------------- <BR>function MyCounter() { <BR>$counterFile="/tmp".$GLOBALS["PHP_SELF"]; <BR>if (!file_exists($counterFile)) { <BR>if (!file_exists(dirname($counterFile))) { <BR>mkdir(dirname($counterFile), 0700); <BR>} <BR>exec("echo 0 &gt; $counterFile"); <BR>} <BR>$fp = fopen($counterFile,"rw"); <BR>$num = fgets($fp,5); <BR>$num += 1; <BR>print "$num"; <BR>echo $counterFile; <BR>exec("rm -rf $counterFile"); <BR>exec("echo $num &gt; $counterFile"); <BR>} <BR>?&gt; <BR></DIV><BR><BR>Copyright ? 1999, Wilson Peng <BR><BR>当然,要用的话要加 Homepage 中嵌入 MyCounter() 函式,就可以使用了。 <BR><BR><BR><DIV >&lt;?php <BR>require("counter.inc"); <BR>?&gt; <BR>&lt;html&gt; <BR>&lt;head&gt; <BR>&lt;title&gt;访客计数器 最终版&lt;/title&gt; <BR>&lt;/head&gt; <BR>&lt;body&gt; <BR>您是第 &lt;? MyCounter(); ?&gt; 位参观者 <BR>&lt;/body&gt; <BR>&lt;/html&gt; </DIV><BR><BR>Copyright ? 1999, Wilson Peng <BR><BR>要用这个 MyCounter() 函式,先在 Homepage 的开头处加入 require() 函式,引入 MyCounter() 函式成为该 Homepage 的一部份。之后再将 &lt;? MyCounter(); ?&gt;字串放在需要计数器的地方就可以了。 <BR><BR>function MyCounter() { <BR>: <BR>: <BR><BR>} <BR>在建立函式时,需要用上面的格式。在自订函式名称前加入 function 字串。 <BR><BR>每页有用到 MyCounter() 的 Homepage 都会在 /tmp 之后加入该页的路径,这可以用 $PHP_SELF 变数达成。 <BR><BR>$counterFile="/tmp".$GLOBALS["PHP_SELF"]; <BR><BR>当然,若您要将 /tmp 改成别的目录也可以,不然在 SUN 等伺服器,要是reboot,/tmp 中的东西都没了,要重新开始再计数了。若您不知要使用什么目录,建议使用 /var/log/counter 这个目录,和其它的 log 等变动资料放在一起。 <BR><BR><DIV >if (!file_exists($counterFile)) { <BR>if (!file_exists(dirname($counterFile))) { <BR>mkdir(dirname($counterFile), 0700); <BR>} <BR>exec("echo 0 &gt; $counterFile"); <BR>} </DIV><BR><BR>这五行主要是检查 $counterFile 是否存在,若档案不存在则看目录是否存在,决定要不要建立目录。之后就建立档案,并写入 0。 <BR><BR><DIV >$fp = fopen($counterFile,"rw"); <BR>$num = fgets($fp,5); <BR>$num += 1; <BR>print "$num"; <BR>echo $counterFile; </DIV><BR><BR>这五行就是打开计数器存放的档案,并将它累加后的结果送到浏览器端。 <BR><BR><DIV >exec("rm -rf $counterFile"); <BR>exec("echo $num &gt; $counterFile"); </DIV><BR><BR>最后将计数器档案删除,再重新建立一个。就完成了这个以档案为基础的纯文字计数器。 <BR>
页: [1]
查看完整版本: php网页计数器的原理