PHP和文件处理过程记录访客ips并禁止它们

时间:2012-11-17 11:16:40

标签: php file-handling

我想将访问者ips记录在一个文件中。在第二次尝试访问后,我不希望该人在10天内访问该网站。如果他再次访问,那么我想要生成禁止的消息。我可以用mysql数据库做这个,但我想通过文件处理。它迫切需要

2 个答案:

答案 0 :(得分:0)

我认为以下代码段对您有所帮助:

define('IP_FILE', 'ip.php');//where to save IP data
define('LIMIT_SECONDS', 10*24*3600); // 10 days
//loading IP data
function loadIPFile() {
    if (file_exists(IP_FILE)) {
       require_once IP_FILE;
       if (isset($ipArray) and is_array($ipArray)) {
            return $ipArray;
        }
    }
    return array();
}

//saving IP data
function saveIPFile($ipArray) {
    $fp = fopen(IP_FILE, 'wb');
    fwrite($fp, '<?php'.PHP_EOL);
    fwrite($fp, '$ipArray = '.var_export($ipArray, true).';'.PHP_EOL);
    fwrite($fp, '?>');
    fclose($fp);
}

$ipArray = loadIPFile();//load info into array
$ip = $_SERVER['REMOTE_ADDR'];//visitor ip
//if such ip already exists and 10 days are not behind us redirect visitor
if (isset($ipArray[$ip]) and time() - $ipArray[$ip] < LIMIT_SECONDS) {
   header('Location: banned_page.php');
   exit;
}
else {
    //else record new  ip or new time
    $ipArray[$ip] = $time;
}
//save IP information
saveIPFile($ipArray);

答案 1 :(得分:-1)

如果您知道如何使用数据库执行此操作,为什么要使用文件执行此操作?数据库基本上是一个位于顶部的功能文件,可帮助您访问数据。通过使用文件直接存储这种数据,您必须重写MySQL开箱即用的最小访问功能。为什么重新发明轮子?

如果由于某种原因你没有访问MySQL,那么也许尝试SQLite http://php.net/manual/en/book.sqlite.php,给你很多sql类型的功能,但是基于你本地目录中的文件而不是sql server。