diff --git a/src/ProfilingData.php b/src/ProfilingData.php index 6b44928..798af8f 100644 --- a/src/ProfilingData.php +++ b/src/ProfilingData.php @@ -7,6 +7,26 @@ */ final class ProfilingData { + /** @var array */ + private $allowedServerKeys = array( + 'DOCUMENT_ROOT', + 'HTTPS', + 'HTTP_HOST', + 'HTTP_USER_AGENT', + 'PATH_INFO', + 'PHP_AUTH_USER', + 'PHP_SELF', + 'QUERY_STRING', + 'REMOTE_ADDR', + 'REMOTE_USER', + 'REQUEST_METHOD', + 'REQUEST_TIME', + 'REQUEST_TIME_FLOAT', + 'SERVER_ADDR', + 'SERVER_NAME', + 'UNIQUE_ID', + ); + /** @var array */ private $excludeEnv; /** @var callable|null */ @@ -31,36 +51,13 @@ public function getProfilingData(array $profile) { $url = $this->getUrl(); - $requestTimeFloat = explode('.', sprintf('%.6F', $_SERVER['REQUEST_TIME_FLOAT'])); - $sec = $requestTimeFloat[0]; - $usec = isset($requestTimeFloat[1]) ? $requestTimeFloat[1] : 0; - - $allowedServerKeys = array( - 'DOCUMENT_ROOT', - 'HTTPS', - 'HTTP_HOST', - 'HTTP_USER_AGENT', - 'PATH_INFO', - 'PHP_AUTH_USER', - 'PHP_SELF', - 'QUERY_STRING', - 'REMOTE_ADDR', - 'REMOTE_USER', - 'REQUEST_METHOD', - 'REQUEST_TIME', - 'REQUEST_TIME_FLOAT', - 'SERVER_ADDR', - 'SERVER_NAME', - 'UNIQUE_ID', - ); - - $serverMeta = array_intersect_key($_SERVER, array_flip($allowedServerKeys)); + list($sec, $usec) = $this->getRequestTime($_SERVER['REQUEST_TIME_FLOAT']); $meta = array( 'url' => $url, 'get' => $_GET, 'env' => $this->getEnvironment($_ENV), - 'SERVER' => $serverMeta, + 'SERVER' => $this->getServer($_SERVER), 'simple_url' => $this->getSimpleUrl($url), 'request_ts_micro' => array('sec' => $sec, 'usec' => $usec), // these are superfluous and should be dropped in the future @@ -128,4 +125,27 @@ private function getUrl() return $url; } + + /** + * @param float $requestTime + * @return array + */ + private function getRequestTime($requestTime) + { + $parts = explode('.', sprintf('%.6F', $requestTime)); + + $sec = $parts[0]; + $usec = isset($parts[1]) ? $parts[1] : 0; + + return array((int)$sec, (int)$usec); + } + + /** + * @param array $server + * @return array + */ + private function getServer(array $server) + { + return array_intersect_key($server, array_flip($this->allowedServerKeys)); + } }