Gzip ve Cache PHP Code

3 Cevap

İşte benim PHP Code

$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";

Ben temelde sonsuza (istemci tarafında) içeriği önbelleğe gibi onu gziplemek istiyorum. Ancak yukarıdaki iyi yolu ise emin değilim. Ben herhangi bir üçüncü taraf komut dosyalarını kullanmak istemiyorum. Müvekkilim tarafı yeterince başlıkları önbelleğe? Ben daha eklemek gerekiyor mu? Ayrıca, bu (sunucuda açıksa) Apache yerli Gzip Sıkıştırma ile müdahale edecek - bu kez gziplemek olacak?

Zaman ayırdığınız için teşekkür ederiz.

3 Cevap

Kullanıcıların tarayıcı uyumlu GZ ise ob_gzhandler otomatik olarak algılar.

Ayrıca otomatik başlıklarını değiştirmek olacaktır.

Apache mod_deflate veya mod_gzip çalışıyorsa eğer tespit olmaz (ve kim sizin zaten Apache kullanarak söylüyor!)

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;

Eğer root erişiminiz varsa, php.ini düzenleyebilir ve otomatik olarak php sayfaları gziplemek için aşağıdaki ekleyin.

zlib.output_compression = On
zlib.output_compression_level = 1

Daha sonra, gerçek php sayfası olabilir:

<?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';
?>

Bu dönecektir büyük bir anlaşma ama ob_start ('ob_gzhandler') değil müşterinin tarayıcı gzip kodlamasını desteklemiyor, bu yüzden kullanıcı aracısı testleri ortadan eğer (çıkış tamponlama açmak değil) yanlış.