《PHP8上級試験対策》ip2long()/long2ip() 関数でIPアドレスを整数に変換する仕組みを理解しよう

  • URLをコピーしました!

はじめに

PHPでは、IPアドレスをそのまま文字列で扱うだけでなく、「整数値」として計算・比較することもできます。
そのために使われるのが ip2long()long2ip() という関数。
この記事では、この2つの関数の動作と、実際の変換結果をわかりやすく解説します。

キーワード: ip2long / long2ip / IPv4 / 整数変換 / ビット演算

目次

🧩 ip2long()とは

ip2long() は、ドット表記のIPv4アドレスを整数値に変換する関数です。
主な用途は、ネットワーク範囲の比較やIPのソート処理など。

$num = ip2long('192.168.0.1');
var_dump($num);

出力結果:

int(3232235521)

この値 3232235521 は、実際に以下のように各オクテットを 256 の階乗で積み上げたものです:

192 * 256^3 + 168 * 256^2 + 0 * 256^1 + 1 * 256^0
= 3232235521

🔁 long2ip()とは

逆に、long2ip()整数値をIPアドレスに戻す関数です。つまり ip2long() の逆変換ですね。

$ip = long2ip(3232235521);
var_dump($ip);

出力結果:

string(11) "192.168.0.1"

⚙️ 実際のコード例

<?php
declare(strict_types=1);
error_reporting(-1);

$num = ip2long('192.168.0.1');
var_dump($num);

$num++;
$ip = long2ip($num);
var_dump($ip);

実行結果:

int(3232235521)
string(11) "192.168.0.2"

$num++ によって整数値が 1 増えるため、192.168.0.1192.168.0.2 へと変換されるわけです。

🧠 図解:IPアドレス ⇄ 整数 の対応イメージ

┌───────────────────────────────┐
│ 192.168.0.1                   │
│  ↓ ip2long()                  │
│ 3232235521 (整数表現)          │
│  ↑ long2ip()                  │
│ 192.168.0.2(+1された結果)     │
└───────────────────────────────┘

⚠️ 試験対策ポイント

注意点内容
ip2long()int または false を返す(変換失敗時)
逆関数long2ip()string を返す
環境依存32bit 環境では符号付き整数になることがある(負数に注意)
応用IP範囲チェック(例:$a <= $ip && $ip <= $b)などで活用される

✅ まとめ

  • ip2long():IPv4を整数化する
  • long2ip():整数をIPv4に戻す
  • 加算や比較ができるため、IPレンジ処理に便利
  • 出力例は次のとおり:
int(3232235521)
string(11) "192.168.0.2"

これが正しい挙動です。

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次