Search code examples
phpip-address

PHP is always returning the same IP


I have been using the following PHP code to record IPs:

getenv('HTTP_CLIENT_IP') ?: getenv('HTTP_X_FORWARDED_FOR') ?: getenv('REMOTE_ADDR')

It had been working fine. But starting this May, I noticed that all recorded IPs are 74.220.219.56. I also tested it by using VPN and changing country, and the problem persists. Now I have to use only getenv('REMOTE_ADDR') in order to get the correct IP.

Could that be caused by my hosting company's settings?


Solution

  • HTTP_CLIENT_IP and HTTP_X_FORWARDED_FOR are both HTTP headers that are non-standard and have to be set by a proxy server. If your hosting company has a proxy sitting in front of your PHP application, they need to enable these headers for this to work.

    Furthermore, you should only ever read either of these headers for the IP if you are absolutely sure that your hosting provider uses them. If you don't know sure, this could be a security issue.

    So in short, whether either of those headers work is entirely dependent on your hoster, and you should use neither of these headers until you find out if your hoster supports them.