Blame | Letzte Änderung | Log anzeigen | RSS feed
<?php namespace Clockwork\DataSource;use Clockwork\DataSource\DataSource;use Clockwork\Helpers\Serializer;use Clockwork\Request\Request;// Data source providing data obtainable in vanilla PHPclass PhpDataSource extends DataSource{// Adds request, response information, session data and peak memory usage to the requestpublic function resolve(Request $request){$request->time = PHP_SAPI !== 'cli' ? $this->getRequestTime() : $request->time;$request->method = $this->getRequestMethod();$request->url = $this->getRequestUrl();$request->uri = $this->getRequestUri();$request->headers = $this->getRequestHeaders();$request->getData = $this->getGetData();$request->postData = $this->getPostData();$request->requestData = $this->getRequestData();$request->sessionData = $this->getSessionData();$request->cookies = $this->getCookies();$request->responseStatus = $this->getResponseStatus();$request->responseTime = $this->getResponseTime();$request->memoryUsage = $this->getMemoryUsage();return $request;}// Get the request cookies (normalized with passwords removed)protected function getCookies(){return $this->removePasswords((new Serializer)->normalizeEach($_COOKIE));}// Get the request GET data (normalized with passwords removed)protected function getGetData(){return $this->removePasswords((new Serializer)->normalizeEach($_GET));}// Get the request POST data (normalized with passwords removed)protected function getPostData(){return $this->removePasswords((new Serializer)->normalizeEach($_POST));}// Get the request body data (attempt to parse as json, normalized with passwords removed)protected function getRequestData(){// The data will already be parsed into POST data by PHP in case of application/x-www-form-urlencoded requestsif (count($_POST)) return;$requestData = file_get_contents('php://input');$requestJsonData = json_decode($requestData, true);return is_array($requestJsonData)? $this->removePasswords((new Serializer)->normalizeEach($requestJsonData)): $requestData;}// Get the request headersprotected function getRequestHeaders(){$headers = [];foreach ($_SERVER as $key => $value) {if (substr($key, 0, 5) !== 'HTTP_') continue;$header = substr($key, 5);$header = str_replace('_', ' ', $header);$header = ucwords(strtolower($header));$header = str_replace(' ', '-', $header);if (! isset($headers[$header])) {$headers[$header] = [ $value ];} else {$headers[$header][] = $value;}}ksort($headers);return $headers;}// Get the request methodprotected function getRequestMethod(){if (isset($_SERVER['REQUEST_METHOD'])) {return $_SERVER['REQUEST_METHOD'];}}// Get the response timeprotected function getRequestTime(){if (isset($_SERVER['REQUEST_TIME_FLOAT'])) {return $_SERVER['REQUEST_TIME_FLOAT'];}}// Get the request URLprotected function getRequestUrl(){$https = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on';$host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : null;$addr = isset($_SERVER['SERVER_ADDR']) ? $_SERVER['SERVER_ADDR'] : null;$port = isset($_SERVER['SERVER_PORT']) ? $_SERVER['SERVER_PORT'] : null;$uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : null;$scheme = $https ? 'https' : 'http';$host = $host ?: $addr;$port = (! $https && $port != 80 || $https && $port != 443) ? ":{$port}" : '';// remove port number from the host$host = $host ? preg_replace('/:\d+$/', '', trim($host)) : null;return "{$scheme}://{$host}{$port}{$uri}";}// Get the request URIprotected function getRequestUri(){if (isset($_SERVER['REQUEST_URI'])) {return $_SERVER['REQUEST_URI'];}}// Get the response status codeprotected function getResponseStatus(){return http_response_code();}// Get the response time (current time, assuming most of the application code has already run at this point)protected function getResponseTime(){return microtime(true);}// Get the session data (normalized with passwords removed)protected function getSessionData(){if (! isset($_SESSION)) return [];return $this->removePasswords((new Serializer)->normalizeEach($_SESSION));}// Get the peak memory usage in bytesprotected function getMemoryUsage(){return memory_get_peak_usage(true);}}