php反避免刷新

时间:2014-02-20 15:07:22

标签: php counter

那里!我写了一段代码来反击我的网站的访问者没有刷新。以下是我的代码,任何人都可以给我一些关于代码的提示并给出一些建议吗?

<?php

    $counterFile='counter.txt';
    $ipFile='ip.txt';
    if(!is_file($counterFile)){
        file_put_contents($counterFile,0);
    }
    if(!is_file($ipFile)){
        file_put_contents($ipFile,0);
    }


    $handle=fopen($counterFile,'rb') or die('error:can not open the counter file');
    $fileSize=filesize($counterFile);
    $counter=intval(fread($handle,$fileSize));
    fclose($handle);
    /**----$counter=file_get_contents($counterFile);----***/

    $oldIp=file_get_contents($ipFile);
    $currIp=$_SERVER['REMOTE_ADDR'];
    //echo $oldIp.'==='.$currIp;


    if($oldIp!=$currIp){
        ++$counter;
        $handle=fopen($counterFile,'wb');
        fwrite($handle,$counter);
        fclose($handle);
        /**----file_put_contents($counterFile,$counter);----***/
    }


    file_put_contents($ipFile,$currIp);


    echo $counter;

?>

2 个答案:

答案 0 :(得分:0)

您可以使用Google Analytics或基本统计资料包。或者您可以通过IP地址跟踪它们,其中一个IP地址中的一个人是一个访问者。或者您可以使用cookie,您可以在访客第一次请求时设置cookie,以便您确定来自同一访客的进一步请求

答案 1 :(得分:0)

您可以通过魔术方法__destruct序列化destruct上的对象,并创建一个静态函数,该函数提供未序列化的新实例(如果存在):

<?php

class Counter {
   const CACHE_FILE = '/tmp/counter.clss';
   protected $_counter = 0;
   public function up(){
     $this->_counter++;
   }

   public function down(){
     $this->_counter--;
   }

   public function howmany(){
     print $this->_counter;
   }

   public function __destruct(){
     file_put_contents(self::CACHE_FILE,serialize($this));
   }

   public static function retrieve(){
     if(file_exists(self::CACHE_FILE)){
       $obj = unserialize(file_get_contents(self::CACHE_FILE));
     }else{
       $obj = new self;
     }
     return $obj;
   }
}
$ctr = Counter::retrieve();
$ctr->up();
$ctr->howmany();

然后调用该文件,如果临时文件存在,将重新创建对象,然后求和计数器:

~$ php counter.php
1
~$ php counter.php
2
~$ php counter.php
3