检查IP的多个列表?

时间:2015-01-25 00:41:49

标签: php

现在我正在检查1个文本文件,查找如下所示的IP列表:

$list1 = file("../list1.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$listarray = !in_array($_SERVER['REMOTE_ADDR'], $list1);

if( $listarray ){
    ...
}

我想查看3个文件,因此我会$list1$list1$list2而不是$list3,但最好的方法是编码确保按时间顺序检查?

1 个答案:

答案 0 :(得分:0)

你可以制作一个循环并在里面一次检查一个文件。这样你就不得不一次加载一个文件,节省一点内存(尽管这些文件不应该太大)。

现在我不知道您的确切用例,所以我有两个例子。

如果你想检查这些文件的任何中的IP是否(或不是),你的循环将如下所示。在循环内部,检查ip是否在文件中。如果是,则将变量设置为true并中断循环(无需检查其他文件)。

$inarray = false;
for ($i = 1; $i <= 3; $i++)
{
  $list = file("../list$i.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
  $inarray = in_array($_SERVER['REMOTE_ADDR'], $list);
  if ($inarray) 
    break; // no need to continue checking if there is one match?
}

if ($inarray)
{
  // Your redirect code goes here.
}

如果您需要检查文件中每个中是否(或不是)IP,则循环内的代码会略有不同。最值得注意的是,$inarray的结果与先前的结果and相同,而在失败时,循环被破坏。

$inarray = true;
for ($i = 1; $i <= 3; $i++)
{
  $list = file("../list$i.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
  $inarray = $inarray && in_array($_SERVER['REMOTE_ADDR'], $list);
  if (!$inarray) 
    break; // no need to continue checking if one check has failed.
}

if (!$inarray)
{
  // Your redirect code goes here.
}