<?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;
?>
答案 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