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

2つの例では、信頼性を高めるために2つの異なる手法が必要になります。

例1は単に必要strpos()です:

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

stripos()大文字と小文字を区別しない方法で照合する場合は、代わりに使用できます。

たとえば、2つは配列を使用する方が良いでしょう。これは、配列内にある場合に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

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 に答える
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 に答える