现在我正在检查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
,但最好的方法是编码确保按时间顺序检查?
答案 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.
}