public function testBuildEntityArrayWithValueOnly() { $headerStr = '10.0.0.1,10.0.0.2,10.0.0.3'; $header = new \Header('X-Forwarded-For', $headerStr, ','); $header->parseParams(); $this->assertEquals(3, $header->count()); $partsArray = $header->toArray(); $this->assertEquals('10.0.0.1', $partsArray[0]); $entityArray = $header->buildEntityArray(); $this->assertEquals(3, count($entityArray[0])); }
/** * Sets the IP address and User Agent of the requesting client. It checks for the presence of * a Forwarded or X-Forwarded-For header and, if present, it uses the left most address listed. * If both of these headers is present, the Forwarded header takes precedence. * If the header is not present, it defaults to the REMOTE_ADDR value */ public function setClientInfo() { $ipAddress = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : null; $userAgent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : null; if (array_key_exists('HTTP_FORWARDED', $_SERVER)) { $header = new Header('Forwarded', $_SERVER['HTTP_FORWARDED'], ';'); $header->parseParams(); $header->setGlue(','); $header->parseParams(); $elementArray = $header->buildEntityArray(); $elementArray = array_change_key_case($elementArray); if (isset($elementArray['for']) && count($elementArray['for'])) { $ipAddress = $elementArray['for'][0]; } if (isset($elementArray['user-agent']) && count($elementArray['user-agent'])) { $userAgent = $elementArray['user-agent'][0]; } } elseif (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) { $header = new Header('X-Forwarded-For', $_SERVER['HTTP_X_FORWARDED_FOR'], ','); $header->parseParams(); $elementArray = $header->buildEntityArray(); $ipAddress = count($elementArray) ? $elementArray[0] : null; } $this->clientIP = $ipAddress; $this->clientUserAgent = $userAgent; }