【问题标题】:(PHP) storing IP address of clicks(PHP) 存储点击的IP地址
【发布时间】:2018-10-05 13:13:16
【问题描述】:

经过将近 3 天的故障排除后,我需要寻求建议。

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是否已经存在并且当我点击时只是继续添加副本。

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

【问题讨论】:

  • 好吧,首先,我建议使用数据库而不是文本文件。
  • 数据库更好,您可以在喜欢之前要求用户登录,以更好地确保这不是重复的。

标签: php click ip counter isset


【解决方案1】:

使用 MySQL 数据库来完成此操作。
使用文本文件效率极低,当多个用户同时点赞时可能会导致冲突!

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

我不建议只使用 IP,因为某些 ISP 提供的动态 IP 每隔几秒就会更改一次 IP(公共 IP)地址。
使用 cookie 为用户存储一个唯一的 cookie(如果他们没有登录),或者只是要求用户在投票前先登录!

有关 MySQL 插入和选择的信息在 Google 上随处可见。
这是一个:https://www.w3schools.com/sql/

【讨论】:

    【解决方案2】:

    最佳方法:使用数据库或使用 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));
    

    【讨论】:

    • 这只是直接返回空白文件。另外,$line2 没有确定
    猜你喜欢
    • 2011-10-30
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 2011-10-22
    • 2014-09-08
    • 2011-10-05
    • 2014-05-23
    相关资源
    最近更新 更多