/** * Tries to load the requested file and adds the content to the response. * * @param \AppserverIo\Psr\Servlet\Http\HttpServletRequestInterface $servletRequest The request instance * @param \AppserverIo\Psr\Servlet\Http\HttpServletResponseInterface $servletResponse The response instance * * @return void */ public function doGet(HttpServletRequestInterface $servletRequest, HttpServletResponseInterface $servletResponse) { // load \Mage $this->load(); // init globals $this->initGlobals($servletRequest); // run \Mage and set content $servletResponse->appendBodyStream($this->run($servletRequest)); // add the status code we've caught from the legacy app $servletResponse->setStatusCode(appserver_get_http_response_code()); // add this header to prevent .php request to be cached $servletResponse->addHeader(Protocol::HEADER_EXPIRES, '19 Nov 1981 08:52:00 GMT'); $servletResponse->addHeader(Protocol::HEADER_CACHE_CONTROL, 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0'); $servletResponse->addHeader(Protocol::HEADER_PRAGMA, 'no-cache'); // set per default text/html mimetype $servletResponse->addHeader(Protocol::HEADER_CONTENT_TYPE, 'text/html'); // grep headers and set to response object foreach (appserver_get_headers(true) as $i => $h) { // set headers defined in sapi headers $h = explode(':', $h, 2); if (isset($h[1])) { // load header key and value $key = trim($h[0]); $value = trim($h[1]); // if no status, add the header normally if ($key === Protocol::HEADER_STATUS) { // set status by Status header value which is only used by fcgi sapi's normally $servletResponse->setStatusCode($value); } elseif ($key === Protocol::HEADER_SET_COOKIE) { $servletResponse->addHeader($key, $value, true); } else { $servletResponse->addHeader($key, $value); } } } }
/** * Returns the headers array * * @return array */ public function getHttpHeaders() { return appserver_get_headers(true); }
/** * Implements shutdown logic * * @return void */ public function shutdown() { // save last error if not exist if (!$this->lastError) { $this->lastError = error_get_last(); } // get php output buffer if (strlen($outputBuffer = ob_get_clean()) === 0) { $errorMessage = ''; if ($this->lastError['type'] === E_ERROR || $this->lastError['type'] === E_USER_ERROR) { $errorMessage = 'PHP Fatal error: ' . $this->lastError['message'] . ' in ' . $this->lastError['file'] . ' on line ' . $this->lastError['line']; } $outputBuffer = $errorMessage; } // set http response code set by scrip inclusion $this->httpResponseCode = appserver_get_http_response_code(); // set headers set by script inclusion $this->httpHeaders = appserver_get_headers(true); // set output buffer set by script inclusion $this->outputBuffer = $outputBuffer; }
/** * Does shutdown logic for worker if something breaks in process * * @return void */ public function shutdown() { // get refs to local vars $requestContext = $this->getRequestContext(); $connection = $this->getConnection(); $worker = $this->getWorker(); $request = $this->getParser()->getRequest(); $response = $this->getParser()->getResponse(); $response->init(); // check if connections is still alive if ($connection) { // call current fileahandler module's shutdown hook if exists if ($requestContext->hasServerVar(ServerVars::SERVER_HANDLER) && ($fileHandleModule = $this->getModule($requestContext->getServerVar(ServerVars::SERVER_HANDLER)))) { $fileHandleModule->process($request, $response, $requestContext, ModuleHooks::SHUTDOWN); } // check if filehandle module has not handled the shutdown and set the response state to dispatched // so do default shutdown / error handling for current worker process if (!$response->hasState(HttpResponseStates::DISPATCH)) { // set response code to 500 Internal Server Error $response->setStatusCode(appserver_get_http_response_code()); // add this header to prevent .php request to be cached $response->addHeader(Protocol::HEADER_EXPIRES, '19 Nov 1981 08:52:00 GMT'); $response->addHeader(Protocol::HEADER_CACHE_CONTROL, 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0'); $response->addHeader(Protocol::HEADER_PRAGMA, 'no-cache'); // get last error array $lastError = error_get_last(); // check if it was a fatal error if (!is_null($lastError) && $lastError['type'] === 1) { // set response code to 500 Internal Server Error $response->setStatusCode(500); $errorMessage = 'PHP Fatal error: ' . $lastError['message'] . ' in ' . $lastError['file'] . ' on line ' . $lastError['line']; $this->renderErrorPage(new \RuntimeException($errorMessage, 500)); } // grep headers and set to response object foreach (appserver_get_headers(true) as $i => $h) { // set headers defined in sapi headers $h = explode(':', $h, 2); if (isset($h[1])) { // load header key and value $key = trim($h[0]); $value = trim($h[1]); // if no status, add the header normally if ($key === Protocol::HEADER_STATUS) { // set status by Status header value which is only used by fcgi sapi's normally $response->setStatus($value); } else { $response->addHeader($key, $value); } } } } // send response before shutdown $this->sendResponse(); // close client connection $connection->close(); } // check if worker is given if ($worker) { // call shutdown process on worker to respawn $this->getWorker()->shutdown(); } }
public function prepareResponse(HttpServletRequestInterface $servletRequest, HttpServletResponseInterface $servletResponse) { error_log("Now in " . __METHOD__ . " handling request " . $servletRequest->getUri()); // load the session and persist the data from $_SESSION $session = $servletRequest->getSession(); if ($session != null && isset($_SESSION)) { foreach ($_SESSION as $namespace => $data) { if ($namespace !== 'identifier') { error_log("Now add data for session {$session->getId()} and namespace {$namespace}: " . PHP_EOL . var_export($data, true)); $session->putData($namespace, $data); } } } // add the status code we've caught from the legacy app $servletResponse->setStatusCode(appserver_get_http_response_code()); // add this header to prevent .php request to be cached $servletResponse->addHeader(Protocol::HEADER_EXPIRES, '19 Nov 1981 08:52:00 GMT'); $servletResponse->addHeader(Protocol::HEADER_CACHE_CONTROL, 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0'); $servletResponse->addHeader(Protocol::HEADER_PRAGMA, 'no-cache'); // set per default text/html mimetype $servletResponse->addHeader(Protocol::HEADER_CONTENT_TYPE, 'text/html'); error_log("============= RESPONSE before appserver_get_headers(true) ================="); error_log(var_export($servletResponse, true)); // grep headers and set to response object foreach (appserver_get_headers(true) as $i => $h) { // set headers defined in sapi headers $h = explode(':', $h, 2); if (isset($h[1])) { // load header key and value $key = trim($h[0]); $value = trim($h[1]); // if no status, add the header normally if ($key === Protocol::HEADER_STATUS) { // set status by Status header value which is only used by fcgi sapi's normally $servletResponse->setStatus($value); } elseif ($key === Protocol::HEADER_SET_COOKIE) { $servletResponse->addHeader($key, $value, true); } else { $servletResponse->addHeader($key, $value); } } } error_log("============= RESPONSE after appserver_get_headers(true) ================="); error_log(var_export($servletResponse, true)); }