从txt获取句子的一部分

时间:2014-01-17 14:49:34

标签: php text ip

我已经设置了一个PHP IP黑名单系统,它运行得非常好。 我现在希望它能够从txt文件中获取原因。

ip_blacklist.txt

1.2.4.5 , No Spamming Allowed
1.2.4.5 , No Spamming Allowed
1.2.4.5 , No Spamming Allowed

现在在PHP中,它将IP与用户使用的IP进行比较,这是完美的。 但如果IP与txt中的IP匹配,它会将您重定向到黑名单页面。 我希望它能显示出将其列入黑名单的原因。

如何使用PHP获取与txt文件中的IP匹配然后将其链接到的原因 $原因吗?

3 个答案:

答案 0 :(得分:0)

编辑:编辑包含从文件而不是db获取结果的preg_match方法。此方法将检查用户是否在黑名单中以及获取用户原因。

您可以简单地将用户IP存储在数据库中,并附上原因。然后在运行检查时,如果用户在黑名单中,则在数据库中查询其ip,然后返回并显示原因。

$ip = $_SERVER['REMOTE_ADDR'];

$sql = 'SELECT reason FROM blacklist WHERE ip = "' . $ip . '"';

然后针对您的数据库运行该sql。当然这是一个粗略的想法,并且没有针对sql注入的保护,因此我建议在运行查询之前使用某种形式的excaping并验证$ip的ip地址格式是否正确。

整个过程将是:

  1. 通过比较ip与file来检查用户是否在黑名单中。
  2. 用户在黑名单中。
  3. 通过用户ip从数据库中获取原因。
  4. 显示原因。
  5. 如果您只想通过文件完成所有操作,那么获取文件内容,查找IP和原因以及显示原因会更好。

    这可以使用preg_match完成。

    $file = file_get_contents('path/to/blacklist/file');
    
    $ip = $_SERVER['REMOTE_ADDR'];
    
    $pattern = '#' . $ip . '\s,\s.*#';
    
    if(preg_match($pattern, $file_contents, $matches)) {
    
        $match = $matches[0];
    
        $explode = explode(',', $match);
    
        $reason = $explode[1];
    
        echo $reason;
    }
    

    请注意,这是未经测试的,但我认为它会起作用。

答案 1 :(得分:0)

或者你可以使用爆炸:

$myTextFileLine = "1.2.4.5 , No Spamming Allowed";
$cutted = explode(",", $myTextFileLine);
echo "Ip blacklisted: ".$cutted[0].", reason: ".$cutted[1];

答案 2 :(得分:0)

与上述答案一样,我同意解决此问题的最佳方法是将用户的IP存储在数据库中,但如果您仍需要为其读取文件,则此代码应该可以完成此任务:

<?php
//The file you will read
$file = fopen("ip_blacklist.txt", "r") or exit("Unable to open file!");
//Where we will store each ip as we read it
$ip = "";
$parts;
while(!feof($file))
  {
    //Split the line and save the parts
    $parts = explode(" , ", fgets($file));
    $ip = $parts[0];
    $reason = $parts[1];
    //And here you can compare it to the client's ip
    //The first one is the ip read from the file
    echo $ip."<br>";
    //And this is how you would get the client's ip
    echo $_SERVER['REMOTE_ADDR']."<br>";
  }
  //Close the file
fclose($file);
?>

请注意,获取客户端IP的方式无论如何都不是最好的(因为它可以非常容易地欺骗)。有关详细信息,请阅读How to get Client IP address in PHP?

- 编辑 -

我只是注意到你只是想检查IP,比较它并得到原因。在这种情况下,将while更改为:

while(!feof($file))
  {
    //Split the line and save the parts
    $parts = explode(" , ", fgets($file));
    $ip = $parts[0];
    if($_SERVER['REMOTE_ADDR'] == $ip)
        echo $parts[1];
  }