Сжатие кэшированного вывода с использованием выходных буферов PHP

Используя этот однострочный код ob_start('ob_gzhandler'); в верхней части страницы вывод PHP составлял около 11 кбайт в соответствии с консолью Chrome. Когда я попытался кэшировать вывод с помощью следующего кода, я обнаружил, что кэшированный файл был сохранен около 65 КБ. Является ли больший размер вывода компромиссом для кэширования? Есть ли способ сжать кешированный вывод дальше? Я попытался добавить некоторые правила htaccess для сжатия html, но я не думаю, что это помогает.

$id = $_GET["id"];
$cachefile ="cache/p_{$id}.html";
if (file_exists($cachefile)) {
 include($cachefile);
 echo "<!-- Cached ".date('jS F Y H:i', filemtime($cachefile))." -->";
 exit;
}
ob_start('ob_gzhandler');

$fp = fopen($cachefile, 'w'); // open the cache file for writing
fwrite($fp, ob_get_contents()); // save the contents of output buffer to the file
fclose($fp); // close the file
ob_end_flush(); 

1 ответ

Решение

Ваш кэшированный файл не был заархивирован сервером, попробуйте так:

ob_start('ob_gzhandler');
$id = $_GET["id"];
$cachefile ="cache/p_{$id}.html";
if (file_exists($cachefile)) {
    include($cachefile);
    echo "<!-- Cached ".date('jS F Y H:i', filemtime($cachefile))." -->";
} else {
    // your html or something else ...
    $fp = fopen($cachefile, 'w'); // open the cache file for writing
    fwrite($fp, ob_get_contents()); // save the contents of output buffer to the file
    fclose($fp); // close the file
}
ob_end_flush(); 

PS Я бы оставил эту задачу сжатия на веб-сервере ( nginx, apache).

Другие вопросы по тегам