页面点击计数器 - 工作但想将其限制为每个 IP 地址

Page Hit Counter - Working but want to limit it to per IP Address

我目前有一个可以计算观看次数并将其存储在 .txt 文件中的工作脚本。

它工作正常,但我如何才能使其限制为您的 IP 地址?

我试过了,但没用。

// Get filename of Page
$pageName = basename($_SERVER["SCRIPT_FILENAME"], '.php');
$ip = $_SERVER['REMOTE_ADDR']?:($_SERVER['HTTP_X_FORWARDED_FOR']?:$_SERVER['HTTP_CLIENT_IP']);

// Remove .php extension
$counterName = basename($pageName, ".php").".txt";

// Open the file for reading
// "a+" Read & write the file. Create file if not exist.
$fp = fopen($counterName, "a+");
$fpIP = fopen("ip_".$counterName, "a+");

fwrite($fpIP, $ip."-");

// Get the existing count
$count = fread($fp, 1024);

// Close the file
fclose($fp);

// Add 1 to the existing count
$count = $count + 1;

// Reopen the file and erase the contents
$fp = fopen($counterName, "w");

$ipRead = file_get_contents('ip_index.txt');

if(strpos($ipRead, "$ip") !== FALSE) {
     echo $count;
}
else {
    fwrite($fp1, $count);
    echo $count;    
}
fclose($fp);

下面是我使用 Barmar 代码更新后的代码(完全有效),它将根据每个访问者的 IP 地址显示他们访问您页面的次数。

// Get filename of Page
$pageName = basename($_SERVER["SCRIPT_FILENAME"], '.php');

// Remove .php extension
$counterName = basename($pageName, ".php").".counter";

// Get IP
$ip = $_SERVER['REMOTE_ADDR']?:($_SERVER['HTTP_X_FORWARDED_FOR']?:$_SERVER['HTTP_CLIENT_IP']);


$count_text = @file_get_contents($counterName);
$counters = $count_text ? json_decode($count_text, true) : array();
if (isset($counters[$ip])) {
    $counters[$ip]++;
} else {
    $counters[$ip] = 1;
}
file_put_contents($counterName, json_encode($counters));
echo $counters[$ip];

在计数器文件中存储一个关闭 $ip 的关联数组。

$count_text = @file_get_contents($counterName);
$counters = $count_text ? json_decode($count_text, true) : array();
if (isset($counters[$ip])) {
    $counters[$ip]++;
} else {
    $counters[$ip] = 1;
}
file_put_contents($counterName, json_encode($counters));
echo $counters[$ip];

在此设计中您不需要 ip_XXX.txt 文件。