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

// 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”);

}

}

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值