2015-07-20 141 views
3

如何在Yii2中啓用gzip壓縮?如何在Yii2中啓用gzip壓縮

我試圖在網絡/ 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(); 
+0

我認爲這是一個與這一個重複:http://stackoverflow.com/questions/10975908/yii-compress-your-application-output-using-gzip –

+0

,一個是以前的版本Yii 1.x,它不適用於Yii 2.X – Harris

回答

4

不知道這是最好的做法,但我把它通過對警予附加事件處理工作\網絡\響應

$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(); 
1

它是更好的主意,你可以在任何地方(在控制器或動作等)使用它:

\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(); 
    } 
);