クライアントIPの取得

メモ:  Category:php

書き込みを行った人のアドレスを記録するということはよく見られます。また、まれによくない書き込みをされる方をブロックするためにIPを使うこともあります。

そんなことにも対応してみようと思います。

さて、この時点でデータベース設計上現れなかった項目の出現です。

今回の場合、「書き込みを行った人のアドレスを記録する」ということからpost_messageテーブルに項目を追加します。すでに作成されているテーブルに項目を追加するには、 ALTER TABLE 文を使用します。

MySQLでは、テーブルに定義されている項目の任意の場所に項目を追加することができます。

//最後に追加する場合
mysql>ALTER TABLE テーブル名 ADD 追加する項目名 型 [AFTER]
//最初に追加する場合
mysql>ALTER TABLE テーブル名 ADD 追加する項目名 型 FIRST
//場所を指定する場合
mysql>ALTER TABLE テーブル名 ADD 追加する項目名 型 AFTER 項目名

詳細は、SQLの方を参照してください。

今回は、最後に追加します。

mysql>ALTER TABLE post_message ADD client_ip char(8);

入れ物の準備はできたので、クライアントIPの取得方法です。

クライアントIPの取得には、環境変数 REMOTE_ADDR を使用します。この取得には、スーパーグローバル変数を使う方法と関数を使う方法があります。

スーパーグローバル変数の場合

$_SERVER['REMOTE_ADDR']又は$_ENV['REMOTE_ADDR']

関数の場合

getenv('REMOTE_ADDR')

ソース

function GetClientIP(){
    if(empty($_ENV['REMOTE_ADDR'])){
        if(empty($_SERVER['REMOTE_ADDR'])){
            $client_ip = "";
        }
        else{
            $client_ip = $_SERVER['REMOTE_ADDR'];
        }
    }
    else{
        $client_ip = $_ENV['REMOTE_ADDR'];
    }
    return $client_ip;
}
//又は
$client_ip = getenv('REMOTE_ADDR');

こんなところでしょうか。

他にもProxy経由の場合、等の問題もありますがIPは取得できます。

bluenote by BBB