0

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

4

2 回答 2

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);
于 2012-11-17T11:29:15.977 回答
-1

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

如果由于某种原因您无法访问 MySQL,那么也许可以尝试 SQLite http://php.net/manual/en/book.sqlite.php,它为您提供了很多 sql 类型的功能,但基于您的本地目录而不是 sql server。

于 2012-11-17T12:43:12.913 回答