Symfony\Component\HttpFoundation\Request::getClientIps PHP Метод

getClientIps() публичный Метод

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.
См. также: getClientIp()
public getClientIps ( ) : array
Результат 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

Пример #1
1
 /**
  * @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