【问题标题】:How to enable gzip compression in Yii2如何在 Yii2 中启用 gzip 压缩
【发布时间】:2015-07-20 12:05:57
【问题描述】:

如何在 Yii2 中启用 gzip 压缩?

我尝试在 web/index.php 中使用下面的代码,但它返回空

$application = new yii\web\Application($config);
$application->on(yii\web\Application::EVENT_BEFORE_REQUEST, function($event){
    ob_start("ob_gzhandler");
});
$application->on(yii\web\Application::EVENT_AFTER_REQUEST, function($event){
    ob_end_flush();
});
$application->run();

【问题讨论】:

标签: php gzip yii2


【解决方案1】:

不确定这是否是最佳实践,但我通过在 yii\web\Response 上附加事件处理程序使其工作

$application = new yii\web\Application($config);
$application->on(yii\web\Application::EVENT_BEFORE_REQUEST, function(yii\base\Event $event){
    $event->sender->response->on(yii\web\Response::EVENT_BEFORE_SEND, function($e){
        ob_start("ob_gzhandler");
    });
    $event->sender->response->on(yii\web\Response::EVENT_AFTER_SEND, function($e){
        ob_end_flush();
    });
});
$application->run();

【讨论】:

    【解决方案2】:

    这是一个更好的主意,你可以在任何地方使用它(比如在控制器或动作中):

    \yii\base\Event::on(
        \yii\web\Response::className(), 
        \yii\web\Response::EVENT_BEFORE_SEND, 
        function ($event) {
            ob_start("ob_gzhandler");
        }
    );
    
    \yii\base\Event::on(
        \yii\web\Response::className(), 
        \yii\web\Response::EVENT_AFTER_SEND, 
        function ($event) {
            ob_end_flush();
        }
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-15
      • 2013-12-29
      • 1970-01-01
      • 2014-09-26
      • 2018-08-20
      • 2013-01-08
      • 2013-05-05
      • 2011-10-11
      相关资源
      最近更新 更多