[英]PHP dynamically generated hit counter
我是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
計數器http://www.website.com/index.php?w=yellow.html
。
編輯:我應該補充一點,此腳本旨在接受任何URL。 我意識到這使事情變得非常復雜。 我的最終目標是,如果針對該特定URL的計數器還不存在,那么它將立即生成。
您當前的代碼將每個頁面的命中點作為簡單字符串保存到同一文件中。
您有很多選擇。 如果您更喜歡使用文本文件而不是數據庫,那么可以使用這種方法。
您可以輸入URL,對其進行哈希處理,然后將該頁面的計數器保存在以哈希命名的文本文件中。
就像是
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);
}
然后,您可以回顯該標題下的匹配,或將匹配添加到另一個腳本中並像這樣回顯。
如果您需要它來快速創建新文件,則可以添加以下內容
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']更改為更長的隨機字符串。
無論$_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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.