Альтернативный веб-сервер Apache
Во-первых, если вы используете Веб-сервер Apache , возможно, вы захотите включить и настроить mod_deflate .Он будет обрабатывать сжатие содержимого перед отправкой его клиенту.
Альтернатива PHP # 1
Если нет, то вы можете использовать ob_gzhandler (PHP 4> = 4.0.4, PHP 5) для активации буфера вывода gzip.
if(!ob_start("ob_gzhandler")) ob_start();
echo $json;
Альтернатива PHP # 2
Другая возможность (не тестировалась)может кэшировать содержимое на диске, а не помещать содержимое gzip в базу данных, если они чаще используются в несжатом формате.Использование gzencode .
$json = array('id' => $id, 'content' => $content);
$file = '/tmp/' . $json['id'] . '.json';
if(!file_exists($file)) {
$gzip = gzencode($json['content']);
file_put_contents($file, $gzip);
} else {
$gzip = file_get_contents($file);
}
header('Content-Encoding: gzip');
header('Content-Length: '.strlen($gzip));
echo $gzip;
Этот способ может работать для вывода только сжатого содержимого и может работать не во всех браузерах.
Альтернатива PHP #2.5
Вывод сжатого содержимого из кэша диска, когда браузер принимает его только.
$json = array('id' => $id, 'content' => $content);
if( strpos($_SERVER["HTTP_ACCEPT_ENCODING"],'gzip') !== false ) {
$file = '/tmp/' . $json['id'] . '.json';
if(!file_exists($file)) {
$gzip = gzencode($json['content']);
file_put_contents($file, $gzip);
} else {
$gzip = file_get_contents($file);
}
header('Content-Encoding: gzip');
header('Content-Length: '.strlen($gzip));
echo $gzip;
} else {
echo $json['content'];
}