コード例 #1
0
ファイル: HttpRequest.php プロジェクト: cinnamonlab/ReactHttp
 /**
  * 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);
 }
コード例 #2
0
 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>");
 }
コード例 #3
0
ファイル: Application.php プロジェクト: pwhelan/espresso
 /**
  * @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;
 }
コード例 #4
0
ファイル: Request.php プロジェクト: im286er/ent
 /**
  * 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()));
 }
コード例 #5
0
ファイル: RunCommand.php プロジェクト: erpk/harserver
 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());
 }
コード例 #6
0
ファイル: ReactServer.php プロジェクト: gonzalo123/httpserver
 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);
     }
 }
コード例 #7
0
ファイル: RequestParser.php プロジェクト: marcj/php-pm
 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());
 }
コード例 #8
0
 /**
  * @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'];
 }
コード例 #9
0
 /**
  * @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;
 }
コード例 #10
0
ファイル: Request.php プロジェクト: mbarquin/reactphp-slim
 /**
  * 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);
 }
コード例 #11
0
ファイル: DrupalKernel.php プロジェクト: php-pm/php-pm-drupal
 /**
  * {@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;
 }
コード例 #12
0
ファイル: ReactKernel.php プロジェクト: itscaro/react-bundle
 /**
  * @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;
 }
コード例 #13
0
 /**
  * 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);
 }
コード例 #14
0
 /**
  * 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];
 }
コード例 #15
0
 /**
  * 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;
 }
コード例 #16
0
 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);
 }
コード例 #17
0
ファイル: Processor.php プロジェクト: naroga/foreman
 /**
  * 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());
 }
コード例 #18
0
ファイル: Server.php プロジェクト: tritumRz/rest
 /**
  * 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);
 }
コード例 #19
0
 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";
 }
コード例 #20
0
 /**
  * @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);
 }
コード例 #21
0
 /**
  * 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;
 }
コード例 #22
0
ファイル: Server.php プロジェクト: light-gun/framework
 /**
  * @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;
 }
コード例 #23
0
 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);
 }
コード例 #24
0
ファイル: ReactPhpServer.php プロジェクト: mcustiel/phiremock
 private function getUriFromRequest(ReactRequest $request)
 {
     $query = $request->getQuery();
     return 'http://localhost/' . $request->getPath() . (empty($query) ? '' : '?' . http_build_query($query));
 }
コード例 #25
0
ファイル: RequestHeaders.php プロジェクト: AlexSJ/phluid-php
 public static function fromHttpRequest(HttpRequest $request)
 {
     return new RequestHeaders($request->getMethod(), $request->getPath(), $request->getQuery(), $request->getHttpVersion(), $request->getHeaders());
 }
コード例 #26
0
 /**
  * @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;
 }
コード例 #27
0
ファイル: ProcessSlave.php プロジェクト: php-pm/php-pm
 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'];
 }
コード例 #28
0
ファイル: ProcessSlave.php プロジェクト: marcj/php-pm
 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'];
 }
コード例 #29
0
ファイル: RequestBridge.php プロジェクト: KEIII/react-silex
 /**
  * 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), '');
 }
コード例 #30
0
ファイル: run.php プロジェクト: mpcmf/mpcmf-web
 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;
 }