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

作成日: 更新日:

『ip2long関数は、インターネットプロトコルバージョン4(IPv4)のアドレス文字列を、それと等価な32ビット整数値に変換する処理を実行する関数です。この関数は、"192.168.0.1" のようなドットで区切られた形式のIPアドレスを引数として受け取ります。変換に成功すると、そのIPアドレスを表す整数を返します。もし引数に与えられた文字列が有効なIPv4アドレスでない場合は、false を返します。この変換により、IPアドレスをデータベースへ効率的に格納したり、数値として範囲比較を行ったりすることが容易になります。注意点として、この関数が返す整数は符号付きであるため、32ビットシステムでは特定のIPアドレスが負の値として表現されることがあります。また、この関数はIPv4専用であり、IPv6アドレスの変換には対応していません。整数から元のIPアドレス文字列に戻す場合は、対になるlong2ip()関数を使用します。

基本的な使い方

構文(syntax)

<?php
$ip_address_string = "192.168.1.1";
$ip_address_long = ip2long($ip_address_string);
?>

引数(parameters)

string $ip

  • string $ip: IPv4アドレスを表す文字列

戻り値(return)

int|false

IPv4アドレス(文字列)を対応する32ビット符号付き整数に変換した値を返します。変換できない場合はfalseを返します。

サンプルコード

PHP ip2long関数でIPv4を整数変換する

<?php

/**
 * ip2long 関数の基本的な使い方と、IPv6アドレスへの対応についてデモンストレーションします。
 * ip2long 関数は IPv4 アドレスを32ビットの符号なし整数に変換します。
 * 無効なIPアドレスやIPv6アドレスを渡すと false を返します。
 */
function demonstrateIp2longUsage(): void
{
    echo "--- ip2long 関数デモンストレーション ---" . PHP_EOL;

    // 1. 有効な IPv4 アドレスの変換例
    $ipv4Address = '192.168.1.100';
    echo "\n[テストケース 1] 有効な IPv4 アドレス: " . $ipv4Address . PHP_EOL;

    $longValue = ip2long($ipv4Address);

    if ($longValue !== false) {
        echo "  - 整数値に変換されました: " . $longValue . PHP_EOL;
        // long2ip 関数で、変換された整数値を元のIPv4アドレスに戻すことができます
        echo "  - long2ip で元に戻すと: " . long2ip($longValue) . PHP_EOL;
    } else {
        echo "  - エラー: IPv4アドレスの変換に失敗しました。" . PHP_EOL;
    }

    // 2. 無効な IPv4 アドレス(フォーマットが不正)の変換例
    $invalidIpv4 = '256.0.0.1'; // 各オクテットは0から255の範囲である必要があります
    echo "\n[テストケース 2] 無効な IPv4 アドレス: " . $invalidIpv4 . PHP_EOL;

    $longValue = ip2long($invalidIpv4);

    if ($longValue !== false) {
        echo "  - 整数値に変換されました: " . $longValue . PHP_EOL;
    } else {
        // ip2long は無効なアドレスに対して false を返します
        echo "  - エラー: 無効なIPアドレスのため、変換に失敗しました (期待される動作)。" . PHP_EOL;
    }

    // 3. IPv6 アドレスの変換例
    // キーワードに 'ipv6' があるため、ip2long が IPv6 に対応していないことを示します。
    $ipv6Address = '2001:0db8:85a3:0000:0000:8a2e:0370:7334';
    echo "\n[テストケース 3] IPv6 アドレス: " . $ipv6Address . PHP_EOL;

    $longValue = ip2long($ipv6Address);

    if ($longValue !== false) {
        echo "  - 整数値に変換されました: " . $longValue . PHP_EOL;
    } else {
        // ip2long は IPv6 アドレスに対応していません。false が返されます。
        echo "  - エラー: ip2long は IPv6 アドレスに対応していません (期待される動作)。" . PHP_EOL;
        echo "  - 補足: IPv6アドレスを扱う場合は、PHP の filter_var() 関数など、他の関数を検討してください。" . PHP_EOL;
    }

    // 4. 全く異なる文字列の変換例
    $randomString = 'not an ip address';
    echo "\n[テストケース 4] 無効な文字列: " . $randomString . PHP_EOL;

    $longValue = ip2long($randomString);

    if ($longValue !== false) {
        echo "  - 整数値に変換されました: " . $longValue . PHP_EOL;
    } else {
        echo "  - エラー: 無効な文字列のため、変換に失敗しました (期待される動作)。" . PHP_EOL;
    }

    echo "\n--- デモンストレーション終了 ---" . PHP_EOL;
}

// 関数を実行してデモンストレーションを開始します
demonstrateIp2longUsage();

PHPのip2long関数は、IPv4アドレスの文字列を32ビットの符号なし整数値に変換します。引数にはstring $ipとしてIPv4アドレスの文字列を指定します。変換に成功するとint型の整数値を返しますが、無効なIPv4アドレスやIPアドレス以外の文字列が渡された場合はfalseを返します。変換された整数値は、long2ip関数で元のIPv4アドレスに戻すことも可能です。

