用于网页的php计数器,每个页面变量都有GET变量

时间:2014-02-19 19:14:29

标签: php

我用这个

<?php   $handle = fopen("counter.txt", "r"); if(!$handle){
   echo "could not open the file" ;   } else {


$counter = (int ) fread($handle,20);
fclose ($handle);
$counter++;
echo" <strong> you are visitor no ". $counter . " </strong> " ; $handle = fopen("counter.txt", "w" ); fwrite($handle,$counter) ;
     

fclose($ handle);       }?&gt;

但是它为每个条目的页面tst.php设置了一个计数器。

我想为这个页面计算tst.php?id = 1

但如果我改为tst.php?id = 2来存储这些数据,但是从零开始计数。

然后返回到tst,php?id = 1并显示继续计算对此页面的访问次数。

和另一个tst.php?id = ....

每个id页面!

4 个答案:

答案 0 :(得分:0)

每次加载页面时,请考虑使用parse_url()来确定结束查询字符串。将其输入您的文件。

$query = parse_url($url, PHP_URL_QUERY);

答案 1 :(得分:0)

我想你想为每一页都设一个单独的计数器。 如果是,这是您的代码的编辑版本:

$fp = fopen('counter'.intval($_GET['id']).'.txt', 'r+');

while(!flock($fp, LOCK_EX)) {  // acquire an exclusive lock
// waiting to lock the file 
}

$counter = intval(fread($fp, filesize('counter'.intval($_GET['id']).'.txt'))); $counter++;

ftruncate($fp, 0);      // truncate file 
fwrite($fp, $counter);  // set your data 
fflush($fp);            // flush output before releasing the lock 
flock($fp, LOCK_UN);    // release the lock

fclose($fp);

我将id放入文件名中。


编辑: 要在一个counter.txt文件中创建它(这是低效的):

$fh = fopen('counter.txt', 'c+'); //Open file
while(!flock($fh, LOCK_EX)) {} //Lock file
$var = json_decode(fread($fh, filesize('counter.txt'))); //Json decode file to array
if(isset($var)) $var[(int)$_GET['id']]++; else $var[(int)$_GET['id']] = 1; //Increment the id's array value by one
ftruncate($fh, 0); //Erase file contents
fwrite($fh, json_encode($var)); //Write json encoded array
fflush($fh); //Flush to file
flock($fh, LOCK_UN); //Unlock file
fclose($fh); //Close file

但正如h2ooooooo所说,基于数据库的解决方案会更好。(如果你愿意的话我会写的)

答案 2 :(得分:0)

尝试使用以下代码,除了在单个文件中存储个人ID的计数器之外,其代码与代码相同:

$fp = fopen("counter.txt".$_GET["id"], "r+");

while(!flock($fp, LOCK_EX)) {  // acquire an exclusive lock
    // waiting to lock the file }

$counter = intval(fread($fp, filesize("counter.txt".$_GET["id"]))); $counter++;

ftruncate($fp, 0);      // truncate file fwrite($fp, $counter);  // set your data fflush($fp);            // flush output before releasing the lock flock($fp, LOCK_UN);    // release the lock

fclose($fp);

答案 3 :(得分:0)

您可以尝试以下内容:

   <?php
$const='counter';
$id=$_GET['id'];
$ext='.txt';
if(file_exists($const.$id.$ext))
{
$file=fopen($const.$id.$ext,'r');
$data=fread($file,filesize($const.$id.$ext));
fclose($file);
$file=fopen($const.$id.$ext,'w');
fwrite($file,$data+1);
}
else
{
$file=fopen($const.$id.$ext,'w+');
fwrite($file,1);
fclose($file);
}
?>

这将为您在网址中传递的每个“ID”创建文件。 将以上代码复制到ex:counter.php的文件中,并将其包含在需要计数器的文件中:

<?php
include "counter.php"
?>

希望这可以解决您的问题!