Symfony\Component\HttpFoundation\Request::getClientIps PHP Method

getClientIps() public method

In the returned array the most trusted IP address is first, and the least trusted one last. The "real" client IP address is the last one, but this is also the least trusted one. Trusted proxies are stripped. Use this method carefully; you should use getClientIp() instead.
See also: getClientIp()
public getClientIps ( ) : array
return array The client IP addresses
    public function getClientIps()
    {
        $clientIps = array();
        $ip = $this->server->get('REMOTE_ADDR');

        if (!$this->isFromTrustedProxy()) {
            return array($ip);
        }

        $hasTrustedForwardedHeader = self::$trustedHeaders[self::HEADER_FORWARDED] && $this->headers->has(self::$trustedHeaders[self::HEADER_FORWARDED]);
        $hasTrustedClientIpHeader = self::$trustedHeaders[self::HEADER_CLIENT_IP] && $this->headers->has(self::$trustedHeaders[self::HEADER_CLIENT_IP]);

        if ($hasTrustedForwardedHeader) {
            $forwardedHeader = $this->headers->get(self::$trustedHeaders[self::HEADER_FORWARDED]);
            preg_match_all('{(for)=("?\[?)([a-z0-9\.:_\-/]*)}', $forwardedHeader, $matches);
            $forwardedClientIps = $matches[3];

            $forwardedClientIps = $this->normalizeAndFilterClientIps($forwardedClientIps, $ip);
            $clientIps = $forwardedClientIps;
        }

        if ($hasTrustedClientIpHeader) {
            $xForwardedForClientIps = array_map('trim', explode(',', $this->headers->get(self::$trustedHeaders[self::HEADER_CLIENT_IP])));

            $xForwardedForClientIps = $this->normalizeAndFilterClientIps($xForwardedForClientIps, $ip);
            $clientIps = $xForwardedForClientIps;
        }

        if ($hasTrustedForwardedHeader && $hasTrustedClientIpHeader && $forwardedClientIps !== $xForwardedForClientIps) {
            if (!$this->isClientIpsValid) {
                return array('0.0.0.0');
            }
            $this->isClientIpsValid = false;

            throw new ConflictingHeadersException('The request has both a trusted Forwarded header and a trusted Client IP header, conflicting with each other with regards to the originating IP addresses of the request. This is the result of a misconfiguration. You should either configure your proxy only to send one of these headers, or configure your project to distrust one of them.');
        }

        if (!$hasTrustedForwardedHeader && !$hasTrustedClientIpHeader) {
            return $this->normalizeAndFilterClientIps(array(), $ip);
        }

        return $clientIps;
    }

Usage Example

 /**
  * @param Request|\Symfony\Component\HttpFoundation\Request $request
  *
  * @return array
  */
 protected function buildBasicEntry($request)
 {
     return ['api_key' => $request->query->get('api_key', $request->headers->get(ManagedDefaults::DF_API_KEY)), 'content_type' => $request->getContentType(), 'content_length' => (int) $request->headers->get('Content-Length', 0), 'dfe' => [], 'host' => $request->getHost(), 'method' => $request->getMethod(), 'path_info' => $request->getPathInfo(), 'path_translated' => $request->server->get('PATH_TRANSLATED'), 'query' => $request->query->all() ?: [], 'request_timestamp' => (double) $request->server->get('REQUEST_TIME_FLOAT', microtime(true)), 'source_ip' => $request->getClientIps(), 'user_agent' => $request->headers->get('user-agent', 'None')];
 }
All Usage Examples Of Symfony\Component\HttpFoundation\Request::getClientIps