📄 5.1.php.htm
字号:
<html>
<head>
<meta content="text/html; charset=gb2312" http-equiv=Content-Type>
<title>访客计数器</title>
<style type="text/css">
a {text-decoration: none;color:#6666ff;}
a:hover {color:#ff0000;}
</style>
</head>
<body bgcolor=ffffff leftmargin=0 topmargin=0 marginheight=0 marginwidth=0>
<p>
<div align=center><table border=0 width=70%><tr>
<td valign=middle width=20><hr size=1 width=100%></td>
<td valign=middle nowrap><font color=e06060 size=+2><b>访客计数器</b></font></td>
<td valign=middle width=100%><hr size=1 width=100%></td>
</tr></table></div><p>
<div align=center><table border=0 width=70%><tr><td>
访客计数器是让 Web 访客知道该网页或者网站的人气指数最直接的方法。尤其是想利用网页赚钱的人,访客人数是找广告商最好的说词。当然可以将网站来访人数写成统计报表,但总是感觉直接看到比较真实,到底眼见为凭。<p>
<div align=center><img src="5.1.1.gif" alt="img/5.1.1.gif"></div>
<p>
在上图中,访客计数器的流程如下
<ol>
<li>第一位用户浏览某页。
<li>服务器程序从数据库或文件中读取该页被浏览次数。
<li>将次数加一储存,并将它送回第一位用户。
<li>第二位用户浏览某页。
<li>服务器程序从数据库或文件中读取该页被浏览次数。
<li>将次数再加一储存,并将它送回第二位用户。
</ol><p>
PHP 在没有特殊的访客计数器函数,但是我们可以用 PHP 的强大功能自已写一个访客计数器函数。<p>
以下的函数是访客计数器的原型,是由 David W. Bettis 所提供,并经过作者少许修改。<p>
<div align=center><table border=1 bgcolor=ffe0e0><tr><td>
<font color="#000000">
<html><br><head><br><title>访客计数器 原型</title><br></head><br><body><br><font color="#0000BB"><?php<br></font><font color="#FF8000">/*<br>simple access counter for php3<br>(c)1998 David W. Bettis<br>dbettis@eyeintegrated.com<br>medify by Wilson Peng<br>*/<br><br></font><font color="#0000BB">$counterFile </font><font color="#007700">= </font><font color="#DD0000">"/tmp/counter.txt"</font><font color="#007700">;<br><br>function </font><font color="#0000BB">displayCounter</font><font color="#007700">(</font><font color="#0000BB">$counterFile</font><font color="#007700">) {<br> </font><font color="#0000BB">$fp </font><font color="#007700">= </font><font color="#0000BB">fopen</font><font color="#007700">(</font><font color="#0000BB">$counterFile</font><font color="#007700">,</font><font color="#DD0000">"rw"</font><font color="#007700">);<br> </font><font color="#0000BB">$num </font><font color="#007700">= </font><font color="#0000BB">fgets</font><font color="#007700">(</font><font color="#0000BB">$fp</font><font color="#007700">,</font><font color="#0000BB">5</font><font color="#007700">);<br> </font><font color="#0000BB">$num </font><font color="#007700">+= </font><font color="#0000BB">1</font><font color="#007700">;<br> print </font><font color="#DD0000">"您是第 "</font><font color="#007700">.</font><font color="#DD0000">"$num"</font><font color="#007700">.</font><font color="#DD0000">" 位无聊份子"</font><font color="#007700">;<br> </font><font color="#0000BB">exec</font><font color="#007700">( </font><font color="#DD0000">"rm -rf $counterFile"</font><font color="#007700">);<br> </font><font color="#0000BB">exec</font><font color="#007700">( </font><font color="#DD0000">"echo $num > $counterFile"</font><font color="#007700">);<br>}<br><br>if (!</font><font color="#0000BB">file_exists</font><font color="#007700">(</font><font color="#0000BB">$counterFile</font><font color="#007700">)) {<br> </font><font color="#0000BB">exec</font><font color="#007700">( </font><font color="#DD0000">"echo 0 > $counterFile"</font><font color="#007700">);<br>}<br><br></font><font color="#0000BB">displayCounter</font><font color="#007700">(</font><font color="#0000BB">$counterFile</font><font color="#007700">);<br><br></font><font color="#0000BB">?><br></font></body><br></html><br></font>
<p>
<div align=right><font color=c0c0c0 size=-2>Copyright © 1998 David W. Bettis</font></div>
</td></tr></table></div><p>
在读取到本页时,PHP 程序先找寻 /tmp/counter.txt 文件是否存在,若不存在,则建立一个 counter.txt 文件,然后将 0 写入文件。然后读取 counter.txt 文件的内容,也就是纯文字叠,再将内文的数字存入 $num 变量中。在 $num 的变量出现在浏览器前,还有经过加一的步骤,让用户可以增加。当然,如果想灌水,就在加一步骤时加二或者加三,不过自欺是无用的。最后将访客人数再回存 /tmp/counter.txt 就一切 OK。<p><hr size=1>
<p> 当然,每一页都要这样写,岂不麻烦到了极点。这时,我们可以利用 PHP 提供的 require() 功能,将计数器整理成一个函数,酱子在使用上就方便多多了。
<p>
首先要先将 Apache 的配置文件 (httpd.conf) 加入 PHP include 文件的路径。例如要设所有的 include 文件都在 http://abcdefghijk.com.tw/include 中,可以在 httpd.conf 加入下面的例子<p>
<code>php3_include_path .:./include:../include</code><p>
别忘了重新启动 Apache 服务器,新增的 include 路径才有效。<p>
<code>./apachectl restart</code><p>
再来就在服务器的 .../include 目录中放入以下的文件,文件名存成 counter.inc<p>
下面就是 MyCounter() 函数。为了让读者方便了解,程序中的变量 $counterFile、$fp 及 $num 保持和 David W. Bettis 所配置的计数器中的变量功能相同。<p>
<div align=center><table border=1 bgcolor=ffe0e0><tr><td>
<font color="#000000">
<font color="#0000BB"><?php<br></font><font color="#FF8000">//---------------------------<br>// 访客计数器函数 MyCounter()<br>// Author: Wilson Peng<br>// Copyright (C) 1999<br>//---------------------------<br></font><font color="#007700">function </font><font color="#0000BB">MyCounter</font><font color="#007700">() {<br> </font><font color="#0000BB">$counterFile</font><font color="#007700">=</font><font color="#DD0000">"/tmp"</font><font color="#007700">.</font><font color="#0000BB">$GLOBALS</font><font color="#007700">[</font><font color="#DD0000">"PHP_SELF"</font><font color="#007700">];<br> if (!</font><font color="#0000BB">file_exists</font><font color="#007700">(</font><font color="#0000BB">$counterFile</font><font color="#007700">)) {<br> if (!</font><font color="#0000BB">file_exists</font><font color="#007700">(</font><font color="#0000BB">dirname</font><font color="#007700">(</font><font color="#0000BB">$counterFile</font><font color="#007700">))) {<br> </font><font color="#0000BB">mkdir</font><font color="#007700">(</font><font color="#0000BB">dirname</font><font color="#007700">(</font><font color="#0000BB">$counterFile</font><font color="#007700">), </font><font color="#0000BB">0700</font><font color="#007700">);<br> }<br> </font><font color="#0000BB">exec</font><font color="#007700">(</font><font color="#DD0000">"echo 0 > $counterFile"</font><font color="#007700">);<br> }<br> </font><font color="#0000BB">$fp </font><font color="#007700">= </font><font color="#0000BB">fopen</font><font color="#007700">(</font><font color="#0000BB">$counterFile</font><font color="#007700">,</font><font color="#DD0000">"rw"</font><font color="#007700">);<br> </font><font color="#0000BB">$num </font><font color="#007700">= </font><font color="#0000BB">fgets</font><font color="#007700">(</font><font color="#0000BB">$fp</font><font color="#007700">,</font><font color="#0000BB">5</font><font color="#007700">);<br> </font><font color="#0000BB">$num </font><font color="#007700">+= </font><font color="#0000BB">1</font><font color="#007700">;<br> print </font><font color="#DD0000">"$num"</font><font color="#007700">;<br> echo </font><font color="#0000BB">$counterFile</font><font color="#007700">;<br> </font><font color="#0000BB">exec</font><font color="#007700">(</font><font color="#DD0000">"rm -rf $counterFile"</font><font color="#007700">);<br> </font><font color="#0000BB">exec</font><font color="#007700">(</font><font color="#DD0000">"echo $num > $counterFile"</font><font color="#007700">);<br>}<br></font><font color="#0000BB">?><br></font>
</font>
<p>
<div align=right><font color=c0c0c0 size=-2>Copyright © 1999, Wilson Peng</font></div>
</td></tr></table></div>
<p> 当然,要用的话要加 <a href="5.1.2a.php.htm" alt="demo/5.1.2.php">Homepage</a>
中嵌入 MyCounter() 函数,就可以使用了
<p>
<div align=center><table border=1 bgcolor=ffe0e0><tr><td>
<font color="#000000">
<font color="#0000BB"><?php<br></font><font color="#007700">require(</font><font color="#DD0000">"counter.inc"</font><font color="#007700">);<br></font><font color="#0000BB">?><br></font><html><br><head><br><title>访客计数器 最终版</title><br></head><br><body><br>您是第 <font color="#0000BB"><? MyCounter</font><font color="#007700">(); </font><font color="#0000BB">?></font> 位参观者<br></body><br></html><br></font>
<p>
<div align=right><font color=c0c0c0 size=-2>Copyright © 1999, Wilson Peng</font></div>
</td></tr></table></div><p>
要用这个 MyCounter() 函数,先在 Homepage 的开头处加入 require() 函数,引入 MyCounter() 函数成为该 Homepage 的一部份。之后再将 <? MyCounter(); ?> 字符串放在需要计数器的地方就可以了。<p>
<FONT color="#0000BB"><FONT color="#007700">function</FONT> MyCounter<FONT color="#007700">(</FONT><FONT color="#007700">)</FONT> <FONT color="#007700">{</FONT><br>
<pre>
:
:
</pre>
<FONT color="#007700">}</FONT></font><p>
在建立函数时,需要用上面的格式。在自订函数名称前加入 function 字符串。<p>
每页有用到 MyCounter() 的 Homepage 都会在 /tmp 之后加入该页的路径,这可以用 $PHP_SELF 变量达成。<p>
<FONT color="#0000BB"> $counterFile=<FONT color="#DD0000"><STRONG>"/tmp"</STRONG></FONT>.$GLOBALS[<FONT color="#DD0000"><STRONG>"PHP_SELF"</STRONG></FONT>]<FONT color="#007700">;</FONT></font><p>
当然,若您要将 /tmp 改成别的目录也可以,不然在 SUN 等服务器,要是 reboot,/tmp 中的东西都没了,要重新开始再计数了。若您不知要使用什么目录,建议使用 /var/log/counter 这个目录,和其它的 log 等变动资料放在一起。<p>
<FONT color="#0000BB"> <FONT color="#007700">if</FONT> <FONT color="#007700">(</FONT>!file_exists<FONT color="#007700">(</FONT>$counterFile<FONT color="#007700">)</FONT><FONT color="#007700">)</FONT> <FONT color="#007700">{</FONT><br>
<FONT color="#007700">if</FONT> <FONT color="#007700">(</FONT>!file_exists<FONT color="#007700">(</FONT>dirname<FONT color="#007700">(</FONT>$counterFile<FONT color="#007700">)</FONT><FONT color="#007700">)</FONT><FONT color="#007700">)</FONT> <FONT color="#007700">{</FONT><br>
mkdir<FONT color="#007700">(</FONT>dirname<FONT color="#007700">(</FONT>$counterFile<FONT color="#007700">)</FONT>, 0700<FONT color="#007700">)</FONT><FONT color="#007700">;</FONT><br>
<FONT color="#007700">}</FONT><br>
exec<FONT color="#007700">(</FONT><FONT color="#DD0000"><STRONG>"echo 0 > $counterFile"</STRONG></FONT><FONT color="#007700">)</FONT><FONT color="#007700">;</FONT><br>
<FONT color="#007700">}</FONT></font><p>
这五行主要是检查 $counterFile 是否存在,若文件不存在则看目录是否存在,决定要不要建立目录。之后就建立文件,并写入 0。<p>
<FONT color="#0000BB"> $fp = fopen<FONT color="#007700">(</FONT>$counterFile,<FONT color="#DD0000"><STRONG>"rw"</STRONG></FONT><FONT color="#007700">)</FONT><FONT color="#007700">;</FONT><br>
$num = fgets<FONT color="#007700">(</FONT>$fp,5<FONT color="#007700">)</FONT><FONT color="#007700">;</FONT><br>
$num += 1<FONT color="#007700">;</FONT><br>
<FONT color="#007700">print</FONT> <FONT color="#DD0000"><STRONG>"$num"</STRONG></FONT><FONT color="#007700">;</FONT><br>
<FONT color="#007700">echo</FONT> $counterFile<FONT color="#007700">;</FONT></font><p>
这五行就是打开计数器存放的文件,并将它累加后的结果送到浏览器端。<p>
<FONT color="#0000BB"> exec<FONT color="#007700">(</FONT><FONT color="#DD0000"><STRONG>"rm -rf $counterFile"</STRONG></FONT><FONT color="#007700">)</FONT><FONT color="#007700">;</FONT><br>
exec<FONT color="#007700">(</FONT><FONT color="#DD0000"><STRONG>"echo $num > $counterFile"</STRONG></FONT><FONT color="#007700">)</FONT><FONT color="#007700">;</FONT></font><p>
最后将计数器文件删除,再重新建立一个。就完成了这个以文件为基础的纯文字计数器。
<p><hr size=1><br>如果你对此手册有任何问题,请到下面网址提问: <a href="www.web745.com">WEB开发知识库</a> (<a href="http://www.web745.com">www.web745.com</a>)<p>
</td></tr></table></div>
<p>
<div align=center>
<table border=0>
<tr>
<td>[ <a href="5.php.htm" alt="5.php">上一页</a>
</td>
<td> <a href="5.2.php.htm" alt="5.2.php">下一页</a>
]</td>
</tr>
</table>
</div><p><br><br>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -