php读取文本文件并合并重复条目
我刚刚测试了一段代码,如果用户的IP与预定义的IP不匹配,基本上会重定向用户,如果不匹配,则将该IP写入文本文件php读取文本文件并合并重复条目,php,html,arrays,fopen,fwrite,Php,Html,Arrays,Fopen,Fwrite,我刚刚测试了一段代码,如果用户的IP与预定义的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 ($fil
$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文件,但我被卡住了,不知道从这里走到哪里。这种方法有几个问题,围绕线程和性能。如果两个人同时点击网页并写入同一个文件,会发生什么情况?此外,此文件可以增长到无限大?这将是缓慢的。您不需要手动检查所有ip,只需检查其中一个 为此,最好使用数据库表。否则,您还需要处理文件锁定 用于功能检查的psuedo代码\u ips: 从ip=?。检查用户id 如果没有结果,请插入ip。这是未知的。(如果需要,还可以向表中添加约束,以防止重复的ip) 否则,ip是已知的
您可以在表中记录计数、日期、上次访问或其他统计信息作为计算摘要。我建议您使用serialize或json_encode将ip存储在文件中,这样您可以添加更多信息(ip访问次数、上次访问等) 我将向您展示一个简单的示例 1:为测试创建一些虚拟IP
$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序列化函数或json_encode保存文件(我更喜欢json格式,因为它可以被其他语言使用)
现在是读取文件的时候了
$file = fopen("FILE_NAME", "w");
$file = json_decode($file) // or unserialize($file);
现在我们有了想要使用的数组,我们可以使用php数组函数搜索ip,当然也可以修改ip的相关信息:
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);
您可以使用数组中的ip轻松地读取文件,然后像下面这样从数组中获取
unique
值
$ipList = file(ips.txt);
$ipUnique = array_unique($ipList);
然后,您可以为您的porpose保存或解析$ipUnique。为什么不先检查重复项,然后在文件中没有的情况下写入?strpo或stripo可以处理这个问题。但也有其他方法/功能。如果您更改处理IP地址的方式,则无需担心重复。因此,您只需确保,您没有在文件中写入两次IP吗?我想在文件中写入重复的IP,以查看尝试访问页面的频率,但我不想一直运行查询以查看有多少重复,我希望所有重复的IP与条目旁边的某种标识符相结合,即ip1 X2 ip2 X4。。。等等,你为什么不用数据库呢?简单多了,麻烦少多了。这太棒了,谢谢!这是一个很好的解释。
$ipList = file(ips.txt);
$ipUnique = array_unique($ipList);