网页的php计数器,每个页面变量带有GET变量

网页的php计数器,每个页面变量带有GET变量,php,Php,我用这个 fclose$handle; }?> 但是它会为页面tst.php的每个条目创建一个计数器 我想计算一下这个页面的tst.php?id=1 但是如果我改为tst.php?id=2来存储这个数据,但是从零开始计数 然后返回到tst,php?id=1,并显示访问此页面的持续计数 还有另一个tst.php?id= 对于每个id页

我用这个

fclose$handle; }?>

但是它会为页面tst.php的每个条目创建一个计数器

我想计算一下这个页面的tst.php?id=1

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

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

还有另一个tst.php?id=


对于每个id页
$query = parse_url($url, PHP_URL_QUERY);

我想每一页你都需要一个单独的柜台。 如果是,以下是您的代码的编辑版本:

$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

但正如H2Ooooo所说,基于DB的解决方案会更好。如果您需要,我会编写它。请尝试以下代码,其工作方式与您的代码相同,只是将单个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);

您可以尝试以下方法:

   <?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);
}
?>
这将为您在url中传递的每个“id”创建文件。 将上述代码复制到ex:counter.php文件中,并包含在需要计数器的任何位置,如下所示:

<?php
include "counter.php"
?>

希望这能解决你的问题

您是否考虑过切换到DB解决方案?它会工作得更好,也不会弄乱你的网页。不,我希望这样的事情能更简单。没有什么,我想我只是想分享一种不同的方法!我已经改变了我的代码这是可行的,但它是相同的!我需要所有的身份证@user3329634是的,它适用于每个id,因为我们在文件名中添加了$u GET[id]。因此,它将创建单独的文件,如counter.txt1、counter.txt2。。。对于单个ID,将$counter值存储在那里。现在,如果你能详细说明你需要什么不同。我知道,但我有2000个id,我不想创建2000个count.txt文件是否可以将所有数据存储在每个id的一个cont-txt中?尽管这会起作用,还是像@H2Ooooo一样,我建议使用DB方法,因为这会更直接。我是php新手,我喜欢简化somting!我已经改变了我的代码这是可行的,但它是相同的!我需要所有的身份证!这使用了与另一个答案相同的技术,但更安全一点,这是我的ideawe同时发布的:而且,我认为最好为每个id创建一个单独的文件。因为如果您有多个id,脚本将不得不解析一个更大的文件。但是如果你真的想要的话,我会写它。$file=fopen'counter.txt'。$\u GET[id],w;这个dosent工作,可以做if语句,如果文件不存在,就创建一个从那里读取的文件。但是如果它只是为了阅读内容而存在的话,你现在可以试试代码了吗?fopen的语法不正确。我最近没有用php编写代码。很抱歉。我已经做了更改,但我不想为每个id创建文件。可以通过php代码创建文件吗?fopen/cnt/counter.txt2585[function.fopen]:无法打开流:中没有此类文件或目录
<?php
include "counter.php"
?>