1

私は ip2long 関数を使用しています。これは正常に動作し、配列内の IP アドレスの長いリストを返します。

私がやりたいのは、各 IP アドレスを mysql データベースに入れることです。いくつかの例を見てきましたが、ip2long 関数に関連する例が見つかりません。正直なところ、混乱しているだけです。

以下は私のコードです、

function ip_range($start, $end) {
$start = ip2long($start);
$end = ip2long($end);
return array_map('long2ip', range($start, $end) );
}

$range_one = "151.76.0.0";
$range_two = "151.76.255.255";
print_r( ip_range($range_one, $range_two) );

任意の提案をいただければ幸いです。

ありがとう

4

1 に答える 1

2

あなたの関数は問題なく見え、多くのIPアドレスを生成します...

function ip_range($start, $end) {
    $start = ip2long($start);
    $end = ip2long($end);
    return array_map('long2ip', range($start, $end) );
}

$range = ip_range("151.76.0.0", "151.76.255.255");

しかし、ips をそれぞれ別の行に保存する方法についてはまだわかりませんか、それとも 1 つの行にあるはずですか?

各 IP が別々の行にあると仮定すると、配列をループするだけです。

foreach ($range as $ip) {
    // create db entry for $id
    // id column should be of type varchar(15)
}

IP 範囲全体に対して 1 行のみの場合:

$ip = implode(',', $range);
// create db entry for $id

これらの範囲はかなり長くなる可能性があるため、列タイプのテキストを使用する必要があります。

どちらの場合も、大量のデータ スペースが浪費されます。IP 範囲の長いバージョンをデータベースに保存してみませんか?

4 つの列 id、ip_start as long、ip_end as 、netname long; 次に、IP アドレスを照会するときに必要なことは、$ip = ip2long(...)最初にネットワークを探すことだけですwhere ip_start <= $ip and $ip <= ip_end

于 2013-03-17T02:41:43.553 に答える