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

PHP和文件处理过程来记录访客IP并禁止它们,php,file-handling,Php,File Handling,我想在一个文件中记录访客IP。在第二次尝试访问之后,我不希望那个人在10天内访问那个网站。如果他再次访问,那么我希望发布禁止的消息。我可以用mysql数据库来实现这一点,但我想通过文件处理来实现。它很紧急我认为下面的代码片段将对您有所帮助: define('IP_FILE', 'ip.php');//where to save IP data define('LIMIT_SECONDS', 10*24*3600); // 10 days //loading IP data function lo

我想在一个文件中记录访客IP。在第二次尝试访问之后,我不希望那个人在10天内访问那个网站。如果他再次访问,那么我希望发布禁止的消息。我可以用mysql数据库来实现这一点,但我想通过文件处理来实现。它很紧急

我认为下面的代码片段将对您有所帮助:

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);
define('IP_文件','IP.php')//在哪里保存IP数据
定义('LIMIT_SECONDS',10*24*3600);//10天
//加载IP数据
函数loadIPFile(){
如果(文件_存在(IP_文件)){
需要一次IP_文件;
if(isset($ipArray)和is_数组($ipArray)){
返回$ipArray;
}
}
返回数组();
}
//保存IP数据
函数saveIPFile($ipArray){
$fp=fopen(IP_文件“wb”);
fwrite($fp,”);
fclose($fp);
}
$ipArray=loadIPFile()//将信息加载到数组中
$ip=$\u服务器['REMOTE\u ADDR']//访客ip
//如果这样的ip已经存在,并且10天没有过去,请重定向访问者
if(设置($ipArray[$ip])和时间()-$ipArray[$ip]<限制秒){
标题('Location:banked_page.php');
出口
}
否则{
//否则记录新ip或新时间
$ipArray[$ip]=$time;
}
//保存IP信息
saveIPFile($ipArray);

如果您知道如何处理数据库,为什么要处理文件?数据库基本上是一个文件,上面有帮助您访问数据的功能。通过使用文件直接存储此类数据,您必须重写MySQL提供的最小访问功能。为什么要重新发明轮子


如果出于某种原因您无法访问MySQL,那么可以尝试使用SQLite,它为您提供了许多sql类型的功能,但基于本地目录中的文件,而不是sql server

未定义变量:第32行index.php中的时间