php ipアドレスを取得する

  • 作成日 2020.12.11
  • php
php ipアドレスを取得する

phpで、ipアドレスとホスト名を取得するサンプルコードを記述してます。phpのバージョンは8.0です。

環境

  • OS  CentOS Linux release 8.0.1905 (Core)
  • php 8.0.0
  • nginx 1.14.1

ipアドレス取得

$_SERVER[‘REMOTE_ADDR’]を取得すればIPアドレスを取得することが可能です。

<?php

if (isset($_SERVER['REMOTE_ADDR'])) {
    
    echo $_SERVER["REMOTE_ADDR"];
    
}

ホスト名は「gethostbyaddr」で取得することが可能です。

<?php

if (isset($_SERVER['REMOTE_ADDR'])) {

    echo $_SERVER["REMOTE_ADDR"];
    echo gethostbyaddr($_SERVER["REMOTE_ADDR"]);
}

ホスト名からIPアドレスに戻す場合は、gethostbynameを使用します。

<?php

if (isset($_SERVER['REMOTE_ADDR'])) {

    // IPアドレスを取得
    echo $_SERVER["REMOTE_ADDR"] . PHP_EOL;
    // ホスト名をIPから取得
    echo gethostbyaddr($_SERVER["REMOTE_ADDR"]) . PHP_EOL;
    // IPアドレスに戻す
    echo gethostbyname(gethostbyaddr($_SERVER["REMOTE_ADDR"])) . PHP_EOL;

}

ロードバランサーやリバースプロキシを使用してる場合は、HTTP_X_FORWARDED_FORを試してみてください。

<?php

if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {

    $_SERVER['HTTP_X_FORWARDED_FOR'];

}

DBなどに書き込む場合は、ip2longでIPアドレスを数値に変換することも可能です。

<?php

$result = ip2long("192.168.1.1");

echo $result; // 3232235777

echo long2ip($result) . PHP_EOL; // 192.168.1.1

またサーバー側のIPを取得する場合は、SERVER_ADDRを使用します。

<?php

if (isset($_SERVER['SERVER_ADDR'])) {

    echo $_SERVER['SERVER_ADDR'];

}