Skip to main content
added 77 characters in body
Source Link

I have gone thorugh many answer and I decided to give improved code to get Visitor IP address.

  • Compatible with CloudFlare
  • Get real visitor IP behind CloudFlare network
  • Handle the case where there are multiple proxies involved (HTTP_X_FORWARDED_FOR)
  • HTTP_X_FORWARDED_FOR can have multiple ip like '1.1.1.1,2.2.2.2'
  • Work if $_SERVER was not available.
  • Filter private and/or reserved IPs
  • Process all forwarded IPs in X_FORWARDED_FOR
  • Check for shared Internet/ISP IP (HTTP_CLIENT_IP)

function GetIP() { // Compatible with CloudFlare // Get real visitor IP behind CloudFlare network if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) { $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"]; $_SERVER['HTTP_CLIENT_IP'] = $_SERVER["HTTP_CF_CONNECTING_IP"]; } foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key) { if (array_key_exists($key, $_SERVER) === true) { // Handle the case where there are multiple proxies involved // HTTP_X_FORWARDED_FOR can have multiple ip like '1.1.1.1,2.2.2.2' foreach (array_map('trim', explode(',', $_SERVER[$key])) as $ip) { // Filter private and/or reserved IPs; if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) { return $ip; } } } else { // Work if $_SERVER was not available. foreach (array_map('trim', explode(',', getenv($key))) as $ip) { // Filter private and/or reserved IPs; if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) { return $ip; } } } } } 

I have gone thorugh many answer and I decided to give improved code to get Visitor IP address.

  • Compatible with CloudFlare
  • Get real visitor IP behind CloudFlare network
  • Handle the case where there are multiple proxies involved
  • HTTP_X_FORWARDED_FOR can have multiple ip like '1.1.1.1,2.2.2.2'
  • Work if $_SERVER was not available.
  • Filter private and/or reserved IPs
  • Process all forwarded IPs in X_FORWARDED_FOR

function GetIP() { // Compatible with CloudFlare // Get real visitor IP behind CloudFlare network if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) { $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"]; $_SERVER['HTTP_CLIENT_IP'] = $_SERVER["HTTP_CF_CONNECTING_IP"]; } foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key) { if (array_key_exists($key, $_SERVER) === true) { // Handle the case where there are multiple proxies involved // HTTP_X_FORWARDED_FOR can have multiple ip like '1.1.1.1,2.2.2.2' foreach (array_map('trim', explode(',', $_SERVER[$key])) as $ip) { // Filter private and/or reserved IPs; if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) { return $ip; } } } else { // Work if $_SERVER was not available. foreach (array_map('trim', explode(',', getenv($key))) as $ip) { // Filter private and/or reserved IPs; if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) { return $ip; } } } } } 

I have gone thorugh many answer and I decided to give improved code to get Visitor IP address.

  • Compatible with CloudFlare
  • Get real visitor IP behind CloudFlare network
  • Handle the case where there are multiple proxies involved (HTTP_X_FORWARDED_FOR)
  • HTTP_X_FORWARDED_FOR can have multiple ip like '1.1.1.1,2.2.2.2'
  • Work if $_SERVER was not available.
  • Filter private and/or reserved IPs
  • Process all forwarded IPs in X_FORWARDED_FOR
  • Check for shared Internet/ISP IP (HTTP_CLIENT_IP)

function GetIP() { // Compatible with CloudFlare // Get real visitor IP behind CloudFlare network if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) { $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"]; $_SERVER['HTTP_CLIENT_IP'] = $_SERVER["HTTP_CF_CONNECTING_IP"]; } foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key) { if (array_key_exists($key, $_SERVER) === true) { // Handle the case where there are multiple proxies involved // HTTP_X_FORWARDED_FOR can have multiple ip like '1.1.1.1,2.2.2.2' foreach (array_map('trim', explode(',', $_SERVER[$key])) as $ip) { // Filter private and/or reserved IPs; if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) { return $ip; } } } else { // Work if $_SERVER was not available. foreach (array_map('trim', explode(',', getenv($key))) as $ip) { // Filter private and/or reserved IPs; if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) { return $ip; } } } } } 
Additional Flower Bracket Removed
Source Link

I have gone thorugh many answer and I decided to give improved code to get Visitor IP address.

  • Compatible with CloudFlare
  • Get real visitor IP behind CloudFlare network
  • Handle the case where there are multiple proxies involved
  • HTTP_X_FORWARDED_FOR can have multiple ip like '1.1.1.1,2.2.2.2'
  • Work if $_SERVER was not available.
  • Filter private and/or reserved IPs
  • Process all forwarded IPs in X_FORWARDED_FOR

function GetIP() { // Compatible with CloudFlare // Get real visitor IP behind CloudFlare network if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) { $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"]; $_SERVER['HTTP_CLIENT_IP'] = $_SERVER["HTTP_CF_CONNECTING_IP"]; } foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key) { if (array_key_exists($key, $_SERVER) === true) { // Handle the case where there are multiple proxies involved // HTTP_X_FORWARDED_FOR can have multiple ip like '1.1.1.1,2.2.2.2' foreach (array_map('trim', explode(',', $_SERVER[$key])) as $ip) { // Filter private and/or reserved IPs; if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) { return $ip; } } } else { // Work if $_SERVER was not available. foreach (array_map('trim', explode(',', getenv($key))) as $ip) { // Filter private and/or reserved IPs; if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) { return $ip; } } } } }} 

I have gone thorugh many answer and I decided to give improved code to get Visitor IP address.

  • Compatible with CloudFlare
  • Get real visitor IP behind CloudFlare network
  • Handle the case where there are multiple proxies involved
  • HTTP_X_FORWARDED_FOR can have multiple ip like '1.1.1.1,2.2.2.2'
  • Work if $_SERVER was not available.

function GetIP() { // Compatible with CloudFlare // Get real visitor IP behind CloudFlare network if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) { $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"]; $_SERVER['HTTP_CLIENT_IP'] = $_SERVER["HTTP_CF_CONNECTING_IP"]; } foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key) { if (array_key_exists($key, $_SERVER) === true) { // Handle the case where there are multiple proxies involved // HTTP_X_FORWARDED_FOR can have multiple ip like '1.1.1.1,2.2.2.2' foreach (array_map('trim', explode(',', $_SERVER[$key])) as $ip) { // Filter private and/or reserved IPs; if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) { return $ip; } } } else { // Work if $_SERVER was not available. foreach (array_map('trim', explode(',', getenv($key))) as $ip) { // Filter private and/or reserved IPs; if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) { return $ip; } } } } }} 

I have gone thorugh many answer and I decided to give improved code to get Visitor IP address.

  • Compatible with CloudFlare
  • Get real visitor IP behind CloudFlare network
  • Handle the case where there are multiple proxies involved
  • HTTP_X_FORWARDED_FOR can have multiple ip like '1.1.1.1,2.2.2.2'
  • Work if $_SERVER was not available.
  • Filter private and/or reserved IPs
  • Process all forwarded IPs in X_FORWARDED_FOR

function GetIP() { // Compatible with CloudFlare // Get real visitor IP behind CloudFlare network if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) { $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"]; $_SERVER['HTTP_CLIENT_IP'] = $_SERVER["HTTP_CF_CONNECTING_IP"]; } foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key) { if (array_key_exists($key, $_SERVER) === true) { // Handle the case where there are multiple proxies involved // HTTP_X_FORWARDED_FOR can have multiple ip like '1.1.1.1,2.2.2.2' foreach (array_map('trim', explode(',', $_SERVER[$key])) as $ip) { // Filter private and/or reserved IPs; if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) { return $ip; } } } else { // Work if $_SERVER was not available. foreach (array_map('trim', explode(',', getenv($key))) as $ip) { // Filter private and/or reserved IPs; if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) { return $ip; } } } } } 
Source Link

I have gone thorugh many answer and I decided to give improved code to get Visitor IP address.

  • Compatible with CloudFlare
  • Get real visitor IP behind CloudFlare network
  • Handle the case where there are multiple proxies involved
  • HTTP_X_FORWARDED_FOR can have multiple ip like '1.1.1.1,2.2.2.2'
  • Work if $_SERVER was not available.

function GetIP() { // Compatible with CloudFlare // Get real visitor IP behind CloudFlare network if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) { $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"]; $_SERVER['HTTP_CLIENT_IP'] = $_SERVER["HTTP_CF_CONNECTING_IP"]; } foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key) { if (array_key_exists($key, $_SERVER) === true) { // Handle the case where there are multiple proxies involved // HTTP_X_FORWARDED_FOR can have multiple ip like '1.1.1.1,2.2.2.2' foreach (array_map('trim', explode(',', $_SERVER[$key])) as $ip) { // Filter private and/or reserved IPs; if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) { return $ip; } } } else { // Work if $_SERVER was not available. foreach (array_map('trim', explode(',', getenv($key))) as $ip) { // Filter private and/or reserved IPs; if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) { return $ip; } } } } }}