この関数はIPv6アドレスには対応していません。例えば、'192.168.1.100'のような有効なIPv4アドレスは整数に変換されますが、'256.0.0.1'のような無効なIPv4アドレスや、'2001:0db8:...'といったIPv6アドレス、または'not an ip address'のようなIPアドレス形式ではない文字列を渡すと、ip2longは常にfalseを返します。IPv6アドレスを扱う際には、filter_var()関数など、他のPHP関数を利用してください。これにより、IPアドレスの形式に応じた適切な処理を実現できます。

ip2long関数はIPv4アドレスを整数値に変換しますが、無効なIPv4アドレスやIPv6アドレスを渡すとfalseを返します。そのため、必ず戻り値をチェックし、エラーハンドリングしてください。特にip2longはIPv6アドレスには対応していません。IPv6アドレスを扱う場合は、PHPのfilter_var関数など他の関数を検討してください。また、変換された整数値はlong2ip関数で元のIPv4アドレスに戻すことが可能です。この関数はIPv4専用であることを理解し、正しく利用しましょう。

PHP ip2longでIPを整数に変換する

<?php

/**
 * ip2long関数の使い方をデモンストレーションする関数。
 * IPアドレス文字列を符号なしlong整数に変換し、結果を表示します。
 * ウェブアプリケーションでユーザー入力(例: $_POST['ip_address'])を処理する際の参考にしてください。
 *
 * @param string $ipAddress 処理するIPアドレス文字列。
 * @return void
 */
function demonstrateIp2Long(string $ipAddress): void
{
    echo "変換対象のIPアドレス: " . $ipAddress . PHP_EOL;

    // ip2long関数を呼び出し、IPアドレスをlong整数に変換します。
    // 有効なIPv4アドレスであれば整数値を返し、そうでなければ false を返します。
    $longIp = ip2long($ipAddress);

    if ($longIp === false) {
        // 変換が失敗した場合の処理(無効なIPアドレス形式)
        echo "  → エラー: IPアドレス '" . $ipAddress . "' は無効な形式です。" . PHP_EOL;
    } else {
        // 変換が成功した場合の処理
        echo "  → 変換されたlong整数値: " . $longIp . PHP_EOL;
        // long2ip関数を使うと、この整数値を元のIPアドレス文字列に戻すことも可能です。
        // echo "  → long整数値から元のIPアドレスへ: " . long2ip($longIp) . PHP_EOL;
    }
    echo PHP_EOL; // 各デモンストレーションの後で見やすくするための改行
}

// --- 実際の使用例 ---

// 1. 有効なIPv4アドレスの例
demonstrateIp2Long("192.168.1.1");
demonstrateIp2Long("10.0.0.255");
demonstrateIp2Long("172.16.0.10");

// 2. 無効なIPv4アドレスの例
demonstrateIp2Long("256.0.0.1");     // IPアドレスのオクテットが範囲外 (0-255)
demonstrateIp2Long("invalid-ip");   // 数字以外の文字が含まれる不正な形式
demonstrateIp2Long("192.168.1");    // 不完全な形式(オクテットが足りない)
demonstrateIp2Long("::1");          // IPv6アドレス (ip2longはIPv4アドレスのみ対応)

?>

PHP 8で利用できるip2long関数は、指定されたIPv4アドレスの文字列を、対応する符号なしの32ビット整数値に変換するために使用されます。この関数は、IPアドレスをデータベースに数値として保存したり、IPアドレスの比較を高速に行ったりする際に便利です。

引数には、変換したいIPv4アドレスの文字列を渡します。例えば、「192.168.1.1」のような形式です。戻り値は、有効なIPv4アドレスであればそのアドレスに対応する整数値(int)として返されます。しかし、指定された文字列がIPv4アドレスとして無効な形式の場合や、IPv6アドレスが指定された場合は変換に失敗し、falseが返されます。

サンプルコードでは、demonstrateIp2Long関数を通じてip2longの挙動が示されています。有効な「192.168.1.1」や「10.0.0.255」は適切な整数値に変換されますが、「256.0.0.1」のようにオクテットが範囲外のアドレスや、「invalid-ip」のような不正な形式、さらにIPv6アドレスの「::1」はfalseを返します。このように、関数がfalseを返した際に適切にエラー処理を行うことが、堅牢なプログラムを作成する上で重要です。この関数は、ネットワーク関連の処理でIPアドレスを数値として扱う際に役立ちます。

ip2long関数は、IPv4アドレス文字列を符号なし32ビット整数に変換します。この関数はIPv6アドレスには対応しておらず、また無効なIPv4アドレス形式の場合にはfalseを返します。したがって、関数が成功したかどうかを判断するために、戻り値がfalseと厳密に等しいか(=== false)を必ず確認し、エラー処理を実装してください。特にユーザーからの入力を処理する際には、無効な値に対する堅牢なチェックがシステムの安定性とセキュリティに不可欠です。変換された整数値は、long2ip関数を使って元のIPアドレス文字列に戻すことも可能です。

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