程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> PHP網站程序中開啟Gzip壓縮的兩種方法

PHP網站程序中開啟Gzip壓縮的兩種方法

編輯:PHP綜合

gzip是一種網絡數據壓縮傳輸技巧,可以讓我們的帶寬省70%左右,可以大大加快網頁打開速度,不僅有利於用戶體驗,也能節約不少帶寬。一般apache、Nginx等在配置文件中就能開啟Gzip服務。下面我們來談談怎麼在php網站程序中開啟Gzip壓縮服務:

第一種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的升級版,可以將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”);   }   }   ?>

 

*
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved