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,代码如下:
ob_start(“ob_gzhandler”);
ob_start(“compress”);
$pathinfo = pathinfo($_SERVER[PHP_SELF]);
switch ($pathinfo['extension']) {
case “css” :
header(“Content-type: text/css”);
break; //scutephp.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],
代码如下:
// 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”);
}
}
?>
上一篇: PHP中session的使用_PHP教程