/**
  * 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);
             }
         }
     }
 }
Beispiel #2
0
 /**
  * Returns the http response code
  *
  * @return int
  */
 public function getHttpResponseCode()
 {
     return appserver_get_http_response_code();
 }
Beispiel #3
0
 /**
  * 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));
 }