PHPでのIPアドレス処理

韦小宝
韦小宝オリジナル
2017-12-02 10:54:322248ブラウズ

開発では常に ip アドレスを扱いますが、よく使われる 2 つの 関数があります.php は、IP アドレスを処理するための ip2long メソッドと long2ip メソッドを提供します。今日は、PHP での ip 処理メソッドを詳しく学習します。続いて、PHP の ip のアドレス処理方法を見てみましょう。

開発では常に IP アドレスを扱います。PHP では、IP アドレスを処理する ip2long メソッドと long2ip メソッドが一般的に使用されます。

ip2long は、IPV4 stringインターネット プロトコルをデジタル形式に変換します

int ip2long ( string $ip_address )
//参数: ip_address 一个标准格式的地址。
//返回值: 返回IP地址转换后的数字 或 FALSE

long2ip は、デジタル形式を IPV4 文字列インターネット プロトコルに変換します

string long2ip ( string $proper_address )
//参数: proper_address 长整型的正确地址表示。
//返回值: 返回互联网地址作为字符串。

IP アドレスをデータベースに保存するときに ip2long 関数を使用できます。 IP アドレスを文字列からロング型に変更すると、ストレージ領域を節約でき、IP アドレスを取り出すときに、long2ip を使用して IP アドレスを復元できます。変換後、次のように IP アドレスが範囲内にあるかどうかを判断する方が便利です:

$a=ip2long('127.0.0.66');
$b=ip2long('127.0.0.111');
$c=ip2long('127.0.0.10');
if($c>=$a && $c <=$b){
echo &#39;呜啦啦&#39;;
}else{
echo &#39;啦啦呜&#39;;
}

ただし、注意が必要です。 ! ! 注 注 注

IP を整数型に変換する php の関数 ip2long() は、IP が比較的大きい場合に問題が発生しやすくなります。

なぜですか? 答えはここにあります!

IPv4 は署名なしの 32 ビット アドレスを使用するため、最大でも 2 の 32 乗マイナス 1 (4294967295) 個のアドレスが存在します。 10 進数は小数点以下 4 桁で区切って記述します。

A.B.C.D として覚えてください (例: 192.168.100.100)。

IPv4 アドレスの各 10 進数は、0 から 255 の範囲の符号なしバイトです。IPv4 アドレスを符号なしの数値に変換するということは、実際には、各 10 進数を対応する 8 ビットに配置して、4 バイトの符号なしを形成することを意味します。整数。 192.168.100.100、上位 8 桁が 192,168、下位 8 桁が 100,100。


以下

<?php
$ip = "192.168.1.2";
$ip_n = ip2long($ip);
echo $ip_n;      //输出的是个负数 -1062731518
?>

IPから変換した整数値が大きすぎて整数の範囲を超えているため、負の数となります。

$ip_n = binding(decbin(ip2long($ip))); のように記述する必要があります。 このようにして、次のように符号なし整数を取得できます

<?php
$ip = "192.168.1.2";
$ip_n = bindec(decbin(ip2long($ip)));
echo $ip_n;      //得到 3232235778
?>

解決策もあります:

%u を使用して出力をフォーマットします。これは符号なし整数型です。

<?php
$ip = &#39;192.168.101.100&#39;;
$ip_long = sprintf(&#39;%u&#39;,ip2long($ip));
echo $ip_long.PHP_EOL;  // 3232261476 
echo long2ip($ip_long); // 192.168.101.100
?>

関連する推奨事項:

php ip2long 負の数の理由と解決策

php IP アドレス変換整数、整数変換アドレス

php IP Get City API (Innocent IP)データベース)

以上がPHPでのIPアドレス処理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。