REMOTE_ADDR は、10 などの訪問者のローカル接続に設定された IP のみを取得できます。プロキシ サーバーは、プロキシ サーバーの IP ではなく、訪問者のゲートウェイの実際の IP を取得します。 IP アクセスが制限されている Web ページにこの機能を適用すると、IP アクセスが制限されたセグメント内のプロキシ サーバーを経由しても、他のユーザーはそのページにアクセスできなくなります。
以下に関数が提供されています:
コードをコピーします コードは次のとおりです:
// 関数 getIP() を定義します
function getIP()
{
global $ ip;
if (getenv("HTTP_CLIENT_IP"))
$ip = getenv("HTTP_CLIENT_IP");
else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip = getenv("HTTP_X_FORWARDED_FOR"); getenv("REMOTE_ADDR" ))
$ip = getenv("REMOTE_ADDR");
return $ip;
// 使用法:
?>
getenv("REMOTE_ADDR") はクライアントの IP アドレスを取得するために使用されますが、クライアントがプロキシ サーバーを使用してアクセスする場合、取得されるのは実際のクライアント IP ではなく、プロキシ サーバーの IP アドレスです。住所。プロキシ サーバー経由でクライアントの実際の IP アドレスを取得するには、getenv("HTTP_X_FORWARDED_FOR") を使用して読み取ります。
ただし、クライアントがプロキシサーバー経由でアクセスしない場合、getenv("HTTP_X_FORWARDED_FOR")で取得した値は空になります。
コードをコピーします
コードは次のとおりです:
else if(getenv("HTTP_X_FORWARDED_FOR")) $ip = getenv("HTTP_X_FORWARDED_FOR")
は if getenv("HTTP_ X _FORWARDED_FOR" ) 取得された値 空でない場合 (つまり、クライアントがプロキシ サーバーを使用している場合)、変数 $ip は getenv("HTTP_X_FORWARDED_FOR") によって取得された実際の IP 値と等しくなります。
上記の else if(getenv("HTTP_X_FORWARDED_FOR")) で取得した値が空の場合 (つまり、プロキシ サーバーが使用されていない場合)、次の $ip = getenv("HTTP_X_FORWARDED_FOR") 行のステートメントは実行されません。 。
この場合、クライアントがプロキシサーバーを使用していないことが確認されているので、
から
までのコードをコピーします。コードは次のとおりです:
else if(getenv("REMOTE_ADDR")) $ip = getenv("REMOTE_ADDR" );
これらの 2 行のステートメントは、クライアントの IP アドレス (実際の IP アドレスでもあります) を取得します。
http://www.bkjia.com/PHPjc/730059.htmlwww.bkjia.com
truehttp://www.bkjia.com/PHPjc/730059.html技術記事 REMOTE_ADDR は、訪問者のローカル接続に設定された IP (10 など) のみを取得できます。