PHP网站程序中开启Gzip压缩的两种方法

WBOY
Release: 2016-06-20 13:04:28
Original
1055 people have browsed it

gzip是一种网络数据压缩传输技巧,可以让我们的带宽省70%左右,可以大大加快网页打开速度,不仅有利于用户体验,也能节约不少带宽。一般apache、Nginx等在配置文件中就能开启Gzip服务。下面我们来谈谈怎么在php网站程序中开启Gzip压缩服务:

第一种Gzip压缩方案

1、在.htaccess 中添加如下代码:

<p>AddHandler application/x-httpd-php .css .html .js <br /></p><p> #这是添加你要压缩的类型  <br /></p><p>php_value auto_prepend_file “/home/a4284418/public_html/gzip.php” <br /></p><p> #这是你给这些类型增加一个自动运行的php代码,后面一定要填你空间的绝对地址 </p>
Copy after login


2、gzip.php,代码如下:

<p><?php <br /></p><p>ob_start(“ob_gzhandler”); <br /></p><p>ob_start(“compress”); <br /></p><p>$pathinfo = pathinfo($_SERVER[PHP_SELF]); <br /></p><p>switch ($pathinfo['extension']) { <br /></p><p>case “css” : <br /></p><p>header(“Content-type: text/css”); <br /></p><p>break;  //scutephp.com</p><p> case “html” : <br /></p><p>header(“Content-type: text/html”); <br /></p><p>break; <br /></p><p>case “js” : <br /></p><p>header(“Content-type: text/javascript”); <br /></p><p>break; <br /></p><p>default : <br /></p><p>break;</p><p> } <br /></p><p>?></p>
Copy after login

第二种Gzip压缩方案

此种方案是gzip的升级版,可以将gzip的压缩文件缓存下来,避免重复压缩,

1、在.htaccess 中添加:

htaccess RewriteRule (.*.css$|.*.js$) gzip.php?$1 [L],

代码如下:

<p><?php <br /></p><p>// htaccess <br /></p><p>RewriteRule (.*.css$|.*.js$) gzip.php?$1 [L] //项目根路径 <br /></p><p>define(‘ABSPATH’, dirname(__FILE__).’/'); //Gzip压缩开关 <br /></p><p>$cache = true; //存放gz文件的目录,确保可写</p><p>$cachedir = ‘gzip-cache/’;</p><p>if (!is_dir(ABSPATH.$cachedir)) { <br /></p><p>mkdir(ABSPATH.$cachedir); } //判断是否支持gzip <br /></p><p>$gzip = strstr($_SERVER['HTTP_ACCEPT_ENCODING'], ‘gzip’);</p><p>$deflate = strstr($_SERVER['HTTP_ACCEPT_ENCODING'], ‘deflate’); //看浏览器是否支持gzip 否则就是 deflate,再就是 none <br /></p><p>$encoding = $gzip ? ‘gzip’ : ($deflate ? ‘deflate’ : ‘none’); <br /></p><p>if(!isset($_SERVER['QUERY_STRING'])) exit(); <br /></p><p>//$key=array_shift(explode(‘?’, $_SERVER['QUERY_STRING'])); <br /></p><p>//$key=str_replace(‘../’,”,$key); <br /></p><p>$key =basename($_SERVER['QUERY_STRING']); //文件的绝对路径 <br /></p><p>$filename=ABSPATH.$_SERVER['QUERY_STRING']; <br /></p><p>$symbol=’^'; $rel_path=str_replace(ABSPATH,”,dirname($filename)); <br /></p><p>$namespace=str_replace(‘/’,$symbol,$rel_path); <br /></p><p>$cache_filename=ABSPATH.$cachedir.$namespace.$symbol.basename($filename).’.gz’;//生成gz文件路径 <br /></p><p>$type=”Content-type: text/html”; //默认的类型信息 <br /></p><p>$pathInfo = pathinfo($filename); //根据后缀判断文件类型信息 <br /></p><p>$ext = $pathInfo['extension']; <br /></p><p>switch ($ext){ <br /></p><p>case ‘css’: <br /></p><p>$type=”Content-type: text/css”; break; case ‘js’: <br /></p><p>$type=”Content-type: text/javascript”; <br /></p><p>break; <br /></p><p>default: <br /></p><p>exit(); <br /></p><p>} <br /></p><p>if($cache) { <br /></p><p>if(file_exists($cache_filename)) { //假如存在gz文件 <br /></p><p>$mtime = filemtime($cache_filename); <br /></p><p>$gmt_mtime = gmdate(‘D, d M Y H:i:s’, $mtime) . ‘ GMT’; //读取gz文件输出 <br /></p><p>$content = file_get_contents($cache_filename); <br /></p><p>header(“Last-Modified:” . $gmt_mtime); <br /></p><p>header(“Expires: “); header(“Cache-Control: “); <br /></p><p>header(“Pragma: “); <br /></p><p>header($type); <br /></p><p>header(“Tips: Normal Respond (Gzip)”); <br /></p><p>header(“Content-Encoding: gzip”); <br /></p><p>echo $content; <br /></p><p>}else if(file_exists($filename)) { //没有对应的gz文件 <br /></p><p>$mtime = mktime(); <br /></p><p>$gmt_mtime = gmdate(‘D, d M Y H:i:s’, $mtime) . ‘ GMT’; <br /></p><p>$content = file_get_contents($filename);//读取文件 <br /></p><p>$content = gzencode($content, 9, $gzip ? FORCE_GZIP : FORCE_DEFLATE);//压缩文件内容 <br /></p><p>header(“Last-Modified:” . $gmt_mtime); <br /></p><p>header(“Expires: “); <br /></p><p>header(“Cache-Control: “); <br /></p><p>header(“Pragma: “); <br /></p><p>header($type); <br /></p><p>header(“Tips: Build Gzip File (Gzip)”); header (“Content-Encoding: ” . $encoding); <br /></p><p>header (‘Content-Length: ‘ . strlen($content)); if ($fp = fopen($cache_filename, ‘w’)) { //写入gz文件,供下次使用 <br /></p><p>fwrite($fp, $content); fclose($fp); <br /></p><p>} <br /></p><p>echo $content;  <br /></p><p>}else{ <br /></p><p>header(“HTTP/1.0 404 Not Found”);</p><p>} <br /></p><p>}else { //处理不使用Gzip模式下的输出。原理基本同上 if(file_exists($filename)) { <br /></p><p>$mtime = filemtime($filename); <br /></p><p>$gmt_mtime = gmdate(‘D, d M Y H:i:s’, $mtime) . ‘ GMT’; <br /></p><p>header(“Last-Modified:” . $gmt_mtime); <br /></p><p>header(“Expires: “); <br /></p><p>header(“Cache-Control: “); <br /></p><p>header(“Pragma: “); <br /></p><p>header($type); <br /></p><p>header(“Tips: Normal Respond”); <br /></p><p>$content = readfile($filename); <br /></p><p>echo $content;</p><p> }else { <br /></p><p>header(“HTTP/1.0 404 Not Found”); <br /></p><p>}</p><p> }  <br /></p><p>?></p>
Copy after login




Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template