只获取PHP中的部分文件?

时间:2012-04-27 12:27:33

标签: php variables if-statement

在互联网或stackoverflow上找不到任何相关内容?!?

基本示例:

我想知道的一个很好的例子是,如果在句子中找到单词或短语,你将如何创建if语句返回true。

另一个例子:

假设我们在外部文件中有一个IP阻止列表。所以我假设我们需要在if语句中的某处使用file_get_contents

// IP Blocklist
118.92.00
119.92.11
125.23.10

好的,这就是我们的IP阻止列表示例。如何创建一个能够找到中间IP(119.92.11)的if语句,即使其中有其他内容(请记住它可以很好地改变!)?

5 个答案:

答案 0 :(得分:1)

你的两个例子需要两种不同的技术才能可靠。

示例1只需要strpos()

if (strpos($subjectString, $searchString) !== FALSE) {
  // substring exists
} else {
  // substring doesn't exist
}

如果您希望以不区分大小写的方式进行匹配,则可以使用stripos()

例如两个,最好使用一个数组。这是因为如果strpos()在数组中,11.22.22.11方法将与11.22.22.110匹配 - 而您不希望这样。

相反,您可以使用in_array()

执行此类操作
// Get a list of IPs from file and split into an array
$ips = preg_split('/\s+/', trim(file_get_contents('list-of-ips.txt')));

if (in_array($searchIP, $ips)) {
  // IP exists
} else {
  // IP doesn't exist
}

答案 1 :(得分:0)

if(strpos($file_contents, "119.92.11") !== false)
{
  //do your stuff
}

答案 2 :(得分:0)

这是外部文件

$ips = file ( $file );
$searchIP = "119.92.11";
$found = false;
foreach ( $ips as $ip ) {
    if ($ip == $searchIP) {
        $found = true;
    }
}

if ($found) {
    echo $searchIP, " Found";
}

答案 3 :(得分:0)

只需使用strpos功能。

  

strpos()函数返回第一次出现的位置   另一个字符串中的字符串。

     

如果找不到该字符串,则此函数返回FALSE。

例如:

$ipAddresses = '// IP Blocklist
118.92.00
119.92.11
125.23.10';

if (strpos($ipAddresses,"119.92.11") != FALSE) {
    // IP ADDRESS WAS FOUND
} else {
    // IP ADDRESS NOT FOUND
}

答案 4 :(得分:0)

我会使用正则表达式来提高准确性和灵活性:

$lines = file($blockListFile);
$findIp = '119.92.11';

$findIp = trim($findIp, '.');

// The number of unspecified IP classes (e.g. for "192.92.11", it would be 1,
// but for "192.92" it would be 2, and so on).
$n = 4 - (substr_count($findIp, '.') + 1)

foreach ($lines as $line) {
    if (preg_match('/^' . preg_quote($findIp, '/') . '(\.\d{1,3}){0,' . $n . '}$/', $line)) {
        // the line matches the search address
    } else {
        // the line does not match the search address
    }
}

此方法允许搜索任意数量的IP类(例如“192.92.11.45”,“192.92.11”,“192.92”,甚至只是“192”)。它总是在行的开头匹配,因此,例如,搜索“192.92.11”将不匹配“24.192.92.11”。它也只匹配完整的类,因此搜索“192.92.11”将不匹配“192.92.115”或“192.92.117.21”。

修改

请注意,此解决方案假定:

  • 您的搜索字词已在完整课程中指定(例如,搜索“192.92.11”表示您要匹配/^192.92.11(\.\d{1,3})?$/
  • 块列表文件中指定的IP也以完整类指定