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

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

青灯夜游
リリース: 2023-04-09 09:14:01
転載
2862 人が閲覧しました

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 サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:cnblogs.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート