在互联网或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语句,即使其中有其他内容(请记住它可以很好地改变!)?
答案 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(\.\d{1,3})?$/
)