我用这个
<?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页面!
答案 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"
?>
希望这可以解决您的问题!