数日前、「WP で CDN を有効にすると実際の IP を取得できない問題の解決」についての記事を書きました。今日、たまたまグループで助けを求めている人を見かけたのですが、その人は Emlog プログラムを使っており、同じ状況(CDN を有効にした後、実際の IP を取得できない)に遭遇していました。そこで、WordPress の解決策を Emlog でも試してみようと思ったところ、実際にうまくいきました。以下、その手順を皆さんの参考のために共有します。もしかすると、ほかのプログラムでも問題を解決できるかもしれません。

解決手順

エディターで include/lib/function.base.php を開き、60 行目付近に次のコードがあります。

function getIp() {
    $ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';
        if (!ip2long($ip)) {
            $ip = '';
        }
        return $ip;
}

以下のコードに変更します。

function getIp() {
    $ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';
    if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { 
        $list = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        $ip = $list[0]; 
    } 
    if (!ip2long($ip)) {
        $ip = '';
    } 
    return $ip;
}

注意

上記のコードは Emlog 5.3.1 バージョンでのみテスト済みです。その他のバージョンについては、ご自身でテストしてください(理論上は動作するはずです)。