PHP 唯一命中计数器不起作用
PHP Unique Hit Counter Does Not Work
我正在尝试根据用户的 IP 地址使用 PHP 创建一个唯一的点击计数器。
这是我的尝试:
$ip_address = $_SERVER["REMOTE_ADDR"];
function hit_count(){
$ip_file = file('ip.txt');
foreach($ip_file as $ip){
$ip_single = trim($ip);
if($ip_address == $ip_single){
$found = true;
break;
}else{
$found = false;
}
}
if($found == false){
$filename = "count.txt";
$handle = fopen($filename,"r");
$current = fread($handle,filesize($filename));
fclose($handle);
$current_inc = $current + 1;
$handle = fopen($filename,"w");
fwrite($handle,$current_inc);
fclose($handle);
$handle = fopen("ip.txt","a");
fwrite($handle,$ip_address."\n");
fclose($handle);
}
}
如您所见,它几乎获取了用户的 IP 地址,然后调用了文本文档 ip.txt
。因此,如果用户的 IP 地址与存储在该文本文档中的 IP 地址不匹配,它将 return false。
然后,它会打开 count.txt
以计算点击次数。最后,它会将 IP 地址也添加到 ip.txt
。
但是现在这段代码的问题是它没有做它必须做的事情。我的意思是即使在执行后两个文本文件都是空的。
也没有出现错误,因为代码写对了。
所以我的问题是,这段代码有什么问题,我该如何解决?
提前致谢。
几天前我创建了一个类似的功能。这是我的代码,请尝试一下。
<?php
$filename = 'count.txt';
$ip_filename = 'ip.txt';
function hit_count(){
$ip = get_ip();
global $filename, $ip_filename;
if(!in_array($ip, file($ip_filename, FILE_IGNORE_NEW_LINES))){
$current_value = (file_exists($filename)) ? file_get_contents($filename) : 0;
file_put_contents($ip_filename, $ip."\n", FILE_APPEND);
file_put_contents($filename, ++$current_value);
}
}
function get_ip(){
if(!empty($_SERVER['HTTP_CLIENT_IP'])){
$ip_address = $_SERVER['HTTP_CLIENT_IP'];
}else if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$ip_address = $_SERVER['REMOTE_ADDR'];
}
return $ip_address;
}
hit_count();
?>
我正在尝试根据用户的 IP 地址使用 PHP 创建一个唯一的点击计数器。
这是我的尝试:
$ip_address = $_SERVER["REMOTE_ADDR"];
function hit_count(){
$ip_file = file('ip.txt');
foreach($ip_file as $ip){
$ip_single = trim($ip);
if($ip_address == $ip_single){
$found = true;
break;
}else{
$found = false;
}
}
if($found == false){
$filename = "count.txt";
$handle = fopen($filename,"r");
$current = fread($handle,filesize($filename));
fclose($handle);
$current_inc = $current + 1;
$handle = fopen($filename,"w");
fwrite($handle,$current_inc);
fclose($handle);
$handle = fopen("ip.txt","a");
fwrite($handle,$ip_address."\n");
fclose($handle);
}
}
如您所见,它几乎获取了用户的 IP 地址,然后调用了文本文档 ip.txt
。因此,如果用户的 IP 地址与存储在该文本文档中的 IP 地址不匹配,它将 return false。
然后,它会打开 count.txt
以计算点击次数。最后,它会将 IP 地址也添加到 ip.txt
。
但是现在这段代码的问题是它没有做它必须做的事情。我的意思是即使在执行后两个文本文件都是空的。
也没有出现错误,因为代码写对了。
所以我的问题是,这段代码有什么问题,我该如何解决?
提前致谢。
几天前我创建了一个类似的功能。这是我的代码,请尝试一下。
<?php
$filename = 'count.txt';
$ip_filename = 'ip.txt';
function hit_count(){
$ip = get_ip();
global $filename, $ip_filename;
if(!in_array($ip, file($ip_filename, FILE_IGNORE_NEW_LINES))){
$current_value = (file_exists($filename)) ? file_get_contents($filename) : 0;
file_put_contents($ip_filename, $ip."\n", FILE_APPEND);
file_put_contents($filename, ++$current_value);
}
}
function get_ip(){
if(!empty($_SERVER['HTTP_CLIENT_IP'])){
$ip_address = $_SERVER['HTTP_CLIENT_IP'];
}else if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$ip_address = $_SERVER['REMOTE_ADDR'];
}
return $ip_address;
}
hit_count();
?>