2011-12-15 84 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