1. Comparison of HTTP output using compression and without compression
2. Enable gzip
Use apache mod_deflate module to enable gzip
How to activate:
sudo a2enmod deflate sudo /etc/init.d/apache2 restart
Close method:
sudo a2dismod deflate sudo /etc/init.d/apache2 restart
3. Set the type of gzip compressed output
The output type of json is application/json, so it can be set like this
Add
<IfModule mod_deflate.c> AddOutputFilterByType DEFLATE application/json </IfModule>
<?php $data = array( array('name'=>'one','value'=>1), array('name'=>'two','value'=>2), array('name'=>'three','value'=>3), array('name'=>'four','value'=>4), array('name'=>'five','value'=>5), array('name'=>'six','value'=>6), array('name'=>'seven','value'=>7), array('name'=>'eight','value'=>8), array('name'=>'nine','value'=>9), array('name'=>'ten','value'=>10), ); header('content-type:application/json'); echo json_encode($data); ?>
Output before setting gzip:
Output after setting gzip:
4. A single json is output using gzip compression
After setting AddOutputFilterByType DEFLATE application/json, all data output in json format will be output using gzip compression.
If you only want to use gzip compression for a certain json, but not others, you can use the ob_start(); method.
First there is no need to set AddOutputFilterByType, then add ob_start('ob_gzhandler');
at the beginning of the code<?php ob_start('ob_gzhandler'); $data = array( array('name'=>'one','value'=>1), array('name'=>'two','value'=>2), array('name'=>'three','value'=>3), array('name'=>'four','value'=>4), array('name'=>'five','value'=>5), array('name'=>'six','value'=>6), array('name'=>'seven','value'=>7), array('name'=>'eight','value'=>8), array('name'=>'nine','value'=>9), array('name'=>'ten','value'=>10), ); header('content-type:application/json'); echo json_encode($data); ?>