论坛: 网站建设 标题: PHP写的计数器 复制本贴地址    
作者: yaochi [yaochi]    论坛用户   登录
一个PHP写的计数器,有些明白了,但还是有点不懂,希望有人点破
<?
$counterFile =  "/tmp/counter.txt";//记数器文件的位置

function displayCounter($counterFile) //这里我看不明白,FUNCTION是定义函数的,DISPLAYCONTER是什么意思呢?
{
  $fp     = fopen($counterFile,"rw");打开文件
  $num    = fgets($fp,5);
  $num    += 1;//在原访问数字上加1
  print  "您是第 "."$num"." 位无聊份子";//显示是第N位来客
  exec( "rm -rf $counterFile");
  exec( "echo $num > $counterFile");
}

if (!file_exists($counterFile)) {
  exec( "echo 0 > $counterFile");//EXEC函数是执行外部程序的,这里是什么意思?
}

displayCounter($counterFile);//跟最上面一样,displayCounter被定义成“什么东西”?这里有什么用?

?>


地主 发表时间: 01/03 14:19

回复: gc2600 [gc2600]   论坛用户   登录


---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 &copy; 1999, Wilson Peng 

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


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


Copyright &copy; 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");

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




[此贴被 酸杏子~贝赛尔曲线(gc2600) 在 01月10日21时19分 编辑过]

B1层 发表时间: 2003-01-10 21:33:19

回复: gc2600 [gc2600]   论坛用户   登录
--------
我搜索的,我也学习学习!
--------

B2层 发表时间: 01/10 21:22

回复: taoxuedadi [taoxuedadi]   论坛用户   登录
不知道哪里有空间啊

B3层 发表时间: 01/10 21:28

回复: yaochi [yaochi]   论坛用户   登录
回答二楼,不是C,你以为是C,是因为PHP的语法与C基本一致罢了
另外,我问的你们好像根本没回答啊!酸搜索到的教程我都有,我问的
是重点,有人解释么?

B4层 发表时间: 01/11 18:16

论坛: 网站建设

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号