How to get the real IP of the user client in PHP?
How does PHP get the real IP of the user client? This article will introduce to you the method of obtaining the real IP of the user client in PHP. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.
Obtaining the client IP is actually not a simple task. Because of IP spoofing and proxy problems, the authenticity of obtaining the client IP will be compromised and cannot be 100% accurate. But we still try to find a more complete method to obtain the real IP address of the client. There are many ways to get IP using php.
Use getenv to get the client's IP address, for example:
function getIp(){ if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) $ip = getenv("HTTP_CLIENT_IP"); else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) $ip = getenv("HTTP_X_FORWARDED_FOR"); else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) $ip = getenv("REMOTE_ADDR"); else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) $ip = $_SERVER['REMOTE_ADDR']; else $ip = "unknown"; return($ip);
In PHP, $_SERVER is the server's super global variable array. You can also use $_SERVER['REMOTE_ADDR'] to get the client's IP address. The difference between the two is that getenv does not support PHP running in IIS isapi mode.
Now we need to explain this code. Two functions are used here, getenv() and strcasecmp(). The former function gets the system environment variables. If the value can be obtained, it will return the value. If it cannot, it will return false. .
strcasecmp(string1, string2) The usage of the string function is: compare string1 and string2, and return 0 if they are equal; if string1 is greater than string2, return a number greater than 0, if less than return a number less than 0.
The function first uses the customer IP. If it does not work, try to use the proxy method. If it does not work, then use REMOTE_ADDR.
I have also seen a more detailed method of detecting IP, which considers IP spoofing and multiple proxy codes. The method is similar Similar.
function getip() { $unknown = 'unknown'; if ( isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR'] && strcasecmp($_SERVER['HTTP_X_FORWARDED_FOR'], $unknown) ) { $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } elseif ( isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], $unknown) ) { $ip = $_SERVER['REMOTE_ADDR']; } /* 处理多层代理的情况 或者使用正则方式:$ip = preg_match("/[\d\.]{7,15}/", $ip, $matches) ? $matches[0] : $unknown; */ if (false !== strpos($ip, ',')) $ip = reset(explode(',', $ip)); return $ip; }
REMOTE_ADDR = Client IP
1. The situation of obtaining the client IP by PHP without using a proxy server:
HTTP_X_FORWARDED_FOR = No value or no display
2. The situation of using a transparent proxy server: Transparent Proxies
REMOTE_ADDR = The last proxy server IP
HTTP_X_FORWARDED_FOR = The real IP of the client (when passing through multiple proxy servers, this value is similar: 221.5.252.160, 203.98.182.163, 203.129.72.215)
This type of proxy server will still be used The real IP of the client is sent to the access object, which cannot achieve the purpose of hiding the true identity.
3. Use PHP of ordinary anonymous proxy server to obtain the client IP: Anonymous Proxies
REMOTE_ADDR = The last proxy server IP
HTTP_X_FORWARDED_FOR = Proxy server IP (when passing through multiple proxy servers, this value is similar: 203.98.182.163, 203.98.182.163, 203.129.72.215)
In this case, the real IP of the client is hidden, but the client is disclosed to the access object They are accessed using proxy servers.
4. The situation of using deceptive proxy servers: Distorting Proxies
REMOTE_ADDR = Proxy server IP
HTTP_X_FORWARDED_FOR = Random IP (when passing through multiple proxy servers, this value is similar: 220.4 .251.159, 203.98.182.163, 203.129.72.215)
In this case, it is also revealed that the client is using a proxy server, but a fake random IP (220.4.251.159) is made up to replace the client's real IP to deceive it.名 V. PHP with a high anonymous proxy server obtain client IP situation: High Anonymity Proxies (Elite Proxies)
Remote_addr = Agent server ip
Http_x_For = No value or no display Http_forwardeded_For, These header messages may not be obtained because different browsers and different network devices may send different IP header messages. Therefore, the values obtained by PHP using $_SERVER["REMOTE_ADDR"] and $_SERVER["HTTP_X_FORWARDED_FOR"] may be null values. It may also be the "unknown" value.Summary: The above is the entire content of this article, I hope it will be helpful to everyone's learning.
Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

In this chapter, we will understand the Environment Variables, General Configuration, Database Configuration and Email Configuration in CakePHP.

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

To work with date and time in cakephp4, we are going to make use of the available FrozenTime class.

To work on file upload we are going to use the form helper. Here, is an example for file upload.

In this chapter, we are going to learn the following topics related to routing ?

CakePHP is an open-source framework for PHP. It is intended to make developing, deploying and maintaining applications much easier. CakePHP is based on a MVC-like architecture that is both powerful and easy to grasp. Models, Views, and Controllers gu

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

Validator can be created by adding the following two lines in the controller.
