はじめに
PHPでは、IPアドレスをそのまま文字列で扱うだけでなく、「整数値」として計算・比較することもできます。
そのために使われるのが ip2long() と long2ip() という関数。
この記事では、この2つの関数の動作と、実際の変換結果をわかりやすく解説します。
目次
🧩 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.1 → 192.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"これが正しい挙動です。
