【PHP8.x】long2ip関数の使い方

作成日: 更新日:

long2ip関数は、整数で表現されたインターネットプロトコルバージョン4(IPv4)のアドレスを、人間が読みやすいドット区切りの文字列形式に変換する関数です。IPアドレスは、データベースへの格納効率や検索速度を考慮して、32ビットの整数値として保存されることがあります。この関数は、そのように整数として保存されたIPアドレスを、「192.168.0.1」のような標準的な文字列表現に戻す際に使用されます。引数として変換したいIPアドレスを表す整数を一つ受け取ります。処理が成功した場合はドット区切りのIPv4アドレス文字列を返しますが、引数が有効なアドレスを表す整数でない場合は false を返します。システムのアーキテクチャによっては、大きなIPアドレスが負の整数として表現されることがありますが、この関数はそれも正しく解釈して変換します。なお、この関数の逆の変換、つまりIPv4アドレス文字列を整数に変換するためには ip2long 関数を使用します。この関数はIPv4にのみ対応しており、IPv6アドレスの変換には使用できない点に注意してください。

基本的な使い方

構文(syntax)

string|false long2ip(int $integer_ip)

引数(parameters)

int $ip

  • int $ip: IPアドレスを表す整数

戻り値(return)

string | false

指定されたIPv4アドレスの整数表現を、ドット区切りの標準的なIPv4アドレス文字列に変換します。変換に失敗した場合はfalseを返します。

サンプルコード

PHPのIPアドレス整数・文字列変換

<?php

/**
 * long2ip() 関数は、整数形式のIPアドレスをドット区切り形式の文字列に変換します。
 * 主に、データベースに整数として保存されたIPアドレスを表示する際などに使用されます。
 *
 * このサンプルコードでは、まずドット区切りIPアドレスを整数に変換し、
 * その後 long2ip() を使って元のドット区切り形式に戻す方法を示します。
 */

// 例として、ドット区切り形式のIPv4アドレスを定義します。
$ipAddressString = "192.168.1.10";

// ip2long() 関数を使用して、ドット区切り形式のIPアドレスを整数形式に変換します。
// 成功すると整数、失敗すると false が返されます。
$ipAddressLong = ip2long($ipAddressString);

// 変換が成功したかを確認します。
if ($ipAddressLong === false) {
    echo "エラー: IPアドレス '{$ipAddressString}' の整数への変換に失敗しました。\n";
} else {
    echo "元のIPアドレス (文字列): " . $ipAddressString . "\n";
    echo "変換されたIPアドレス (整数): " . $ipAddressLong . "\n\n";

    // long2ip() 関数を使用して、整数形式のIPアドレスをドット区切り形式の文字列に戻します。
    // 成功するとIPアドレスの文字列、失敗すると false が返されます。
    // 通常、ip2long() で得られた有効な整数を渡す限り、変換は成功します。
    $convertedIpAddressString = long2ip($ipAddressLong);

    // 変換が成功したかを確認します。
    if ($convertedIpAddressString === false) {
        echo "エラー: 整数 '{$ipAddressLong}' からIPアドレスへの変換に失敗しました。\n";
    } else {
        echo "整数から再変換したIPアドレス (文字列): " . $convertedIpAddressString . "\n";
    }
}

// 無効な整数値を試す(例: 負の値や大きすぎる値)
// long2ip() は基本的にIPv4のアドレス範囲内の整数値を期待します。
// 範囲外の値を渡すと意図しない結果や false が返る可能性があります。
$invalidIpLong = -1; // 無効な例
$resultInvalid = long2ip($invalidIpLong);
echo "\n無効な整数値 (-1) の変換結果: ";
if ($resultInvalid === false) {
    echo "false (変換失敗)\n";
} else {
    echo $resultInvalid . "\n"; // PHP 8では "255.255.255.255" が返る
}

PHPのlong2ip関数は、整数形式で表現されたIPv4アドレスを、一般的な「192.168.1.1」のようなドット区切り形式の文字列に変換する際に使用されます。主に、IPアドレスをデータベースに整数として保存している場合に、それを人間が読める形式で表示する用途で役立ちます。

この関数は、整数値のIPアドレスを引数として一つ受け取ります。変換が成功するとドット区切り形式のIPアドレス文字列を返し、失敗した場合はfalseを返します。そのため、戻り値がfalseでないかを確認する処理は、エラー発生時の対応として重要です。

サンプルコードでは、まずip2long関数を使って文字列形式のIPアドレス「192.168.1.10」を整数値に変換しています。次に、その変換された整数値をlong2ip関数に渡し、元のドット区切り形式に戻しています。変換の成否は都度チェックしています。また、long2ip関数はIPv4アドレスの範囲内の整数値を期待するため、無効な整数値(例えば-1)を渡すと、PHP 8では「255.255.255.255」が返されるなど、意図しない結果になる可能性がある点にも注意が必要です。

long2ip関数は、ip2long関数で整数に変換されたIPv4アドレスを、元のドット区切り形式の文字列に戻す際に利用します。最も重要な注意点は、変換に失敗した場合に「false」が返されることです。そのため、関数呼び出し後には必ず戻り値が「false」でないかを確認し、エラー処理を行うようにしてください。これにより、プログラムの予期せぬ動作を防ぎ、堅牢性を高めます。この関数はIPv4アドレスに特化しており、IPv6アドレスには対応していません。また、引数にはIPv4の有効な範囲内の整数値を渡すようにしてください。範囲外の不適切な値(負の数など)を渡すと、PHPのバージョンによっては意図しない結果や「false」が返される可能性がありますので、入力値の検証が大切です。

【PHP8.x】long2ip関数の使い方 | いっしー@Webエンジニア