gzip是一種網絡數據壓縮傳輸技巧,可以讓我們的帶寬省70%左右,可以大大加快網頁打開速度,不僅有利於用戶體驗,也能節約不少帶寬。一般apache、Nginx等在配置文件中就能開啟Gzip服務。下面我們來談談怎麼在php網站程序中開啟Gzip壓縮服務:
1、在.htaccess 中添加如下代碼:
AddHandler application/x-httpd-php .css .html .js
#這是添加你要壓縮的類型
php_value auto_prepend_file “/home/a4284418/public_html/gzip.php”
#這是你給這些類型增加一個自動運行的php代碼,後面一定要填你空間的絕對地址
2、gzip.php,代碼如下: <?php ob_start(“ob_gzhandler”); ob_start(“compress”); $pathinfo = pathinfo($_SERVER[PHP_SELF]); switch ($pathinfo['extension']) { case “css” : header(“Content-type: text/css”); break; //52itbc.com case “html” : header(“Content-type: text/html”); break; case “js” : header(“Content-type: text/javascript”); break; default : break; } ?>
此種方案是gzip的升級版,可以將gzip的壓縮文件緩存下來,避免重復壓縮,
1、在.htaccess 中添加:
htaccess RewriteRule (.*.css$|.*.js$) gzip.php?$1 [L],
代碼如下:
<?php // htaccess RewriteRule (.*.css$|.*.js$) gzip.php?$1 [L] //項目根路徑 define(‘ABSPATH’, dirname(__FILE__).’/'); //Gzip壓縮開關 $cache = true; //存放gz文件的目錄,確保可寫 $cachedir = ‘gzip-cache/’; if (!is_dir(ABSPATH.$cachedir)) { mkdir(ABSPATH.$cachedir); } //判斷是否支持gzip $gzip = strstr($_SERVER['HTTP_ACCEPT_ENCODING'], ‘gzip’); $deflate = strstr($_SERVER['HTTP_ACCEPT_ENCODING'], ‘deflate’); //看浏覽器是否支持gzip 否則就是 deflate,再就是 none $encoding = $gzip ? ‘gzip’ : ($deflate ? ‘deflate’ : ‘none’); if(!isset($_SERVER['QUERY_STRING'])) exit(); //$key=array_shift(explode(‘?’, $_SERVER['QUERY_STRING'])); //$key=str_replace(‘../’,”,$key); $key =basename($_SERVER['QUERY_STRING']); //文件的絕對路徑 $filename=ABSPATH.$_SERVER['QUERY_STRING']; $symbol=’^'; $rel_path=str_replace(ABSPATH,”,dirname($filename)); $namespace=str_replace(‘/’,$symbol,$rel_path); $cache_filename=ABSPATH.$cachedir.$namespace.$symbol.basename($filename).’.gz’;//生成gz文件路徑 $type=”Content-type: text/html”; //默認的類型信息 $pathInfo = pathinfo($filename); //根據後綴判斷文件類型信息 $ext = $pathInfo['extension']; switch ($ext){ case ‘css’: $type=”Content-type: text/css”; break; case ‘js’: $type=”Content-type: text/javascript”; break; default: exit(); } if($cache) { if(file_exists($cache_filename)) { //假如存在gz文件 $mtime = filemtime($cache_filename); $gmt_mtime = gmdate(‘D, d M Y H:i:s’, $mtime) . ‘ GMT’; //讀取gz文件輸出 $content = file_get_contents($cache_filename); header(“Last-Modified:” . $gmt_mtime); header(“Expires: “); header(“Cache-Control: “); header(“Pragma: “); header($type); header(“Tips: Normal Respond (Gzip)”); header(“Content-Encoding: gzip”); echo $content; }else if(file_exists($filename)) { //沒有對應的gz文件 $mtime = mktime(); $gmt_mtime = gmdate(‘D, d M Y H:i:s’, $mtime) . ‘ GMT’; $content = file_get_contents($filename);//讀取文件 $content = gzencode($content, 9, $gzip ? FORCE_GZIP : FORCE_DEFLATE);//壓縮文件內容 header(“Last-Modified:” . $gmt_mtime); header(“Expires: “); header(“Cache-Control: “); header(“Pragma: “); header($type); header(“Tips: Build Gzip File (Gzip)”); header (“Content-Encoding: ” . $encoding); header (‘Content-Length: ‘ . strlen($content)); if ($fp = fopen($cache_filename, ‘w’)) { //寫入gz文件,供下次使用 fwrite($fp, $content); fclose($fp); } echo $content; }else{ header(“HTTP/1.0 404 Not Found”); } }else { //處理不使用Gzip模式下的輸出。原理基本同上 if(file_exists($filename)) { $mtime = filemtime($filename); $gmt_mtime = gmdate(‘D, d M Y H:i:s’, $mtime) . ‘ GMT’; header(“Last-Modified:” . $gmt_mtime); header(“Expires: “); header(“Cache-Control: “); header(“Pragma: “); header($type); header(“Tips: Normal Respond”); $content = readfile($filename); echo $content; }else { header(“HTTP/1.0 404 Not Found”); } } ?>
*