如何比较文本文件的行与变量

时间:2016-05-23 14:12:25

标签: php

我有一个记录用户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>";
}
?>

3 个答案:

答案 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
}