0

在互联网上或 stackoverflow 上找不到任何关于此的信息?!?

基本示例:

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

另一个例子:

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

// IP Blocklist
118.92.00
119.92.11
125.23.10

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

4

5 回答 5

1

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

示例 1 只需要strpos()

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

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

例如两个使用数组会更好。这是因为如果在数组中,该strpos()方法将匹配- 而您不希望这样。11.22.22.1111.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
}
于 2012-04-27T12:36:42.693 回答
0
if(strpos($file_contents, "119.92.11") !== false)
{
  //do your stuff
}
于 2012-04-27T12:31:59.823 回答
0

这是用于外部文件

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

if ($found) {
    echo $searchIP, " Found";
}
于 2012-04-27T12:32:00.423 回答
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 也在完整类中指定
于 2012-04-27T13:21:21.063 回答
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
}
于 2012-04-27T12:32:25.540 回答