(PHP)存储点击的IP地址

时间:2018-10-05 13:13:17

标签: php click ip counter isset

经过近三天的故障排除,我不得不寻求建议。

A有一个带有4个图像和4个“喜欢”按钮的小图像板。之前,我做到了,因此每个按钮的点击次数都存储在.txt文件中。现在,我基本上需要这样做,以便一个人只能按某个按钮一次

这是ip.txt。左边的数字是按钮ID,右边的数字是单击该按钮的人的IP。

click-001||127.0.0.1
click-002||

这很简单。我需要确保在单击PC时它存储ip,然后在单击我的键盘时存储另一个IP-并停止,然后执行下一步操作。现在,最近几天它一直在做任何事情!

我当前的isset代码。可以看到第一个IP,但没有添加第二个:

$file2 = 'ip.txt'; // path to text file that stores counts
$fh2 = fopen($file2, 'r+');
$ip_addr = $_SERVER['REMOTE_ADDR'];
$lines2 = '';
while(!feof($fh2)) {
    $line2 = trim(fgets($fh2));
    if ($line2) {
        $line2 = explode('||', $line2);
        if(isset($line2[0], $line2[1])) {
            $item2 = trim($line2[0]);
            if(!empty($item2)) {
                if($item2 == $id) { 
                    if(empty($line2[1])) {
                        $lines2 .= "$item2||$ip_addr\r\n";
                        file_put_contents($file2, $lines2);
                    } else {
                        // this is where it always fails
                        if (!isset($ip_addr)) {                             $ip_all = $line2[1] . " " . $ip_addr;
                            $lines2 .= "$item2||$ip_all\r\n";
                            file_put_contents($file2, $lines2); 
                        } else {
                            echo "lul"; 
                        }
                    } 
                } 
            }
        }
    }
}
fclose($fh2);

我也使用in_array函数进行了尝试:

$ip_all = array($line2[1]); 
    if (!in_array($ip_addr, $ip_all)) {
        array_push($ip_all, ',' , $ip_addr);            
        $ip_fin = implode($ip_all);
        $lines2 .= "$item2||$ip_fin\r\n";
        file_put_contents($file2, $lines2); 

^此人也看到了第一个IP,并添加了第二个,但随后找不到IP是否已存在,并且在单击时一直在添加副本。

这很残酷。我在做什么错,有没有更简单的方法?

2 个答案:

答案 0 :(得分:1)

使用MySQL数据库完成此任务。
使用文本文件效率极低,并且当多个用户同时喜欢时会导致冲突!

每当用户单击“赞”按钮,然后将IP插入数据库中,然后使用选择查询来确定该IP以前是否喜欢该图片。

我不建议仅使用IP,因为某些ISP会提供动态IP,每隔几秒钟就会更改IP(公共IP)地址。
使用Cookie为用户存储唯一的Cookie(如果他们尚未登录),或者只是要求用户先登录才能投票!

有关MySQL Insert和Select的信息在Google上无处不在。
这是一个:https://www.w3schools.com/sql/

答案 1 :(得分:0)

最佳方法:使用数据库或使用XML(XML具有非常有用的库)


文本文件方法:

获取文件并编辑...

$id = "...";
$ip="...";
$file2 = file('ip.txt'); 


$file2 = array_map(
  function($current_line) use ($id,$ip) {
    $current_line = explode('||', $current_line);
    if($current_line[0] == $id){
        $current_line[]=$ip;
    }
    return join("||",$current_line);
  },$file2
);

file_put_contents('ip.txt', implode('\n', $file2));
相关问题