開発では常に 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 '呜啦啦'; }else{ echo '啦啦呜'; }
ただし、注意が必要です。 ! ! 注 注 注
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 = '192.168.101.100'; $ip_long = sprintf('%u',ip2long($ip)); echo $ip_long.PHP_EOL; // 3232261476 echo long2ip($ip_long); // 192.168.101.100 ?>
関連する推奨事項:
php IP Get City API (Innocent IP)データベース)
以上がPHPでのIPアドレス処理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。