PHP獲取客戶端IP
阿新 • • 發佈:2020-09-11
REMOTE_ADDR 是你的客戶端跟你的伺服器“握手”時候的IP。如果使用了“匿名代理”,REMOTE_ADDR將顯示代理伺服器的IP(在Nginx中可以使用proxy_set_header X-Forwarded-For $remote_addr;來解決)。
HTTP_CLIENT_IP 是代理伺服器傳送的HTTP頭。如果是“超級匿名代理”,則返回none值。同樣,REMOTE_ADDR也會被替換為這個代理伺服器的IP。
/** * 獲取獲取客戶端IP * @return string * @author bashlog<[email protected]> * @date 2020-09-11 14:19 */ function get_client_ip() { foreach (['HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'REMOTE_ADDR'] as $server_key) { if (array_key_exists($server_key, $_SERVER)) { $ip = trim($_SERVER[$server_key]); //FILTER_FLAG_NO_PRIV_RANGE - 要求值不在 RFC 指定的私有範圍 IP 內(比如 192.168.0.1)。 //FILTER_FLAG_NO_RES_RANGE - 要求值不在保留的 IP 範圍內。該標誌接受 IPV4 和 IPV6 值。 if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) { return $ip; } } } return ''; }