2011-12-15 45 views
0

我是一个总的PHP新手,我正试图写我认为是一个非常简单的脚本。这是我到目前为止的代码:PHP动态生成命中计数器

HTML/PHP

<?php 

$hits = file_get_contents('hits.txt'); 
++$hits; 
file_put_contents('hits.txt', $hits); 
echo $hits; 

$url = $_GET['w']; 
?> 

<iframe src="<?php echo $url; ?>"></iframe> 

<p> 
<?php echo $hits; ?> 
</p> 

的结果是一个iframe和命中计数器的页面。

该脚本的问题是,如果变量$url更改,则命中计数器不会。我的目标是,如果我访问http://www.website.com/index.php?w=blue.html我会得到一个不同的计数器,如果我访问http://www.website.com/index.php?w=yellow.html

编辑:我应该补充说,这个脚本旨在接受任何URL。我意识到这使事情变得复杂。我的最终目标是,如果该计数器不存在该特定的URL,它将在运行中生成。

+0

那么目前,您正在访问一个文件,并从中读写文件。您如何期望您的当前代码知道只显示一个URL的点击次数? – Cyclone 2011-12-15 23:00:10

+0

我不确定这是否可行,但我的想法是我可以使用`$ url`的值创建唯一变量来跟踪命中内的不同计数器。txt – colindunn 2011-12-15 23:02:53

回答

4

您当前的代码保存命中点的每一页相同的文件作为一个简单的字符串。

您有多种选择。如果你喜欢使用文本文件而不是数据库,那么这是一种可行的方法。

您可以将网址放入网址中,对其进行哈希,然后将该网页的计数器保存在散列名文本文件中。

喜欢的东西

if(isset($_GET) && !empty($_GET['W'])){ 
$url = md5($_GET['w']); 
$hits = file_get_contents('/hit_counters/'.$url.'.txt'); 
$hits++; 
file_put_contents('/hit_counters/'.$url.'.txt', $hits); 
} 

再后来,你可以根据该回声出安打或拉命中在另一个脚本和echo那样。

如果你需要在飞行中创建新的,你可以添加类似

if(!is_file('/hit_counters/'.$url.'.txt')){ 
$fh= fopen('/hit_counters/'.$url.'.txt', 'w'); 
fwrite($fh, '1'); 
fclose($fh); 
} 

注意 这可能最终会产生一吨的小文本文件,虽然。所以要注意。如果你担心这一点,你真的需要查看数据库或逐行读入文本文件以找到相同的散列。

为实施<?php ?>具有以下内更换你的代码的顶部:

if(isset($_GET) && !empty($_GET['W'])){ 
    $url = md5($_GET['w']); 
    if(!is_file('/hit_counters/'.$url.'.txt')){ 
     $fh= fopen('/hit_counters/'.$url.'.txt', 'w'); 
     fwrite($fh, '1'); 
     fclose($fh); 
    }else{ 
     $hits = file_get_contents('/hit_counters/'.$url.'.txt'); 
     $hits++; 
     file_put_contents('/hit_counters/'.$url.'.txt', $hits); 
    } 
} 

这将在,散页名吧,请检查/ hit_counters/THEHASH。 txt存在,如果不存在则创建它,否则添加+1。散列有点像加密,但不是真的。它会将您的$ _get ['w']更改为更长的随机查找字符串。

0

无论$_GET['w']设置为什么,您都在编写相同的hits.txt文件。尝试把hits.txt文件的文件夹中是这样的:

<?php 

$url = $_GET['w']; 

$dir = str_replace(".html", "", $url); 

$hits = file_get_contents($dir.'/hits.txt'); 
++$hits; 
file_put_contents($dir.'/hits.txt', $hits); 
echo $hits; 


?> 

<iframe src="<?php echo $url; ?>"></iframe> 

<p> 
<?php echo $hits; ?> 
</p> 
+0

如果我有一组固定的页面,那就行了。但是这个脚本的目的是接受任何URL,我的目标是它会在飞行中产生新的计数器。 – colindunn 2011-12-15 23:05:30