Gzip и Cache PHP Code - PullRequest
       34

Gzip и Cache PHP Code

1 голос
/ 05 октября 2009

Вот мой код PHP

$phpver = phpversion();

$useragent = (isset($_SERVER["HTTP_USER_AGENT"]) ) ? $_SERVER["HTTP_USER_AGENT"] : $HTTP_USER_AGENT;
$do_gzip_compress = FALSE;

if ($phpver >= '4.0.4pl1' && (strstr($useragent,'compatible') || strstr($useragent,'Gecko'))) {
    if (extension_loaded('zlib')) {
        ob_start('ob_gzhandler');
    }
} 

header('Content-type: text/javascript;charset=utf-8');
header('Expires: '.gmdate("D, d M Y H:i:s", time() + 3600*24*365).' GMT');

echo "TEST";

Я в основном хочу кешировать контент (на стороне клиента) навсегда, а также gzip. Однако я не уверен, что вышесказанное - лучший способ. Я не хочу использовать какие-либо сторонние скрипты. Достаточно ли кэширования заголовков моего клиента? Мне нужно добавить больше? Кроме того, будет ли это мешать встроенному gzip-архиву Apache (который включен на сервере) - дважды gzip?

Спасибо, что уделили время.

Ответы [ 3 ]

1 голос
/ 14 октября 2009

ob_gzhandler автоматически обнаружит, совместим ли браузер пользователей с gz.

Это также автоматически изменит ваши заголовки.

Он не обнаружит, работает ли apache mod_deflate или mod_gzip (и кто в любом случае говорит, что вы используете Apache!)

if(!ob_start("ob_gzhandler")) ob_start();

/* insert code here then flush the buffer to $buffer */

    $cacheTime = time(); // or the file date of your static file

    $gmt_mtime = gmdate('D, d M Y H:i:s', $cacheTime ) . ' GMT';
    header("Content-type: text/css; charset=utf-8");
    header("Last-Modified: " . $gmt_mtime ,true);
    header('Content-Length: ' . strlen($buffer),true);
    header("Expires: " . gmdate("D, d M Y H:i:s", $cacheTime + $seconds) . " GMT",true);
    header("Cache-Control: no-store, no-cache, must-revalidate, proxy-revalidate",true);
    header("Cache-Control: post-check=0, pre-check=0", FALSE);

echo $buffer;
0 голосов
/ 12 октября 2009

Это не имеет большого значения, но ob_start ('ob_gzhandler') вернет false (и не включит буферизацию вывода), если браузер клиента не поддерживает кодировку gzip, поэтому вы можете отменить тесты пользовательского агента.

0 голосов
/ 09 октября 2009

Если у вас есть root-доступ, отредактируйте php.ini и добавьте следующее, чтобы автоматически сжать ваши php-страницы.

zlib.output_compression = On
zlib.output_compression_level = 1

тогда ваша фактическая php-страница может быть:

<?php
$expires = 3600*24*365;
header("Cache-Control: maxage=".$expires);
header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$expires) . ' GMT');

echo 'test';
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...