代码之家  ›  专栏  ›  技术社区  ›  Andrei Herford

在Symfony 2中使用gzip/compression而不使用mod\u deflate

  •  2
  • Andrei Herford  · 技术社区  · 8 年前

    Symfony 2.8 在不同服务器上运行的项目。它希望使用压缩来更快地加载。我找到的所有资源都指向 mod_deflate 但是,虽然第一台服务器不提供 第二台服务器根本无法使用 虽然 FastCGI 已启用。

    我只找到了可以在服务器内实现压缩的信息(

    在Symfony中不使用 mod_放气

    1 回复  |  直到 8 年前
        1
  •  7
  •   Max P.    8 年前

    kernel.response 事件:

    namespace AppBundle\EventListener;
    
    use Symfony\Component\EventDispatcher\EventSubscriberInterface;
    use Symfony\Component\HttpKernel\KernelEvents;
    use Symfony\Component\HttpKernel\HttpKernelInterface;
    
    class CompressionListener implements EventSubscriberInterface
    {
        public static function getSubscribedEvents()
        {
            return array(
                KernelEvents::RESPONSE => array(array('onKernelResponse', -256))
            );
        }
    
        public function onKernelResponse($event)
        {
            //return;
    
            if ($event->getRequestType() != HttpKernelInterface::MASTER_REQUEST) {
                return;
            }
    
            $request = $event->getRequest();
            $response = $event->getResponse();
            $encodings = $request->getEncodings();
    
            if (in_array('gzip', $encodings) && function_exists('gzencode')) {
                $content = gzencode($response->getContent());
                $response->setContent($content);
                $response->headers->set('Content-encoding', 'gzip');
            } elseif (in_array('deflate', $encodings) && function_exists('gzdeflate')) {
                $content = gzdeflate($response->getContent());
                $response->setContent($content);
                $response->headers->set('Content-encoding', 'deflate');
            }
        }
    }
    

    并在配置中注册此侦听器:

    app.listener.compression:
        class: AppBundle\EventListener\CompressionListener
        arguments:
        tags:
            - { name: kernel.event_subscriber }
    
    推荐文章