.txt文件中的PHP字符串IP地址?

时间:2014-02-26 19:24:58

标签: php .htaccess

我正在为管理面板编写一个功能,阻止apache级别的ip地址。该文件名为blacklist.txt,看起来像10.0.0.1,10.0.0.2,10.0.0.3, ...所有单行,每个ip地址用逗号分隔。阅读What is the best way to write a large file to disk in PHP?后,我仍然不确定此事的最佳做法。

以下是我想要做的事情: IF 管理员按下'禁止锤',读取文件查找strpos($file, $ip),如果找不到,则附加到结尾文件和.htaccess文件相应地阻塞。

问题:是一个适合这个潜在大量数据的.txt文件吗?我不想执行查询来检查每次请求页面时是否禁止某人

修改: 目的是阻止在过去12小时内有10次失败登录尝试的单个IP地址。我认为'恢复我的密码'会阻止普通客户这样做。

2 个答案:

答案 0 :(得分:3)

  

问题:是一个适合这个潜在大量的.txt文件   数据?

不,不是。具有适当索引的数据库是。

答案 1 :(得分:1)

首先以CSV格式阅读您的文件

你可以用很多方法。例如:

$rows = array_map('str_getcsv', file('myfile.csv'));
$header = array_shift($rows);
$csv = array();
foreach ($rows as $row) {
   $csv[] = array_combine($header, $row);
}

src:http://steindom.com/articles/shortest-php-code-convert-csv-associative-array

用于检查每个页面上的加载并最小化该文件的读取

你可以使用内存缓存,比如memCache,然后在数组中搜索传入的ip。注意:内存缓存比数据库查询更快。

PHP共享内存ref:http://www.php.net/manual/en/book.shmop.php

memCache php.net/memcache

数组搜索php.net/in_array

如果找到值php.net/array_search

,也返回密钥

注意:在1 mb文件中,你可以存储~65K IP,考虑到ip是以下格式:“255.255.255.255,”

如果你将数组的密钥放入ip,那就更好了,然后你可以检查密钥是否存在,而不是搜索数组:php.net/array_key_exists