2009-10-05 61 views
1

這是我的PHP代碼gzip和緩存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壓縮它。不過,我不確定上述是否是最好的方法。我不想使用任何第三方腳本。我的客戶端緩存頭是否足夠?我需要添加更多嗎?此外,這是否會干擾Apache的本機gzip(已打開服務器) - 是否會gzip兩次?

謝謝你的時間。

+0

它應該是跨瀏覽器,我認爲有時一個空白頁出現在由於某些瀏覽器到gzip。 – 2009-10-05 14:17:30

+0

這是不值得額外的工作手動GZip的代碼;如果版本比4.0.4早,那麼主機需要升級以滿足自身利益,更不用說你的了。 – 2009-10-05 14:30:37

+0

許多主機在默認情況下沒有在其服務器上安裝mod_deflate等,這就是爲什麼我想要gzip。 – 2009-10-05 14:32:33

回答

1

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

如果您有root權限,請編輯php.ini並添加以下內容以自動g​​zip您的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'; 
?> 
0

這不是如果客戶端的瀏覽器一個大問題,但ob_start(「ob_gzhandler」)將返回false(而不是打開輸出緩衝)不支持gzip編碼,因此您可以消除用戶代理測試。