PHP уникальный счетчик посещений не работает - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь сделать уникальный счетчик посещений с помощью PHP на основе IP-адреса пользователя.

Это моя попытка:

$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-адресом, который хранится в этом текстовом документе, он вернет false .

И после этого он открывает count.txt для подсчета попаданий. В конце концов, он также добавит IP-адрес к ip.txt.

Но теперь проблема с этим кодом в том, что он не делает то, что должен делать. Я имею в виду, что оба текстовых файла пусты даже после выполнения.

И никаких ошибок также не появляется, потому что коды написаны правильно.

Итак, мой вопрос: что не так с этим кодом, и как я могу это исправить?

Заранее спасибо.

1 Ответ

0 голосов
/ 27 июня 2018

Я создал похожую функциональность несколько дней назад. вот мой код, попробуйте.

<?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();
?>
...