PHP でユーザーIP アドレスを取得する

Subodh Poudel 2023年1月30日
PHP
  1. PHP で $_SERVER['REMOTE_ADDR'] を使用してユーザーの IP アドレスを検索する
  2. $_SERVER['REMOTE_ADDR']$_SERVER['HTTP_CLIENT_IP'] および $_SERVER['HTTP_X_FORWARDED_FOR'] を使用してユーザーの IP アドレスを検索する
  3. 三項演算子と isset() 関数を使用して、ユーザーの IP アドレスを検索する
PHP でユーザーIP アドレスを取得する

唯一の配列要素として REMOTE_ADDR を使用して $_SERVER スーパーグローバル変数を使用して、PHP のサーバーからユーザーの IP アドレスにアクセスする方法を紹介します。$_SERVER['REMOTE_ADDR'] として使用されます。

条件式を使用して PHP でユーザーの IP アドレスにアクセスし、ユーザーの IP アドレスが共有インターネットからのものか、プロキシからのものか、実際の IP アドレスかを確認する別の方法を示します。このメソッドは、HTTP_CLIENT_IPHTTP_X_FORWARDED_FORREMOTE_ADDR などの配列要素を使用します。

三項演算子と isset() 関数を使用して、PHP でユーザーの IP アドレスを取得するための簡単な方法を示します。このメソッドは、$_SERVER スーパーグローバル変数の HTTP_CLIENT_IPHTTP_X_FORWARDED_FORREMOTE_ADDR などの配列要素も使用します。

PHP で $_SERVER['REMOTE_ADDR'] を使用してユーザーの IP アドレスを検索する

$_SERVER['REMOTE_ADDR'] 式を使用して、ユーザーが現在のページにアクセスしている場所から IP アドレスを見つけることができます。$_SERVER は PHP のスーパーグローバル変数であり、引数としてさまざまな配列要素を取ります。クライアントの実際の IP アドレスにアクセスするために、$_SERVER 変数の配列要素として REMOTE_ADDR を使用します。$_SERVER['REMOTE_ADDR'] は、すべての場合にクライアントの正しい IP アドレスを常に提供するとは限らないことに注意してください。その他のケースについては、以下で説明します。上記の式が接続の実際の IP を返すように、サーバーAPI(SAPI)が適切に構成されていることを確認してください。

以下の例では、localhost がサーバーとして使用されています。したがって、ループバック IP アドレスを返します。ループバックアドレスについては、こちらを参照してください。次の PHP スクリプトの URL が http://localhost/index.php であるとします。ローカルマシンの IP アドレスを::1 として出力します。::1 は、localhost の IPv6 表現です。

たとえば、$_SERVER['REMOTE_ADDR'] を変数 ip_addr に割り当てます。次に、echo を使用して変数を出力します。

サンプルコード:

# php 7.x
<?php
$ip_add = $_SERVER['REMOTE_ADDR'];
echo "The user's IP address is - ".$ip_add;
?>

出力:

The user's IP address is - ::1

$_SERVER['REMOTE_ADDR']$_SERVER['HTTP_CLIENT_IP'] および $_SERVER['HTTP_X_FORWARDED_FOR'] を使用してユーザーの IP アドレスを検索する

スーパーグローバル変数 $_SERVER の配列要素($_SERVER['REMOTE_ADDR']$_SERVER['HTTP_CLIENT_IP']$_SERVER['HTTP_X_FORWARDED_FOR'] など)を使用して、の IP アドレスを見つけることができます。PHP のユーザー。$_SERVER['REMOTE_ADDR'] を使用して、ユーザーの実際の IP アドレスを見つけます。$_SERVER['HTTP_CLIENT_IP'] を使用して、ユーザーが共有インターネットからページにアクセスしているときに IP アドレスを見つけます。$_SERVER['HTTP_X_FORWARDED_FOR'] を使用して、ユーザーがプロキシを使用して Web ページにアクセスするときに IP アドレスを見つけます。HTTP_X_FORWARDED_FORHTTP_CLIENT_IP などのヘッダーは誰でも設定できるため、なりすましされる可能性があることに注意してください。場合によっては、クライアントの実際の IP アドレスを表していないことがあります。

たとえば、empty() 関数を使用して、$_SERVER['HTTP_CLIENT_IP'] に何かが含まれているかどうかを確認します。含まれている場合は、$ip 変数に値を割り当て、i を出力します。
再度、$_SERVER['HTTP_X_FORWARDED_FOR'] のチェックを適宜実行し、値を割り当てて、存在する場合は出力します。$_SERVER['REMOTE_ADDR'] で同様の操作を実行します。

以下の例では、$_SERVER['REMOTE_ADDR'] は、ユーザーがプロキシや共有インターネット接続を使用していないため、IP アドレスを返します。配列 $_SERVER の詳細については、PHP マニュアルをご参照ください。

サンプルコード:

#php 7.x
<?php if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    echo $ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    echo $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    echo $ip = $_SERVER['REMOTE_ADDR'];
}
?> 

出力:

 ::1

三項演算子と isset() 関数を使用して、ユーザーの IP アドレスを検索する

簡単な方法を使用して、三項演算子を使用して PHP でユーザーの IP アドレスを見つけることができます。このメソッドでは、isset() メソッドは、配列に指定された要素またはヘッダーファイルが含まれているかどうかを確認します。

たとえば、isset() 関数を使用して、配列に HTTP_CLIENT_IP が含まれているかどうかを確認します。条件が真の場合、HTTP_CLIENT_IP が設定されます。次に、条件が失敗した場合、isset() 関数を使用して、配列に HTTP_X_FORWARDED_FOR が含まれているかどうかを確認します。同様に、条件が真の場合、HTTP_X_FORWARDED_FOR が設定され、条件が失敗すると REMOTE_ADDR が設定されます。

以下の例では、クライアントはプロキシまたは共有インターネットを使用していません。そのため、$_SERVER['REMOTE_ADDR'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator) が実行されます。三項演算子については、MSDN Web Docsをご参照ください。

サンプルコード:

#php 7.x
<?php
$ip = isset($_SERVER['HTTP_CLIENT_IP']) ? $_SERVER['HTTP_CLIENT_IP'] : isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
echo "The user IP Address is - ". $ip;
?>

出力:

The user IP Address is - ::1
著者: Subodh Poudel
Subodh Poudel avatar Subodh Poudel avatar

Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.

LinkedIn