ホームページ  >  記事  >  バックエンド開発  >  php ip2long に負の数値が含まれるのはなぜですか?どうやって対処すればいいのでしょうか?

php ip2long に負の数値が含まれるのはなぜですか?どうやって対処すればいいのでしょうか?

青灯夜游
青灯夜游転載
2020-07-17 15:57:302782ブラウズ

php ip2long に負の数値が含まれるのはなぜですか?どうやって対処すればいいのでしょうか?

php は、IP アドレス処理のための ip2long メソッドと long2ip メソッドを提供します。

1. ip2long - IPV4 文字列インターネット プロトコルをデジタル形式に変換します

int ip2long ( string $ip_address )

パラメータ: ip_address 標準形式のアドレス。

戻り値: IP アドレスを変換した数値、または ip_address が無効な場合は FALSE を返します。

2、long2ip - 数値形式を IPV4 文字列に変換します。インターネット プロトコル

string long2ip ( string $proper_address )

パラメータ: proper_address 長整数エクスプレスの正しいアドレス。

戻り値: インターネット アドレスを文字列として返します。

3.

$ip = '10.1.1.1';
$ip_long = ip2long($ip);
echo $ip_long.PHP_EOL; // 167837953
echo long2ip($ip_long); // 10.1.1.1

4. 負の数の理由とその対処方法

IP アドレスが比較的大きいため、ip2long に負の数値が表示されます:

$ip = '192.168.101.100';
$ip_long = ip2long($ip);
echo $ip_long.PHP_EOL; // -1062705820
echo long2ip($ip_long); // 192.168.101.100

理由の説明:

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。

解決策:

%u を使用して、出力を符号なし整数としてフォーマットします。

$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 チュートリアル

以上がphp ip2long に負の数値が含まれるのはなぜですか?どうやって対処すればいいのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。