Пример #1
0
 /**
  * {@inheritDoc}
  */
 public function terminate(HttpRequest $request, HttpResponse $response)
 {
     $this->dispatcher->notify(new SendResponseEvent($request, self::MASTER_REQUEST, $response, $this));
     while (ob_get_level() > 1) {
         ob_end_flush();
     }
     $buffer = ob_get_level() ? ob_get_clean() : '';
     ini_set('default_mimetype', NULL);
     ini_set('default_charset', NULL);
     if ($response->hasEntity() && !$request->isHead()) {
         if ('gzip' == strtolower($response->getHeader('Content-Encoding', ''))) {
             ini_set('zlib.output_compression_level', 1);
             ini_set('zlib.output_compression', 4096);
         } else {
             ob_start(NULL, 4096);
         }
     }
     foreach ($response->getHeaders() as $n => $headers) {
         switch ($n) {
             case 'server':
             case 'connection':
             case 'content-length':
             case 'content-encoding':
             case 'transfer-encoding':
                 continue 2;
         }
         foreach ($headers as $index => $header) {
             header(sprintf('%s: %s', $header[0], $header[1]), $index == 0);
         }
     }
     $statusLine = sprintf('%s %u %s', $response->getProtocol(), $response->getStatus(), $response->getReason());
     header($statusLine, true, $response->getStatus());
     if ($response->hasEntity() && !$request->isHead()) {
         $stream = new UrlStream('php://output', 'wb');
         try {
             $response->getEntity()->send($stream);
         } finally {
             $stream->close();
         }
     }
     if (function_exists('fastcgi_finish_request')) {
         @fastcgi_finish_request();
     }
     $event = new TerminateEvent($request, self::MASTER_REQUEST, $response, $this);
     $event->bufferedContent = $buffer;
     $this->dispatcher->notify($event);
 }