public function doRequestInProcess($request)
{
if ($this->mockedResponse) {
$response = $this->mockedResponse;
$this->mockedResponse = null;
return $response;
}
$requestCookie = $request->getCookies();
$requestServer = $request->getServer();
$requestFiles = $this->remapFiles($request->getFiles());
$parseResult = parse_url($request->getUri());
$uri = $parseResult["path"];
if (array_key_exists("query", $parseResult)) {
$uri .= "?" . $parseResult["query"];
}
$requestRequestArray = $this->remapRequestParameters($request->getParameters());
$requestServer['REQUEST_METHOD'] = strtoupper($request->getMethod());
$requestServer['REQUEST_URI'] = $uri;
$requestServer['HTTP_HOST'] = $this->domain;
$requestServer['SERVER_PROTOCOL'] = 'HTTP/1.1';
$this->index = $this->uriToIndexMapper->getIndexForUri($uri);
$phpSelf = str_replace($this->rootFolder, '', $this->index);
$requestServer['PHP_SELF'] = $phpSelf;
$env = ['headers' => $this->headers, 'cookie' => $requestCookie, 'server' => $requestServer, 'files' => $requestFiles, 'request' => $requestRequestArray];
if (strtoupper($request->getMethod()) == 'GET') {
$env['get'] = $env['request'];
} else {
$env['post'] = $env['request'];
}
$requestScript = dirname(dirname(__DIR__)) . '/scripts/request.php';
$command = PHP_BINARY . ' ' . escapeshellarg($requestScript) . ' ' . escapeshellarg($this->index) . ' ' . escapeshellarg(base64_encode(serialize($env)));
$process = new Process($command);
$process->run();
$rawProcessOutput = $process->getOutput();
$unserializedResponse = unserialize(base64_decode($rawProcessOutput));
$_SERVER = empty($unserializedResponse['server']) ? [] : $unserializedResponse['server'];
$_FILES = empty($unserializedResponse['files']) ? [] : $unserializedResponse['files'];
$_REQUEST = empty($unserializedResponse['request']) ? [] : $unserializedResponse['request'];
$_GET = empty($unserializedResponse['get']) ? [] : $unserializedResponse['get'];
$_POST = empty($unserializedResponse['post']) ? [] : $unserializedResponse['post'];
$content = $unserializedResponse['content'];
$headers = $this->replaceSiteUrlDeep($unserializedResponse['headers'], $this->url);
$response = new Response($content, $unserializedResponse['status'], $headers);
return $response;
}