2012-09-21 54 views
4

形勢如何通過PHP提供以前的GZipped緩存HTML文件?

我有一個緩存爲我的網站開發,其中我現在檢查每個頁面請求,看看是否有是頁面的靜態,緩存的版本,然後,如果瀏覽器的支持,我gzip壓縮的頁面和手它回到瀏覽器。

目前代碼

$hash = md5('http://mydomain.com'.$url); 
$fl = substr($url, 1, 1); 
if(file_exists('/home/myaccount/public_html/cache/'.$fl.'/'.$hash.'.html') && $_GET['cache'] != 'off' && $fl!=''): 
    ob_start("ob_gzhandler"); 
    header('Content-type: text/html; charset=utf-8'); 
    include 'cache/'.$fl.'/'.$hash.'.html'; 
elseif(file_exists('/home/myaccount/public_html/cache/'.$hash.'.html') && $_GET['cache'] != 'off'): 
    ob_start("ob_gzhandler"); 
    header('Content-type: text/html; charset=utf-8'); 
    include 'cache/'.$hash.'.html'; 
else: 
    $_SERVER['REQUEST_URI'] = str_replace('?cache=off','',$_SERVER['REQUEST_URI']); 
    include 'interface/index.php'; 
endif; 

預期變化

我想改變它,這樣在服務器上的文件已經gzip壓縮。我已經知道如何gzip文件並將它們設置在服務器上。但是,我想知道如何修改腳本的這部分內容,以便檢查瀏覽器是否支持gzip,然後簡單地將它們交給gzip版本的文件。如果不支持,它將解壓縮並將其交回服務器。

目的

這將完成幾件事情。首先,它將使用更少的服務器空間來存儲文件。其次,由於大多數瀏覽器都會接受gzip格式,因此無需在每個頁面請求上對它們進行gzip處理,從而縮短了幾毫秒的時間。相反,它只需要爲非常少的不受支持的瀏覽器解壓文件。第三,這是一個瞭解更多關於php如何處理gzip文件的機會。

回答

1

我能夠找出答案。這裏是任何有興趣的人:

$hash = md5('http://mydomain.com'.$url); 
$fl = substr($url, 1, 1); 
if(file_exists('/home/myaccount/public_html/cache/'.$fl.'/'.$hash.'.html.gz') && $_GET['cache'] != 'off' && $fl!=''): 
    if (strstr($HTTP_SERVER_VARS['HTTP_ACCEPT_ENCODING'], "gzip")): 
     header("X-Compression: gzip"); 
     header("Content-Encoding: gzip"); 
     readfile('cache/'.$fl.'/'.$hash.'.html.gz'); 
    else: 
     $gz = gzopen ('cache/'.$fl.'/'.$hash.'.html.gz', "r"); 
     $contents = gzread ($gz, 1000000); 
     echo $contents; 
    endif; 
elseif(file_exists('/home/myaccount/public_html/cache/'.$hash.'.html.gz') && $_GET['cache'] != 'off'): 
    if (strstr($HTTP_SERVER_VARS['HTTP_ACCEPT_ENCODING'], "gzip")): 
     header("X-Compression: gzip"); 
     header("Content-Encoding: gzip"); 
     readfile('cache/'.$hash.'.html.gz'); 
    else: 
     $gz = gzopen ('cache/'.$hash.'.html.gz', "r"); 
     $contents = gzread ($gz, 1000000); 
     echo $contents; 
    endif; 
else: 
    $_SERVER['REQUEST_URI'] = str_replace('?cache=off','',$_SERVER['REQUEST_URI']); 
    include 'interface/index.php'; 
endif; 
0

我只看到第三個原因足以在php中實現這個東西,但是你應該自己發現解決方案。

至於前兩個原因,阿帕奇有兩種選擇:

  • mod_negotiation可用於發送,gzip壓縮前的文件,而不是 其未壓縮版本的支持客戶端
  • mod_deflate可能用於對不支持壓縮傳輸編碼的客戶端輸出 流進行解壓縮(充氣)
相關問題