我有一个记录用户IP地址的文本文件,我试图将每个现有地址与访问者的IP地址进行比较,看看它们是否匹配。
如果它们不匹配,我希望将用户的IP地址写入文本文件 - 否则我不希望将任何内容写入文本文件。
目前,所有IP地址都被写入文本文件,即使它们匹配。感谢任何帮助,提前谢谢。
<?php
$ip = $_SERVER['REMOTE_ADDR'];
$ipFile = 'ip.txt';
$openip = fopen($ipFile, 'r');
$exists = false;
while(!feof($openip))
{
$existingip = fgets($openip);
if($existingip == $ip) {
echo "Your ip already exists <br>";
$exists = true;
}
}
fclose($openip);
if($exists == false) {
$openip = fopen($ipFile, 'a');
fwrite($openip, $ip . "\r\n");
echo "Your IP has been logged <br>";
fclose($openip);
}
else {
echo "Your IP is already stored <br>";
}
?>
答案 0 :(得分:1)
让您的代码更具可调性:
$file = file($ipFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
if (in_array($ip, $file))
echo "Your ip already exists <br>";
else {
$openip = fopen($ipFile, 'a');
fwrite($openip, $ip . "\r\n");
echo "Your IP has been logged <br>";
fclose($openip);
}
答案 1 :(得分:1)
您可以尝试将文件读入数组:
$arrayIpFile = file($ipFile);
if(in_array($ip, $arrayIpFile)){
//Exist
}else{
// not exists
}
答案 2 :(得分:0)
$ip = $_SERVER['REMOTE_ADDR'];
$ipFile = 'ip.txt';
If(preg_match_all("/".preg_quote($ip)."/", file_get_contents($ipFile)){
Echo "Your IP is already stored <br>";
}else{
//append file as you do now
}