訪問者のIPアドレスを追跡しようとしています。 $_SERVER["REMOTE_ADDR"]
を使用すると、訪問者のIPアドレスではなくサーバーのIPアドレスを取得します。私はこれを複数の場所にある複数のマシンで試しましたが、すべて同じIPになりました。これに影響する可能性のあるPHP /サーバー設定はありますか?
REMOTE_ADDR
は信頼できません。
とにかく、試してみて
$ipAddress = $_SERVER['REMOTE_ADDR'];
if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) {
$ipAddress = array_pop(explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']));
}
編集:また、サーバーのルーターでポート転送が有効になっていますか?パケットが乱れている可能性があります。
$ _SERVER ["REMOTE_ADDR"]を使用すると、訪問者のIPアドレスではなくサーバーのIPアドレスを取得します。
次に、構成に何か問題があるか、奇妙です。
何らかのリバースプロキシを使用していますか?その場合、@ simshaunの提案が機能する可能性があります。
Webサーバーの設定には、他に何か異常なことがありますか?
使用しているPHPコードを表示できますか?
住所がどのように見えるかを示してください。それはローカルのものですか、それともインターネットアドレスですか?
$_SERVER['REMOTE_ADDR']
は、リクエストがWebサーバーに送信されたIPアドレスを提供します。これは通常、訪問者のアドレスですが、あなたの場合、リクエストをインターセプトするWebサーバーの直前に何らかのプロキシが存在するように聞こえます。したがって、Webサーバーからは、リクエストがそこから発信されているように見えます。
予想されるヘッダーにIPアドレスが設定されていないことを確認してください。次の手順を実行して、サーバー変数全体を調べて、どの変数があなたのケースに適しているかを判断してください。
print_r($_SERVER);
交換:
$_SERVER["REMOTE_ADDR"];
と:
$_SERVER["HTTP_X_REAL_IP"];
私のために働いた。
PHP 7.0 $ _SERVER変数が変更されました。それをvar_dumpして、それが要求にどのように適合するかを確認します。
リモートの詳細を提供するもののいくつかは、REMOTE_ADDR HTTP_X_FORWARDED_FOR HTTP_CF_CONNECTING_IP HTTP_CF_IPCOUNTRYです。