压缩从Zend框架2的HTML输出(Compress html output from zend f

2019-09-19 01:05发布

我目前使用Zend Framework 2 beta版在PHP 5.4.4制定自学目的的个人Web应用程序。

我想知道是否有可能拦截之前它是为了通过去除一切不必要的空格来缩小它发送给浏览器的HTML输出。

我怎么能实现这个结果在ZF2?

Answer 1:

是的,你可以:

在Modle.php创建将触发完成事件

public function onBootstrap(Event $e)
{
    $app = $e->getTarget();
    $app->getEventManager()->attach('finish', array($this, 'doSomething'), 100);
}


public function doSomething ($e)
{
    $response = $e->getResponse();
    $content = $response->getBody();
    // do stuff here
    $response->setContent($content);

}


Answer 2:

只要把这两方法的任何module.php内。 这将gzip和发送压缩出来投入到浏览器。

 public function onBootstrap(MvcEvent $e)
{
    $eventManager = $e->getApplication()->getEventManager();
    $eventManager->attach("finish", array($this, "compressOutput"), 100);
}

public function compressOutput($e)
    {
        $response = $e->getResponse();
        $content = $response->getBody();
        $content = preg_replace(array('/\>[^\S ]+/s', '/[^\S ]+\</s', '/(\s)+/s', '#(?://)?<![CDATA[(.*?)(?://)?]]>#s'), array('>', '<', '\\1', "//&lt;![CDATA[n" . '1' . "n//]]>"), $content);

        if (@strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false) {
            header('Content-Encoding: gzip');
            $content = gzencode($content, 9);
        }

        $response->setContent($content);
    }


文章来源: Compress html output from zend framework 2