Skip to main content
PHP Blog

Back to all posts

How to Get A Client Real IP Address In PHP?

Published on
3 min read

Table of Contents

Show more
How to Get A Client Real IP Address In PHP? image

To get a client's real IP address in PHP, you can use the $_SERVER superglobal variable. You can access the client's IP address using the REMOTE_ADDR key in the $_SERVER array. Here's an example snippet:

$clientIP = $_SERVER['REMOTE_ADDR'];

However, it's important to note that the value returned by $_SERVER['REMOTE_ADDR'] may not always reflect the real client IP address, especially if the client is behind a proxy, load balancer, or using certain network configurations. In such cases, you can attempt to get the real IP address by checking additional server variables like HTTP_X_FORWARDED_FOR and HTTP_CLIENT_IP. Here's an example that checks these variables:

$clientIP = $_SERVER['REMOTE_ADDR'];

if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) { $clientIP = $_SERVER['HTTP_X_FORWARDED_FOR']; } elseif (array_key_exists('HTTP_CLIENT_IP', $_SERVER)) { $clientIP = $_SERVER['HTTP_CLIENT_IP']; }

This code snippet checks if the HTTP_X_FORWARDED_FOR and HTTP_CLIENT_IP keys exist in the $_SERVER array, and if so, assigns their values to the $clientIP variable.

Remember that relying solely on these variables may not always provide an accurate real IP address, as they can be manipulated or spoofed.

What is the best solution to obtain a visitor's IP address in PHP?

In PHP, there are a few different ways to obtain a visitor's IP address. Here are two common methods:

  1. Using the $_SERVER superglobal variable:

function getIPAddress() { if (!empty($_SERVER['HTTP_CLIENT_IP'])) { return $_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { return $_SERVER['HTTP_X_FORWARDED_FOR']; } else { return $_SERVER['REMOTE_ADDR']; } }

$visitorIP = getIPAddress();

This method checks for the visitor's IP address in the HTTP headers and falls back to the REMOTE_ADDR if those headers are not present.

  1. Using the getenv() function:

function getIPAddress() { $ipAddress = ''; if (getenv('HTTP_CLIENT_IP')) $ipAddress = getenv('HTTP_CLIENT_IP'); else if(getenv('HTTP_X_FORWARDED_FOR')) $ipAddress = getenv('HTTP_X_FORWARDED_FOR'); else if(getenv('HTTP_X_FORWARDED')) $ipAddress = getenv('HTTP_X_FORWARDED'); else if(getenv('HTTP_FORWARDED_FOR')) $ipAddress = getenv('HTTP_FORWARDED_FOR'); else if(getenv('HTTP_FORWARDED')) $ipAddress = getenv('HTTP_FORWARDED'); else if(getenv('REMOTE_ADDR')) $ipAddress = getenv('REMOTE_ADDR'); else $ipAddress = 'UNKNOWN'; return $ipAddress; }

$visitorIP = getIPAddress();

Both of these methods will retrieve the IP address of the visitor, but keep in mind that in some cases the IP address could be spoofed or modified by proxies or other means.

What is the code to retrieve a visitor's IP address using PHP?

To retrieve a visitor's IP address using PHP, you can use the $_SERVER superglobal variable. The IP address can be obtained from the REMOTE_ADDR value. Here is an example:

$ipAddress = $_SERVER['REMOTE_ADDR'];

However, note that this method might not always reflect the true client IP address due to various factors such as the use of proxies or load balancers. A more reliable method for determining the client's IP address when using a proxy or load balancer is to use the HTTP_X_FORWARDED_FOR header. Here's an example:

if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ipAddress = $_SERVER['HTTP_X_FORWARDED_FOR']; } else { $ipAddress = $_SERVER['REMOTE_ADDR']; }

The code snippet checks if the HTTP_X_FORWARDED_FOR header is set. If it is, it assigns the value of the header to the $ipAddress variable. Otherwise, it falls back to using the REMOTE_ADDR value.

What is the function to get a visitor's real IP address in PHP?

In PHP, you can use the $_SERVER superglobal to get the visitor's real IP address. The IP address is stored in the REMOTE_ADDR key of the $_SERVER array. Here's an example of how you can access the visitor's IP address:

$ipAddress = $_SERVER['REMOTE_ADDR'];

However, it's important to note that the REMOTE_ADDR value might not always provide the real IP address in some situations due to proxy servers or network configurations. In such cases, you can check the HTTP_X_FORWARDED_FOR key of the $_SERVER array for a more accurate IP address, but bear in mind that this value can also be easily faked.