/** * HttpRequest constructor. * @param Request $request */ public function __construct(Request $request, $jsonData) { $this->request = $request; $this->parameters = $request->getQuery(); $this->parameters = array_merge($this->parameters, $request->getHeaders()); $this->parameters = array_merge($this->parameters, (array) $jsonData); }
public function onHttpRequest(\React\Http\Request $request, $response) { if ($request->getPath() !== "/auth/github/callback") { $response->writeHead(404, array('Content-Type' => 'text/plain')); $response->end("Not Found"); } $query = $request->getQuery(); if (!isset($query['state']) || !isset($query['code'])) { $response->writeHead(200, array('Content-Type' => 'text/plain')); $response->end("No Code or State query params found"); return; } //If we don't already have a promise for this state, create one if (!isset($this->promises[$query['state']])) { $deferred = new \React\Promise\Deferred(); $this->promises[$query['state']] = $deferred; } $accessToken = $this->getAccessToken($query['code']); if ($accessToken) { $this->promises[$query['state']]->resolve(array("SUCCESS", $accessToken)); } else { $this->promises[$query['state']]->resolve(array("FAILURE")); } $response->writeHead(200, array('Content-Type' => 'text/html')); $response->end("<script>window.close();</script>"); }
/** * @param Request $request * @param Response $response * @return SymfonyRequest */ private function buildSymfonyRequest(ReactRequest $request, ReactResponse $response) { $sfRequest = SymfonyRequest::create($request->getPath(), $request->getMethod(), $request->getQuery()); $sfRequest->attributes->set('react.espresso.request', $request); $sfRequest->attributes->set('react.espresso.response', $response); return $sfRequest; }
/** * Set value of ReactRequest * * @param \React\Http\Request $reactRequest */ public function setReactRequest($reactRequest) { $this->reactRequest = $reactRequest; $this->setUri($reactRequest->getPath()); $this->getHeaders()->addHeaders($reactRequest->getHeaders()); $this->setMethod($reactRequest->getMethod()); $this->setQuery(new Parameters($reactRequest->getQuery())); }
public function handleRequest(React\Http\Request $req, React\Http\Response $res) { $request = Request::create($req->getPath(), $req->getMethod(), $req->getQuery()); $response = $this->httpKernel->handle($request); $headers = array(); foreach ($response->headers as $k => $v) { $headers[$k] = $v[0]; } $res->writeHead($response->getStatusCode(), $headers); $res->end($response->getContent()); }
private function handle(React\Http\Request $request, React\Http\Response $response, $requestHandler) { $sfRequest = Request::create($request->getPath(), $request->getMethod(), $request->getQuery()); $output = call_user_func_array($requestHandler, [$sfRequest]); if ($output instanceof Response) { $response->writeHead($output->getStatusCode(), $output->headers->all()); $response->end($output->getContent()); } else { $response->writeHead(200, array('Content-Type' => 'text/plain')); $response->end($output); } }
protected function fixHeaderNames(Request $request) { $headers = $request->getHeaders(); foreach ($headers as $name => $v) { $newName = str_replace(' ', '-', ucwords(strtolower(str_replace('-', ' ', $name)))); $headers[$newName] = $headers[$name]; } if (isset($headers['Content-Type'])) { $headers['Content-Type'] = explode(';', $headers['Content-Type'])[0]; } $request->__construct($request->getMethod(), $request->getUrl(), $request->getQuery(), $request->getHttpVersion(), $headers, $request->getBody()); }
/** * @param Request $request * @return mixed[] */ public function handleRequest(Request $request) { $query = $request->getQuery(); if (isset($query['time'])) { $time = $query['time']; if ($time) { $this->entityService->add($time); return ['code' => '200', 'status' => 'OK']; } } return ['code' => '400', 'status' => 'Bad request']; }
/** * @param Request $request * @param array $parameters * @return SymfonyRequest */ private function buildSfRequest(Request $request, array $parameters) { $sfRequest = SymfonyRequest::create($request->getPath(), $request->getMethod()); $requestHeaders = $request->getHeaders(); if (isset($requestHeaders['Cookie'])) { $sfRequest->cookies->replace($this->deserializeCookiesHeader($requestHeaders['Cookie'])); } $sfRequest->request->replace($parameters); $sfRequest->query->replace($request->getQuery()); $sfRequest->server->set('REQUEST_URI', $request->getPath()); $sfRequest->server->set('SERVER_NAME', rtrim($requestHeaders['Host'], ':0..9')); $sfRequest->headers->replace($request->getHeaders()); return $sfRequest; }
/** * Creates a new request object from the data of a reactPHP request object * * @param \React\Http\Request $request ReactPHP native request object * * @return \Slim\Http\Request */ public static function createFromReactRequest(\React\Http\Request $request) { $slimHeads = new Headers(); foreach ($request->getHeaders() as $reactHeadKey => $reactHead) { $slimHeads->add($reactHeadKey, $reactHead); if ($reactHeadKey === 'Host') { $host = explode(':', $reactHead); if (count($host) === 1) { $host[1] = '80'; } } } $slimUri = new Uri('http', $host[0], (int) $host[1], $request->getPath(), $request->getQuery()); $cookies = []; $serverParams = $_SERVER; $serverParams['SERVER_PROTOCOL'] = 'HTTP/' . $request->getHttpVersion(); $slimBody = new RequestBody(); return new self($request->getMethod(), $slimUri, $slimHeads, $cookies, $serverParams, $slimBody); }
/** * {@inheritdoc} */ protected static function mapRequest(ReactRequest $reactRequest, $content) { $method = strtoupper($reactRequest->getMethod()); $headers = $reactRequest->getHeaders(); $query = $reactRequest->getQuery(); $post = array(); $requestIsPostType = in_array($method, array('POST', 'PUT', 'DELETE', 'PATCH')); // Parse body? if (isset($headers['Content-Type']) && 0 === strpos($headers['Content-Type'], 'application/x-www-form-urlencoded') && $requestIsPostType) { parse_str($content, $post); } $cookies = array(); if (isset($headers['Cookie'])) { $headersCookie = explode(';', $headers['Cookie']); foreach ($headersCookie as $cookie) { list($name, $value) = explode('=', trim($cookie)); $cookies[$name] = $value; } } // Add any query string to URI so SymfonyRequest::create() can access it. $uri = $reactRequest->getPath() . (empty($query) ? '' : '?' . http_build_query($query)); // SymfonyRequest::create() expects $parameters to contain either // $_GET or $_POST. $parameters = $requestIsPostType ? $post : $query; $syRequest = SymfonyRequest::create($uri, $method, $parameters, $cookies, array(), array(), $content); $syRequest->headers->replace($headers); // Set CGI/1.1 (RFC 3875) server vars. if (empty($_ENV)) { // In some cases with cli, $_ENV isn't set, so get with getenv(). // @see http://stackoverflow.com/questions/8798294/getenv-vs-env-in-php/21473853#21473853 // @todo: Make this more efficient to eliminate running per request. // Static variable? $_ENV['DOCUMENT_ROOT'] = getenv('DOCUMENT_ROOT'); $_ENV['SCRIPT_NAME'] = getenv('SCRIPT_NAME'); } $serverVars = array_merge($syRequest->server->all(), array('DOCUMENT_ROOT' => $_ENV['DOCUMENT_ROOT'], 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SCRIPT_NAME' => $_ENV['SCRIPT_NAME'], 'SCRIPT_FILENAME' => $_ENV['DOCUMENT_ROOT'] . $_ENV['SCRIPT_NAME'])); $syRequest->server->replace($serverVars); return $syRequest; }
/** * @param Request $request * @param string $postData * @return SymfonyRequest */ private function buildSfRequest(Request $request, $postData = null) { if ($postData !== null) { parse_str($postData, $postDataArray); $parameters = empty($postDataArray) ? [] : $postDataArray; $content = empty($postDataArray) ? [] : $postData; // TODO Maybe check Content-Type too? $sfRequest = SymfonyRequest::create($request->getPath(), $request->getMethod(), $parameters, [], [], [], $content); } else { $sfRequest = SymfonyRequest::create($request->getPath(), $request->getMethod()); } $requestHeaders = $request->getHeaders(); if (isset($requestHeaders['Cookie'])) { $sfRequest->cookies->replace($this->deserializeCookiesHeader($requestHeaders['Cookie'])); } // $sfRequest->request->replace($parameters); $sfRequest->query->replace($request->getQuery()); $sfRequest->server->set('REQUEST_URI', $request->getPath()); $sfRequest->server->set('SERVER_NAME', rtrim($requestHeaders['Host'], ':0..9')); $sfRequest->headers->replace($request->getHeaders()); return $sfRequest; }
/** * Creates a new request object from the data of a reactPHP request object * * @param \React\Http\Request $request ReactPHP native request object * @param string $body Content of received call * * @return \Slim\Http\Request */ public static function createFromReactRequest(\React\Http\Request $request, $body = '') { $slimHeads = new Headers(); $cookies = []; $host = ['', 80]; foreach ($request->getHeaders() as $reactHeadKey => $reactHead) { $slimHeads->add($reactHeadKey, $reactHead); switch ($reactHeadKey) { case 'Host': $host = static::getHost($reactHead); break; case 'Cookie': $cookies = Cookies::parseHeader($reactHead); break; } } $slimUri = new Uri('http', $host[0], (int) $host[1], $request->getPath(), $request->getQuery()); $serverParams = $_SERVER; $serverParams['SERVER_PROTOCOL'] = 'HTTP/' . $request->getHttpVersion(); $slimBody = static::getBody($body); return new Request($request->getMethod(), $slimUri, $slimHeads, $cookies, $serverParams, $slimBody); }
/** * Builds a RequestInfo instance for the given path * * @param Request $request * @return RequestInfo */ public static function buildRequestInfoFromRequest(Request $request) { $requestInfoIdentifier = sha1(sprintf('%s-%s-%s', $request->getMethod(), $request->getPath(), json_encode($request->getQuery()))); if (!isset(static::$pathToRequestInfoMap[$requestInfoIdentifier])) { $pathParts = explode('/', $request->getPath()); $pathParts = array_values(array_filter($pathParts, function ($item) { return !!$item; })); $dataIdentifier = NULL; $databaseIdentifier = NULL; if (count($pathParts) >= 2) { $dataIdentifier = $pathParts[1]; } if (count($pathParts) >= 1) { $databaseIdentifier = $pathParts[0]; } $handlerAction = static::getHandlerActionForRequest($request); if ($handlerAction) { $databaseIdentifier = ''; } static::$pathToRequestInfoMap[$requestInfoIdentifier] = new RequestInfo($request, $dataIdentifier, $databaseIdentifier, $request->getMethod(), $handlerAction); } return static::$pathToRequestInfoMap[$requestInfoIdentifier]; }
/** * Validate Request * * @param PrimedRequest $primedRequest * @param Request $received * * @return bool * * @throws PrimerMethodMismatchException * @throws PrimerPathMismatchException * @throws PrimerQueryMismatchException */ public function validateRequest(PrimedRequest $primedRequest, Request $received) { if ($primedRequest->getMethod() !== $received->getMethod()) { throw new PrimerMethodMismatchException(sprintf('Expected Method (%s) Received (%s)', $primedRequest->getMethod(), $received->getMethod())); } if ($primedRequest->getPath() !== $received->getPath()) { throw new PrimerPathMismatchException(sprintf('Expected Path (%s) Received (%s)', $primedRequest->getPath(), $received->getPath())); } if ($primedRequest->getQuery() !== $received->getQuery()) { throw new PrimerQueryMismatchException(sprintf('Expected Query (%s) Received (%s)', $primedRequest->getQuery(), $received->getQuery())); } return true; }
protected function handleRequest(\React\Http\Request $request, \React\Http\Response $response) { $this->info($request->getMethod() . ' ' . $request->getPath()); foreach (array_merge($request->getQuery(), $this->post_params) as $key => $value) { if (!is_string($value)) { $value = json_encode($value); } $this->log($key . ' => ' . $value); } $file_path = public_path() . (strpos($request->getPath(), "By") ? substr($request->getPath(), 0, strpos($request->getPath(), "?")) : $request->getPath()); if ($request->getPath() != '/' && file_exists($file_path)) { header("X-Sendfile: " . basename($file_path)); header("Content-type: " . mime_content_type($file_path)); header('Content-Disposition: attachment; filename="' . basename($file_path) . '"'); $response->writeHead(200); $response->end(file_get_contents($file_path)); return; } $kernel = \App::make('Illuminate\\Contracts\\Http\\Kernel'); $laravel_request = \Request::create($this->getRequestUri($request->getHeaders(), $request->getPath()), $request->getMethod(), array_merge($request->getQuery(), $this->post_params), $this->getCookies($request->getHeaders()), [], $request->getHeaders(), $this->request_body); foreach ($request->getHeaders() as $key => $value) { $laravel_request->headers->set($key, $value); } $laravel_response = $kernel->handle($laravel_request); $headers = array_merge($laravel_response->headers->allPreserveCase(), $this->buildCookies($laravel_response->headers->getCookies()), array('Access-Control-Allow-Headers' => 'Origin, X-Requested-With, Content-Type, Accept', 'Access-Control-Allow-Methods' => 'Access-Control-Allow-Methods', 'Access-Control-Allow-Credentials' => 'true')); $response->writeHead($laravel_response->getStatusCode(), $headers); $response->end($laravel_response->getContent()); $kernel->terminate($laravel_request, $laravel_response); }
/** * Manages a request, made to the Http server. * * @param \React\Http\Request $request * @param \React\Http\Response $response */ public function manageRequest($request, $response) { $requestData = [$request->getHeaders()['Host'] . $request->getPath(), $request->getMethod(), array_merge($request->getQuery(), $request->getPost()), [], $request->getFiles(), []]; $contentType = isset($request->getHeaders()['Content-Type']) ? $request->getHeaders()['Content-Type'] : 'application/x-www-form-urlencoded'; if (strtolower($contentType) == 'application/x-www-form-urlencoded') { $requestData[] = http_build_query($request->getPost()); } else { $requestData[] = $request->getBody(); } //Creates the Symfony Request from the React Request. $sRequest = Request::create(...$requestData); /** @var Response $sResponse */ $sResponse = $this->kernel->handle($sRequest); $response->writeHead($sResponse->getStatusCode()); $response->end($sResponse->getContent()); }
/** * Handles the requests * * @param \React\Http\Request $request Request to handle * @param \React\Http\Response $response Prebuilt response object */ public function serverCallback($request, $response) { // Currently the PHP server is readonly if (!in_array(strtoupper($request->getMethod()), array('GET', 'HEAD'))) { $response->writeHead(405, array('Content-type' => 'text/plain')); $response->end('Writing is currently not supported'); return; } $requestPath = $this->sanitizePath($request->getPath()); $requestPath = substr($requestPath, 5); /** @var Request $restRequest */ $restRequest = new Request($request->getMethod(), $requestPath, $request->getQuery(), $request->getHeaders()); $path = '' . strtok($requestPath, '/'); $restRequest->initWithPathAndOriginalPath($path, $path); $this->setServerGlobals($request); /** @var \Bullet\Response $restResponse */ $restResponse = NULL; ob_start(); $this->dispatcher->dispatch($restRequest, $restResponse); $responseString = ob_get_clean(); if (!$restResponse) { $response->writeHead(200); $response->end($responseString); } else { $response->writeHead($restResponse->status(), $this->getHeadersFromResponse($restResponse)); $response->end($restResponse->content()); } unset($restRequest); unset($restResponse); }
protected function handleRequest(\React\Http\Request $request, \React\Http\Response $response) { $request_headers = $request->getHeaders(); $requestUri = $this->getRequestUri($request_headers, $request->getPath()); $laravel_request = \Request::create($this->getRequestUri($request_headers, $request->getPath()), $request->getMethod(), array_merge($request->getQuery(), $this->post_params), $this->getCookies($request_headers), [], [], $this->request_body); $laravel_request->headers->add($request_headers); $laravel_response = \App::handle($laravel_request); $headers = array_merge($laravel_response->headers->allPreserveCase(), $this->buildCookies($laravel_response->headers->getCookies())); $response->writeHead($laravel_response->getStatusCode(), $headers); $response->end($laravel_response->getContent()); echo $requestUri . "\n"; }
/** * @param React\Http\Request $reactRequest * @return Nette\Http\Request */ private function createNetteHttpRequest(React\Http\Request $reactRequest) { $url = new Nette\Http\UrlScript('http://' . $reactRequest->getHeaders()['Host'] . $reactRequest->getPath()); $url->setQuery($reactRequest->getQuery()); return new Nette\Http\Request($url, NULL, NULL, NULL, NULL, $reactRequest->getHeaders(), $reactRequest->getMethod(), $reactRequest->remoteAddress, NULL, NULL); }
/** * Convert React\Http\Request to Symfony\Component\HttpFoundation\Request * * @param ReactRequest $reactRequest * @return SymfonyRequest $syRequest */ protected static function mapRequest(ReactRequest $reactRequest, $content) { $method = $reactRequest->getMethod(); $headers = $reactRequest->getHeaders(); $query = $reactRequest->getQuery(); $post = array(); // parse body? if (isset($headers['Content-Type']) && 0 === strpos($headers['Content-Type'], 'application/x-www-form-urlencoded') && in_array(strtoupper($method), array('POST', 'PUT', 'DELETE', 'PATCH'))) { parse_str($content, $post); } $syRequest = new SymfonyRequest($query, $post, array(), array(), array(), array(), $content); $syRequest->setMethod($method); $syRequest->headers->replace($headers); $syRequest->server->set('REQUEST_URI', $reactRequest->getPath()); $syRequest->server->set('SERVER_NAME', explode(':', $headers['Host'])[0]); return $syRequest; }
/** * @param \React\Http\Request $request * * @return \Symfony\Component\HttpFoundation\Request */ private function convertRequest($request) { // Convert the React Request to a Symfony Request $symReq = new \Symfony\Component\HttpFoundation\Request(); // Set Method $symReq->setMethod($request->getMethod()); // Add path $symReq->server->set('REQUEST_URI', $request->getPath()); // TODO: consider appending http_build_query($request->getQuery()) // Add GET variables $symReq->query->add($request->getQuery()); // Add POST variables $symReq->request->add($request->getPost()); // Add headers $symReq->headers->add($request->getHeaders()); return $symReq; }
protected function handleRequest(\React\Http\Request $request, \React\Http\Response $response) { $kernel = \App::make('Illuminate\\Contracts\\Http\\Kernel'); $laravel_request = \Request::create($this->getRequestUri($request->getHeaders(), $request->getPath()), $request->getMethod(), array_merge($request->getQuery(), $this->post_params), $this->getCookies($request->getHeaders()), [], [], $this->request_body); $laravel_response = $kernel->handle($laravel_request); $headers = array_merge($laravel_response->headers->allPreserveCase(), $this->buildCookies($laravel_response->headers->getCookies())); $response->writeHead($laravel_response->getStatusCode(), $headers); $response->end($laravel_response->getContent()); $kernel->terminate($laravel_request, $laravel_response); }
private function getUriFromRequest(ReactRequest $request) { $query = $request->getQuery(); return 'http://localhost/' . $request->getPath() . (empty($query) ? '' : '?' . http_build_query($query)); }
public static function fromHttpRequest(HttpRequest $request) { return new RequestHeaders($request->getMethod(), $request->getPath(), $request->getQuery(), $request->getHttpVersion(), $request->getHeaders()); }
/** * @param ReactRequest $reactRequest * * @return string */ private function transformRequestUri(ReactRequest $reactRequest) { $uri = $reactRequest->getPath(); if (array() !== ($query = (array) $reactRequest->getQuery())) { $uri .= '?' . http_build_query($query, '', $this->argSeparator, PHP_QUERY_RFC3986); } return $uri; }
protected function prepareEnvironment(\React\Http\Request $request) { $_SERVER = $this->baseServer; $_SERVER['REQUEST_METHOD'] = $request->getMethod(); $_SERVER['REQUEST_TIME'] = (int) microtime(true); $_SERVER['REQUEST_TIME_FLOAT'] = microtime(true); $_SERVER['QUERY_STRING'] = http_build_query($request->getQuery()); foreach ($request->getHeaders() as $name => $value) { $_SERVER['HTTP_' . strtoupper(str_replace('-', '_', $name))] = $value; } //We receive X-PHP-PM-Remote-IP from ProcessManager. //This header is only used to proxy the remoteAddress from master -> slave. $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_PHP_PM_REMOTE_IP']; unset($_SERVER['HTTP_X_PHP_PM_REMOTE_IP']); $_SERVER['SERVER_NAME'] = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : ''; $_SERVER['REQUEST_URI'] = $request->getPath(); $_SERVER['DOCUMENT_ROOT'] = isset($_ENV['DOCUMENT_ROOT']) ? $_ENV['DOCUMENT_ROOT'] : getcwd(); $_SERVER['SCRIPT_NAME'] = isset($_ENV['SCRIPT_NAME']) ? $_ENV['SCRIPT_NAME'] : 'index.php'; $_SERVER['SCRIPT_FILENAME'] = rtrim($_SERVER['DOCUMENT_ROOT'], '/') . '/' . $_SERVER['SCRIPT_NAME']; }
protected function prepareEnvironment(\React\Http\Request $request) { $_SERVER['REQUEST_METHOD'] = $request->getMethod(); $_SERVER['REQUEST_TIME'] = (int) microtime(true); $_SERVER['REQUEST_TIME_FLOAT'] = microtime(true); $_SERVER['QUERY_STRING'] = http_build_query($request->getQuery()); foreach ($request->getHeaders() as $name => $value) { $_SERVER['HTTP_' . strtoupper(str_replace('-', '_', $name))] = $value; } $_SERVER['REMOTE_ADDR'] = @$request->remoteAddress; $_SERVER['SERVER_NAME'] = @$_SERVER['HTTP_HOST']; $_SERVER['REQUEST_URI'] = $request->getPath(); $_SERVER['DOCUMENT_ROOT'] = @$_ENV['DOCUMENT_ROOT'] ?: getcwd(); $_SERVER['SCRIPT_NAME'] = @$_ENV['SCRIPT_NAME'] ?: 'index.php'; $_SERVER['SCRIPT_FILENAME'] = $_SERVER['DOCUMENT_ROOT'] . $_SERVER['SCRIPT_NAME']; }
/** * Convert react request into symfony request. * * @param ReactRequest $request * * @return SymfonyRequest */ public function convertRequest(ReactRequest $request) { return SymfonyRequest::create($request->getPath(), $request->getMethod(), $request->getQuery(), $this->extractCookies($request), $this->extractFiles($request), $this->extractServer($request), ''); }
public function prepare(reactRequest $request, reactResponse $response, $output) { static $serverSoftware, $settings; if ($serverSoftware === null) { $serverSoftware = 'MPCMF Async PHP ' . phpversion(); $settings = ['document_root' => APP_ROOT . '/htdocs']; } $_SERVER = []; $now = microtime(true); $_SERVER['REQUEST_TIME'] = (int) $now; $_SERVER['REQUEST_TIME_FLOAT'] = $now; $GLOBALS['MPCMF_START_TIME'] = $now; /** @var Uri $requestUrl */ $requestUrl = $request->getUrl(); $path = $requestUrl->getPath(); if ($path === '/favicon.ico') { $response->writeHead(404); $response->end('FAVICON NOT FOUND! :)'); //MPCMF_DEBUG && $output->writeln("<info>[CHILD:{$this->port}]</info> Connection closed by favicon catch"); return false; } $realpath = realpath($settings['document_root'] . $path); if ($realpath !== false && strpos($realpath, $settings['document_root']) !== false && (file_exists($realpath) && !is_dir($realpath))) { $response->writeHead(200, ['Content-type' => \GuzzleHttp\Psr7\mimetype_from_filename($realpath), 'Content-length' => filesize($realpath)]); $response->end(file_get_contents($realpath)); //MPCMF_DEBUG && $output->writeln("<info>[CHILD:{$this->port}]</info> Connection closed by static"); return false; } $_FILES = []; foreach ($request->getFiles() as $filename => $fileData) { $tmpname = tempnam('/tmp/mpcmf/', 'upl'); file_put_contents($tmpname, stream_get_contents($fileData['stream'])); $_FILES[$filename] = ['name' => $filename, 'type' => $fileData['type'], 'tmp_name' => $tmpname, 'error' => $fileData['error'], 'size' => $fileData['size']]; } $_SERVER['DOCUMENT_ROOT'] = $settings['document_root']; $_SERVER['REMOTE_ADDR'] = $request->getRemoteAddress(); $_SERVER['REMOTE_PORT'] = 0; $_SERVER['SERVER_SOFTWARE'] = $serverSoftware; $_SERVER['SERVER_PROTOCOL'] = "HTTP/{$request->getHttpVersion()}"; $_SERVER['SERVER_NAME'] = $this->childHost; $_SERVER['SERVER_PORT'] = $this->port; $path = $requestUrl->getPath(); $queryString = $requestUrl->getQuery(); $_SERVER['REQUEST_URI'] = $path . (!empty($queryString) ? "?{$queryString}" : ''); $_SERVER['REQUEST_METHOD'] = mb_strtoupper($request->getMethod()); $_SERVER['SCRIPT_NAME'] = '/'; $_SERVER['SCRIPT_FILENAME'] = __FILE__; $_SERVER['PATH_INFO'] = $path; $_SERVER['PHP_SELF'] = $path; $headers = $request->getHeaders(); foreach ($headers as $headerKey => $headerValue) { $_SERVER['HTTP_' . strtoupper(preg_replace('/[\\-\\s]/', '_', $headerKey))] = $headerValue; } if (isset($_SERVER['HTTP_X_REAL_IP'])) { $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_REAL_IP']; } $_SERVER['QUERY_STRING'] = $queryString; //@todo remove on pull request merge https://github.com/reactphp/http/pull/34 $_GET = $request->getQuery(); $_POST = $request->getPost(); parse_str($queryString, $parsedGET); parse_str($request->getBody(), $parsedPOST); $_GET = array_replace($_GET, $parsedGET); $_POST = array_replace($_POST, $parsedPOST); if (isset($_SERVER['HTTP_COOKIE'])) { parse_str($_SERVER['HTTP_COOKIE'], $_COOKIE); } else { $_COOKIE = []; } $_REQUEST = array_merge($_GET, $_POST); return true; }