我有一小段代码,我只是测试一下,如果用户的IP与预定义的IP不匹配,并且如果匹配不匹配,那么基本上会重定向用户。
$file = fopen("ips.txt", "w");
if ($ip == "iphere") {
echo "Welcome";
fclose($file);
} else {
header('Location: http://www.google.com');
fwrite($file, "\n" . $ip);
if ($file) {
$array = explode("\n", fread($file, filesize("ips.txt")));
}
$result = print_r($array, TRUE);
fclose($file);
}
我想要做的是将我正在写入的IP写入文本文件,将它们全部放入数组中以查找重复项,记下重复项,过滤掉它们,然后将它们写回到该文件中或者另一个txt文件,但我被困住了,不知道从哪里开始。
答案 0 :(得分:0)
这种方法存在一些问题,包括线程和性能。如果两个人同时点击网页并写入同一个文件会怎样?此外,这个文件可以增长到无限大小?这将是缓慢的。你不需要手动检查所有的ip,只有那个存在。
为此使用数据库表可能更好。否则,您还需要处理文件锁定。
函数check_ips的psuedo代码:
从ips中选择*,其中ip =?。检查用户ID
如果没有结果,请插入ip。这是未知的。 (如果需要,你也可以为表添加约束以防止重复的ip)
否则,ip已知
您可以将表中的计数,日期,上次访问或其他统计信息记录为计算摘要。
答案 1 :(得分:0)
我建议您使用serialize或json_encode将ip存储在一个文件中,这样您就可以添加更多信息(IP访问次数,上次访问次数等)。
我将向您展示一个简单的例子。
1:创建一些虚拟ips进行测试。
$IPs = array(
'192.168.0.1' => array(
'visits' => 23,
'last' => '2015-07-20'
),
'192.168.0.2' => array(
'visits' => 32,
'last' => '2015-06-23'
)
);
所以在这里我们创建了一个带有2个IP地址的关联数组,它还包含访问次数和上次访问次数。
使用php serialize函数或json_encode保存文件(我更喜欢json格式,因为它可以被其他语言使用)。
$for_save = json_encode($IPs); // OR serialize($IPs)
file_put_contents("FILE_NAME",$for_save); //Save the file with the IP's
现在是时候阅读文件了
$file = fopen("FILE_NAME", "w");
$file = json_decode($file) // or unserialize($file);
现在我们可以根据需要使用数组,我们可以使用php数组函数搜索ip,并且offcourse修改有关ips的信息:
if(array_key_exists("YOUR_IP_HERE",$file)){
//What to do if we have found the ip in the file, for example :
$file['YOUR_IP']['visits']++; //we add +1 visit for that ip
}
现在我们可以再次保存文件
$file = json_encode($file);
file_put_contents("IP_FILE_NAME",$file);
答案 2 :(得分:0)
您可以使用数组中的ip轻松读取文件,并从数组中获取unique
值
$ipList = file(ips.txt);
$ipUnique = array_unique($ipList);
然后哟可以保存或解析你的porpose的$ ipUnique。